Перенос MySQL баз на отдельный жесткий диск
27 мая 2012 г.
•
5 минут чтения
Иногда возникает ситуация когда нужно перенести базы mysql в другое место. Например, на отдельный жесткий диск или просто в другое место (какие-то причины безопасности). Это может быть необходимо, если не хватает места на диске или для увеличения быстродействия, например ssd винт или raid массив.
Способ 1
Если вы хотите выделить под БД полностью весь жеский диск, то нужно просто примонтировать устройство в mysql директорию по умолчанию. Обычно это /var/lib/mysql Останавливаем сервер
/etc/init.d/mysqld stop
Копируем базы в какую-то временную директорию
mkdir /var/lib/mysql_temp
cp -r /var/lib/mysql/* /var/lib/mysql_temp/
удаляем базы со старой директории
rm /var/lib/mysql/* -Rf
Предполагается что у вас уже есть подготовленный жесткий диск. Если же нет, то его нужно предварительно разбить и создать файловую систему. Это можно сделать например при помощи cfdisk. И так примонтируем устройство:
mount /dev/sda3 /var/lib/mysql
нужно не забыть прописать в файле /etc/fstab примонтированный раздел, для того что бы при следующей загрузке системы он автоматически монтировался. Более подробнее смотрите мануалы по fstab и mount. В fstab должна быть запись вида:
/dev/sda3 /var/lib/mysql ext4 defaults 0 0
далее переносим назад наши базы
cp -r /var/lib/mysql_temp/* /var/lib/mysql/
и удаляем резервную копию (с этим лучше пока не спешить, удалить можно когда все успешно перенеслось)
rm /var/lib/mysql_temp/ -Rf
далее нужно правильно выставить права доступа к /var/lib/mysql. Владелец папки должен быть mysql c правом на запись
chown mysql:mysql /var/lib/mysql/ -R
chmod 755 /var/lib/mysql
а так же еще один важный момент, выставляем SELinux права доступа
chcon -R system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
проверить SELinux права можно командой ls -Z, должно быть что-то вроде этого:
ls -Z /var/lib/mysql/
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
теперь запускаем mysql демон
/etc/init.d/mysqld start
Способ 2
Если нужно использовать для хранилища не весь раздел, а только директорию на нем или переместить базы в другую директорию, то делаем следующее
останавливаем сервер
/etc/init.d/mysqld stop
копируем базы в новое место. Например, если мы хотим, что бы базы лежали в /media/sda3/mysql/
mkdir /media/sda3/mysql/
cp -r /var/lib/mysql/* /media/sda3/mysql/
ставим права доступа к /media/sda3/mysql/
chown mysql:mysql /var/lib/mysql/ -R
chmod 755 /var/lib/mysql
а так же SELinux права доступа
chcon -R system_u:object_r:mysqld_db_t:s0 /media/sda3/mysql/
правим конфиг my.cnf. Обычно он находится в /etc/my.cnf либо /etc/mysql/my.cnf
[mysqld]
datadir=/media/sda3/mysql
socket=/media/sda3/mysql/mysql.sock
log-bin=/media/sda3/mysql/mysql-bin
[mysqld_safe]
datadir=/media/sda3/mysql
теперь запускаем mysql демон
/etc/init.d/mysqld start
На этом всё. Если что-то не получается, смотрим лог в /var/log/mysql.log