Как изменить место хранения баз данных MySQL

Изменяем место хранения баз данных MySQL
Недавно столкнулся с проблемой: на сервере стало заканчиваться свободное место. А тут срочно нужно было сделать копию одной увесистой базы данных ~2.5Gb. Пришлось искать варианты осуществления поставленной задачи.

Как обычно бывает, при покупке dedicated-сервера файловая система уже разбита на разделы, и не всегда, это сделано так, как Вам было бы удобно. Так в принципе было сделано и в моем случае. Под root было выделено ~10Gb, под /home около 920 Gb. Для проверки свободного места, я пользуюсь командой

df -h

Если количество свободного места в root приблизиться к нулю, настанет такой момент, когда MySQL’ю его не хватит для нормальной работы, в этом случае он загнется, и тем самым переведет все Ваши проекты в нерабочее состояние.

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

/etc/init.d/mysql stop

Я решил хранить данные в /home/lib/mysql. Создадим нужные директории.

mkdir -p /home/lib/mysql/

После этого копируем в них все данные MySQL.

cp -R /var/lib/mysql/* /home/lib/mysql/

После этого нужно обязательно дать права доступа к этим директориям mysql

chown -R mysql:mysql /home/lib/mysql/*

Теперь открываем через какой-нибудь редактор файл настроек mysql (я использую vi)

vi /etc/mysql/my.cnf

Находим и меняем datadir на свой путь к данным mysql:

datadir = /home/lib/mysql

После этого перезапускаем MySQL

/etc/init.d/mysql start

Внимание! Если у Вас Ubuntu, необходимо исправить конфигурацию AppArmor:

vi /etc/apparmor.d/usr.sbin.mysqld

Ищем в нем строки

/var/lib/mysql/ r
/var/lib/mysql/** rwk

и меняем на

/home/lib/mysql/ r
/home/lib/mysql/** rwk

Перезапускаем apparmor

sudo /etc/init.d/apparmor restart

Проверяем работоспособность. После того как убедились, что все работает. Можно удалить старые данные:

cd /var/lib/
rm -Rf ./mysql/

Проверяем наличие свободного места

df -h

Количество свободного места увеличилось — наша миссия выполнена!

Stas Kuryan

Web developer. Перфекционист в написании кода.

4 комментария

  1. ТОха     

    Наверное поэтому я не программист))) Слишком слижно, слишком!

    • Stafox        Автор

      Каждый занимается тем, что ему нравится 🙂 В этом случае успех гарантирован.

  2. Вася     

    Поскольку в Ubuntu используется такая штука, как AppArmor, перед запуском MySQL, нам необходимо внести некоторые коррективы в конфиг-фаил по работе с MySQL. Редактируем файл

    vi /etc/apparmor.d/usr.sbin.mysqld

    Ищем в нем строки
    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    и меняем на
    /home/lib/mysql/ r,
    /home/lib/mysql/** rwk,

    Перезапускаем apparmor
    sudo /etc/init.d/apparmor restart

    /etc/init.d/mysql start

    • Stafox        Автор

      Спасибо. В debian’e такой утилиты нет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *