Поиск по сайту:

Как изменить каталог данных MySQL на новое место в CentOS 7


Введение

Базы данных со временем растут, иногда перерастая пространство в файловой системе. Вы также можете столкнуться с конкуренцией за ввод-вывод, если они расположены в том же разделе, что и остальная часть операционной системы. RAID, сетевые блочные хранилища и другие устройства могут обеспечивать избыточность и другие полезные функции. Независимо от того, добавляете ли вы больше места, оцениваете способы оптимизации производительности или хотите воспользоваться другими функциями хранилища, это руководство поможет вам переместить каталог данных MySQL.

Предпосылки

Для выполнения этого руководства вам потребуется:

  • Сервер CentOS 7 с пользователем без полномочий root с привилегиями sudo и установленным MySQL. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве How To Install MySQL on CentOS 7, которое может вам помочь.

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

Независимо от того, какое базовое хранилище вы используете, это руководство поможет вам переместить каталог данных в новое место.

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

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

  1. mysql -u root -p

При появлении запроса введите корневой пароль MySQL. Затем в приглашении MySQL выберите каталог данных:

  1. select @@datadir;
Output
+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)

Этот вывод подтверждает, что MySQL настроен на использование каталога данных по умолчанию, /var/lib/mysql/,, так что это каталог, который нам нужно переместить. Подтвердив это, введите exit и нажмите \ENTER, чтобы выйти из монитора:

  1. exit

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

  1. sudo systemctl stop mysqld

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

  1. sudo systemctl status mysqld

Вы можете быть уверены, что он выключен, если последняя строка вывода сообщает вам, что сервер остановлен:

Output
. . . Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

Теперь, когда сервер выключен, мы скопируем существующий каталог базы данных в новое место с помощью rsync. Использование флага -a сохраняет разрешения и другие свойства каталога, а -v обеспечивает подробный вывод, чтобы вы могли следить за ходом выполнения.

Примечание. Убедитесь, что в каталоге нет завершающей косой черты, которая может быть добавлена, если вы используете завершение с помощью табуляции. Когда в конце стоит косая черта, rsync выгружает содержимое каталога в точку монтирования вместо того, чтобы передавать его в содержащий каталог mysql:

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

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

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

Теперь мы готовы обратить внимание на конфигурацию.

Шаг 2 — Указание на новое местоположение данных

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

  1. sudo vi /etc/my.cnf

Найдите в блоке [mysqld] строку, начинающуюся с datadir=, которая отделена от заголовка блока несколькими комментариями. Измените следующий путь, чтобы отразить новое местоположение. Кроме того, поскольку сокет ранее находился в каталоге данных, нам нужно обновить его на новое место:

[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .

После обновления существующих строк нам нужно добавить конфигурацию для клиента mysql. Вставьте следующие настройки в конец файла, чтобы он не разделял директивы в блоке [mysqld]:

[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock

Когда вы закончите, нажмите ESCAPE, затем введите :wq!, чтобы сохранить и выйти из файла.

Шаг 3 — Перезапуск MySQL

Теперь, когда мы обновили конфигурацию для использования нового местоположения, мы готовы запустить MySQL и проверить нашу работу.

  1. sudo systemctl start mysqld
  2. sudo systemctl status mysqld

Чтобы убедиться, что новый каталог данных действительно используется, запустите монитор MySQL.

  1. mysql -u root -p

Посмотрите еще раз на значение каталога данных:

  1. select @@datadir;
Output
+----------------------------+ | @@datadir | +----------------------------+ | /mnt/volume-nyc1-01/mysql/ | +----------------------------+ 1 row in set (0.01 sec)

Теперь, когда вы перезапустили MySQL и подтвердили, что она использует новое местоположение, воспользуйтесь возможностью, чтобы убедиться, что ваша база данных полностью функциональна. После того, как вы проверили целостность любых существующих данных, вы можете удалить каталог резервных данных с помощью sudo rm -Rf /var/lib/mysql.bak.

Заключение

В этом руководстве мы переместили каталог данных MySQL в новое место и обновили SELinux, чтобы учесть изменения. Хотя мы использовали устройство блочного хранилища, приведенные здесь инструкции должны подойти для переопределения местоположения каталога данных независимо от базовой технологии.

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

  • Каталог данных MySQL
  • Настройка нескольких каталогов данных