Как изменить каталог данных MySQL/MariaDB по умолчанию в Linux
После установки компонентов стека LAMP на сервер CentOS/RHEL 7 вам, возможно, захочется сделать несколько вещей.
Некоторые из них связаны с повышением безопасности Apache и MySQL/MariaDB, тогда как другие могут быть применимы или нет в зависимости от наших настроек или потребностей.
Например, в зависимости от ожидаемого использования сервера базы данных мы можем захотеть изменить каталог data по умолчанию (/var/lib/mysql
) в другое место. Это тот случай, когда ожидается, что такой каталог будет расти из-за интенсивного использования.
В противном случае файловая система, в которой хранится /var
, может в какой-то момент разрушиться, что приведет к сбою всей системы. Другой сценарий изменения каталога по умолчанию — это когда у нас есть выделенный сетевой ресурс, который мы хотим использовать для хранения наших фактических данных.
По этой причине в этой статье мы объясним, как изменить каталог данных MySQL/MariaDB по умолчанию на другой путь на сервере CentOS/RHEL 7 и дистрибутивах Ubuntu/Debian.
Хотя мы будем использовать MariaDB, концепции, объясненные в этой статье, и шаги, предпринятые в этой статье, применимы как к MySQL, так и к MariaDB , если не указано иное.
Изменение каталога данных MySQL/MariaDB по умолчанию
Примечание. Мы предполагаем, что наш новый каталог данных — /mnt/mysql-data
. Важно отметить, что владельцем этого каталога должен быть mysql:mysql
.
mkdir /mnt/mysql-data
chown -R mysql:mysql /mnt/mysql-data
Для вашего удобства мы разделили весь процесс на 5 простых шагов:
Шаг 1. Определите текущий каталог данных MySQL
Для начала стоит определить текущий каталог данных с помощью следующей команды. Не думайте, что это по-прежнему /var/lib/mysql
, поскольку в прошлом он мог быть изменен.
mysql -u root -p -e "SELECT @@datadir;"
После ввода пароля MySQL результат должен быть примерно таким.
Шаг 2. Скопируйте каталог данных MySQL в новое место.
Чтобы избежать повреждения данных, прежде чем продолжить, остановите службу, если она в данный момент запущена. Для этого используйте известные команды systemd:
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
Если служба была отключена, вывод последней команды должен быть следующим:
Затем рекурсивно скопируйте содержимое /var/lib/mysql
в /mnt/mysql-data
, сохраняя исходные разрешения и временные метки:
cp -R -p /var/lib/mysql/* /mnt/mysql-data
Шаг 3. Настройте новый каталог данных MySQL
Отредактируйте файл конфигурации (my.cnf
), указав новый каталог данных (в данном случае /mnt/mysql-data
).
vi /etc/my.cnf
OR
vi /etc/mysql/my.cnf
Найдите разделы [mysqld]
и [client]
и внесите следующие изменения:
Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock
Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock
Сохраните изменения и перейдите к следующему шагу.
Шаг 4. Установите контекст безопасности SELinux в каталог данных.
Этот шаг применим только к RHEL/CentOS и его производным.
Добавьте контекст безопасности SELinux в /mnt/mysql-data
перед перезапуском MariaDB.
semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
restorecon -R /mnt/mysql-data
Затем перезапустите службу MySQL.
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
Теперь используйте ту же команду, что и в Шаге 1, чтобы проверить местоположение нового каталога данных:
mysql -u root -p -e "SELECT @@datadir;"
Шаг 5. Создайте базу данных MySQL для подтверждения каталога данных
Войдите в MariaDB, создайте новую базу данных и затем проверьте /mnt/mysql-data
:
mysql -u root -p -e "CREATE DATABASE tecmint;"
Поздравляем! Вы успешно изменили каталог данных для MySQL или MariaDB.
Краткое содержание
В этом посте мы обсудили, как изменить каталог данных на сервере MySQL или MariaDB, работающем в дистрибутивах CentOS/RHEL 7 и Ubuntu/Debian.
Есть ли у вас какие-либо вопросы или комментарии по поводу этой статьи? Не стесняйтесь, дайте нам знать, используя форму ниже – мы всегда рады услышать ваше мнение!