User Tools

Site Tools


каталога_баз_данных_mysql

Изменение местоположения каталога баз данных MySQL

Протестировано на Ubuntu 22.04

В этом руководстве, каталог баз данных будет перемещен на блочное устройство, смонтированное по адресу /mnt/volume-nyc1-01

Перемещение каталога данных MySQL

Прежде чем приступать к перемещению каталога данных MySQL, логично было бы узнать его текущее местоположение. Для этого, запустиминтерактивный сеанс MySQL с учетными данными администратора:

mysql -u root -p

И выполним запрос SELECT, который вернет активный каталог данных данного экземпляра MySQL:

SELECT @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.02 sec)

Вывод указывает на то, что MySQL настроен на использование каталога данных по умолчанию – /var/lib/mysql/. Его, родимого, мы и будем перемещать.
Для сохранения целостности данных, крайне рекомендуется sостановить демон mysql:

sudo systemctl stop mysql
 
# И конечно же надо убедится, что он остановлен
sudo systemctl status mysql

Теперь, когда демон mysql выключен, можно скопировать текущий каталог базы данных /var/lib/mysql в новое место /mnt/volume-nyc1-01 с помощью rsync.

sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

После завершения команды rsync, переименуем текущую директорию (добавим к имени .bak), и сохраняем ее до тех пор, пока не убедимся, что перемещение прошло успешно. Переименовав ее, мы избежим путаницы, которая может возникнуть из-за дублирующихся файлов:

sudo mv /var/lib/mysql /var/lib/mysql.bak

Определение нового местоположения данных

MySQL имеет несколько способов переопределения значений конфигурации. По умолчанию значение datadir = /var/lib/mysql, установлено в файле /etc/mysql/mysql.conf.d/mysqld.cnf. Отредактируем его:

datadir         = /mnt/volume-nyc1-01/mysql

Настройка правил доступа AppArmor

На этом этапе, нужно указать AppArmor разрешить MySQL запись в новую директорию, создав псевдоним между каталогом по умолчанию и новым местоположением. AppArmor – это модуль безопасности в ядре Linux, который позволяет администраторам ограничивать возможности программ с помощью программных профилей, а не пользователей. Начните с редактирования /etc/apparmor.d/tunables/alias:

...
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
...

Чтобы изменения вступили в силу, перезапустим AppArmor:

sudo systemctl restart apparmor

Перезапуск MySQL

sudo systemctl start mysql
sudo systemctl status mysql

Чтобы убедиться, что используется новое местоположение данных, запустим MySQL:

mysql -u root -p

И запросим местоположение хранилища:

SELECT @@datadir;
+----------------------------+
| @@datadir                  |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.00 sec)

После того, когда была проведена проверка целостности любых существующих данных, можно удалить старое хранилище:

sudo rm -Rf /var/lib/mysql.bak

И на всякий случай, снова перезапустим демон:

sudo systemctl restart mysql
каталога_баз_данных_mysql.txt · Last modified: 2023/04/06 10:28 (external edit)