Перемещение каталога базы данных MARIADB В Oracle Linux 8
Объём базы данных увеличивается, и со временем она исчерпывает пространство файловой системы. Кроме того, если ввод и вывод находится на одном разделе с остальной частью операционной системы, возможные конфликты доступа к устройствам ввода/вывода. 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. В данном руководстве использовалось блочное хранилище, однако эти инструкции подходят для настройки любого устройства независимо от технологии, на которой оно основано.