Как изменить место хранения баз данных 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. Перфекционист в написании кода.

7 комментариев

  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 такой утилиты нет.

  3. Алексей     

    Помогло после правок:
    Правим профиль AppArmor. Идем в файл /etc/apparmor.d/usr.sbin.mysqld, находим в нем строки про каталог с базами и добавляем свое:

    # Allow data dir access
    # было
    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    # добавил
    /home/all/mysql_5.7_bugs/ r,
    /home/all/mysql_5.7_bugs/** rwk,

    Перегружаем профиль и рестартуем MySQL-сервер:

    sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
    sudo systemctl restart mysql

  4. 0x41     

    Автор вот ну хорош гнать не использует ты vi ты либо вые***я решил либо школоло потролить… ну не используешь ты его вот не гони….

    • Stafox        Автор

      Сейчас бы коментить статьи 2013 года.
      Использую то, что стоит на машине. И vi, и vim, и nano.

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

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