Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. RAID, сетевые блочные хранилища и другие устройства предоставляют избыточность данных и другие полезные функции. Если вы хотите добавить больше места и оптимизировать производительность, а также воспользоваться другими функциями хранения, это руководство поможет вам переместить каталог данных MariaDB.
Содержание[Скрыть]
Перемещение каталога данных MariaDB
Чтобы подготовиться к перемещению каталога данных MariaDB, нужно уточнить его текущее местонахождение. Для этого откройте интерактивную сессию MariaDB и укажите учётные данные администратора.
1 |
mysql -u root -p |
Укажите root-пароль MariaDB. В командной строке запросите каталог данных:
1 2 3 4 5 6 7 |
select @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec) |
Этот вывод подтверждает, что в данном случае MariaDB использует каталог данных по умолчанию, /var/lib/mysql/. Этот каталог и нужно переместить. Чтобы закрыть командную строку MariaDB, введите:
1 |
exit |
Чтобы обеспечить целостность данных, отключите MariaDB, прежде чем вносить изменения в каталог данных:
1 |
sudo systemctl stop mariadb |
Утилита systemctl не отображает результаты некоторых команд управления сервисами. Чтобы убедиться в том, что сервер MariaDB отключен, используйте следующую команду:
1 |
sudo systemctl status mariadb |
Последняя строка вывода должна сообщать:
1 2 |
. . . systemd[1]: Stopped MariaDB 10.5.9 database server. |
Теперь, когда сервер отключен, скопируйте текущий каталог данных в новое место с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога. Флаг –v предоставляет подробный вывод.
Примечание: Убедитесь, что в названии каталога нет конечной косой черты (который система может добавить, если вы используете автодополнение). Если такой слеш есть, rsync будет сбрасывать содержимое каталога в точку монтирования, а не в каталог.
1 |
sudo rsync -av /var/lib/mysql /srv |
Настройка нового каталога данных
MariaDB предлагает несколько способов отмены значений конфигурации. По умолчанию datadir настроен в файле /etc/my.cnf в каталоге /var/lib/mysql. Откройте этот файл:
1 |
sudo nano /etc/my.cnf.d/server.cnf |
Найдите строку datadir= и укажите в ней путь к новому каталогу данных. кроме того, нужно обновить путь к сокету. В данном случае эти настройки будут иметь такой вид:
1 2 3 4 |
[mysqld] . . . datadir=/srv/mysql socket=/srv/mysql/mysql.sock . . . |
Теперь нужно добавить в настройки клиент mysql. Вставьте в конец файла следующие строки (в блок [mysqld] перед строкой include).
1 |
sudo nano /etc/my.cnf.d/client.cnf |
1 2 3 |
[client] port=3306 socket=/srv/mysql/mysql.sock |
Чтобы закрыть и сохранить файл, нажмите Escape, а затем :wq!.
Запуск MariaDB
Теперь нужно запустить MariaDB и запросить состояние сервера, чтобы убедиться, что все работает.
1 2 |
sudo systemctl start mariadb sudo systemctl status mariadb |
1 2 |
mariadbd[6471]: Version: '10.5.9-MariaDB' socket: '/srv/mysql/mysql.sock' port: 3306 MariaDB Server systemd[1]: Started MariaDB 10.5.9 database server. |
Чтобы убедиться, что сервер использует новый каталог данных, запустите:
1 |
mysql -u root -p |
Запросите каталог данных:
1 2 3 4 5 6 7 |
MariaDB [(none)]> select @@datadir; +-------------+ | @@datadir | +-------------+ | /srv/mysql/ | +-------------+ 1 row in set (0.001 sec) |
Чтобы закрыть командную строку, введите:
1 |
exit |
Если SELinux отключен, пропускаем следующий текст, убеждаемся в том, что база данных полностью функциональна. После проверки целостности данных вы можете удалить резервную копию каталога данных:
1 |
sudo rm -Rf /var/lib/mysql |
Контекст SELinux для MySQL
Используйте команду ls -Z для просмотра контекста SELinux. Перед тем как перейти в каталог, следующий контекст SELinux был на моей базе данных MySQL.
Как вы видите здесь, mysqld_db_t является SELinux тип контекста.
1 |
ls -Z /var/lib/mysql |
1 2 3 4 5 |
unconfined_u:object_r:mysqld_db_t:s0 aria_log.00000001 system_u:object_r:mysqld_db_t:s0 localhost.pid unconfined_u:object_r:mysqld_db_t:s0 aria_log_control system_u:object_r:mysqld_db_t:s0 multi-master.info unconfined_u:object_r:mysqld_db_t:s0 ib_buffer_pool unconfined_u:object_r:mysqld_db_t:s0 mysql unconfined_u:object_r:mysqld_db_t:s0 ibdata1 system_u:object_r:mysqld_db_t:s0 mysql.sock unconfined_u:object_r:mysqld_db_t:s0 ib_logfile0 unconfined_u:object_r:mysqld_db_t:s0 performance_schema |
После перемещения каталога в новое место, вы должны увидеть точную SELinux в качестве предварительного шага.
1 |
ls -Z /srv/mysql |
Примечание: Если вы сделали копию каталога (вместо переноса), вы заметите, что он изменился. В этом случае, изменение контекста SELinux, как описано ниже.
Когда контекст SELinux неправильно, вы увидите следующее сообщение об ошибке (или что-то похожее на это) в журнале log(или /var/log/messages)
1 2 |
# cat /var/log/audit/audit.log: type=AVC msg=audit(1447281394.928:20831): avc: denied { read } for pid=21346 comm="mysqld" name="mysql" dev=sda1 ino=5506027 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 |
Кроме того, вы увидите следующее в файле mysqld.log, когда базу данных MySQL не удастся запустить.
1 2 3 4 5 6 |
# cat /var/log/mysqld.log: mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql [Warning] Can't create test file /var/lib/mysql/devdb..lower-test /usr/libexec/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13) [ERROR] Aborting [Note] /usr/libexec/mysqld: Shutdown complete |
Установка SELinux для MySQL на CentOS / RedHat
С помощью команды chcon, вы можете изменить тип контекста SELinux в новом каталоге, как показано ниже.
1 |
sudo chcon -R system_u:object_r:mysqld_db_t:s0 /srv/mysql |
В приведенной выше команде:
- chcon это команда для изменения контекста SELinux
- Опция -R будет рекурсивно изменить контекст для данного каталога и в вспомогательном каталоге.
- Опция -t используется для указания типа контекста SELinux, который должен быть установлен. В этом примере, мы устанавливаем его тип mysqld_db_t.
- /srv/mysql является каталог, на котором будет выполняться эта команда.
Примечание: Начало изменения контекста из каталога верхнего уровня /data (а не из каталога MySQL), который будет включать в себя каталог MySQL и все подкаталоги и файлы.
Параметр сокета клиента MySQL
После указанного изменения, вы могли бы получать это сообщение об ошибке при подключении от клиента mysql:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
1 2 |
# mysql -u root -pMyPassword ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) |
Если это произойдет, передайте параметр -socket клиенту MySQL, и укажите его в файле mysql.sock, который находится в новом каталоге.
1 |
mysql -u root -pMyPassword --socket=/data/var/lib/mysql/mysql.sock |
Если вы заходите в клиент MySQL локально, вы можете также использовать опцию -h и передать 127.0.0.1, как показано ниже. Это также позволит избежать появления сообщения об ошибке mysql.sock.
Так же возможно придется изменить параметр php:
1 |
sudo nano /etc/php.ini |
1 |
mysqli.default_socket = /srv/mysql/mysql.sock |
Заключение
Теперь вы умеете перемещать каталог данных MariaDB. В данном руководстве использовалось блочное хранилище, однако эти инструкции подходят для настройки любого устройства независимо от технологии, на которой оно основано.
Ваш комментарий будет первым