Всякое настоящее образование добывается только путем самообразования (Н.А. Рубакин).

Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 10 января 2017

Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu
По умолчанию база данных MySQL будет создана в каталоге /var/lib/mysql.

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

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

Чтобы изменить каталог MySQL, вы должны выполнить следующие три шага:

  1. Переместить файлы базы данных MySQL из /var/lib/mysql на другой раздел
  2. Изменить файл my.cnf на новый путь каталога
  3. Обновление параметров безопасности, чтобы отразить изменение каталога: На CentOS или RedHat, изменить настройки SELinux. В Ubuntu или Debian, изменить настройки AppArmor.

Это руководство объясняет подробности о том, как выполнить вышеуказанные три шага, чтобы переместить данные MySQL в другую папку.

Сделайте резервную копию текущей MySQL

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

По умолчанию в MySQL база данных будет в каталоге /var/lib/mysql. Скопируйте этот каталог MySQL в другое место в качестве резервного копирования.

 

Или, если вы предпочитаете, вы можете использовать mysqldump чтобы сделать резервную копию БД MySQL.

Перемещение MySQL каталога данных в другой раздел

В этом примере, мой корневой раздел /dev/sda1, который не имеет много места для каталога /var/lib/mysql по умолчанию. Но, у меня есть раздел /data на диске /dev/sdb1, который имеет много места.

Таким образом, я перемещу базу данных MySQL из раздела /в раздел /data.

Создайте следующий каталог и переместите данные из каталога /var/lib в /data/var/lib, как показано ниже.

 

Несколько моментов, для рассмотрения следующих вопросов:

  • Вы также можете переместить каталог MySQL в каталог /data/var/lib, а также создать символическую ссылку из /var/lib, указывающей на /data/var/lib. Но, в данном конкретном случае, я предпочитаю, простой перенос каталога без символической ссылки, чтобы избежать путаницы.
  • Если возможно, попробуйте использовать команду move, чтобы переместить каталог (вместо копии). При выполнении копии, контекст SELinux будут потерян, и вы должны вручную установить ее позже (как описано ниже). Но, когда вы перемещаете, соответствующий SELinux контекст для MySQL хранятся, и вам не придется беспокоиться об изменении его.

Кроме того, если вы скопировали каталог (вместо того, чтобы переместить), убедитесь, что вы измените владельца надлежащим образом. Если нет, то вы можете получить следующее сообщение об ошибке:

MySQL error: 1017Can’t find file: (errno: 13).

 

 

Измените файл my.cnf и запустите MySQL

В файле /etc/my.cnf, вам необходимо изменить параметр datadir и параметр socket, указать на новый каталог, как показано ниже.

 

И, наконец, перезапустите базу данных MySQL.

 

Если у вас параметр tmpdir уже определен в файле my.cnf, измените каталог для него тоже:

 

После изменения параметров datadir и socket в файле my.cnf, если MySQL не запускается, или не удается с сообщением об ошибке разрешения отказано, то вам необходимо установить SELinux (или AppArmor), как описано далее.

Контекст SELinux для MySQL

Используйте команду ls -Z для просмотра контекста SELinux. Перед тем как перейти в каталог, следующий контекст SELinux был на моей базе данных MySQL. В этом примере, “bd-andreyex” является база данных MySQL в каталоге /var/lib/mysql.

Как вы видите здесь, mysqld_db_t является SELinux тип контекста.

 

После перемещения каталога в новое место, вы должны увидеть точную SELinux в качестве предварительного шага.

 

Примечание: Если вы сделали копию каталога (вместо переноса), вы заметите, что он изменился. В этом случае, изменение контекста SELinux, как описано ниже.

Когда контекст SELinux неправильно, вы увидите следующее сообщение об ошибке (или что-то похожее на это) в журнале log(или /var/log/messages)

 

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

 

Установка SELinux для MySQL на CentOS / RedHat (Вариант 1)

С помощью команды chcon, вы можете изменить тип контекста SELinux в новом каталоге, как показано ниже.

 

В приведенной выше команде:

  • chcon это команда для изменения контекста SELinux
  • Опция -R будет рекурсивно изменить контекст для данного каталога и в вспомогательном каталоге.
  • Опция -t используется для указания типа контекста SELinux, который должен быть установлен. В этом примере, мы устанавливаем его тип mysqld_db_t.
  • /data является каталог, на котором будет выполняться эта команда.

Примечание: Начало изменения контекста из каталога верхнего уровня /data (а не из каталога MySQL), который будет включать в себя каталог MySQL и все подкаталоги и файлы.

Установка SELinux для MySQL на CentOS / RedHat (Вариант 2)

С помощью команды restorecon, вы можете восстановить контекст SELinux к нужному типу. Но, в этом случае, вы должны сообщить SELinux, что является правильным контекстом путем добавления типа mysqld_db_t к карте контекста SELinux.

Чтобы добавить тип SELinux в контексте карты, используйте команду semanage. Установите пакет policycoreutils-python, который содержит команду semanage.

 

Затем выполните следующую команду, чтобы установить SELinux контекст карты на новый каталог.

 

В приведенной выше команде, мы добавляем mysqld_db_t к контекстной карте для каталога /data и всех подкаталогов и файлов в нем.

И, наконец, используйте команду restorecon, которая восстановит соответствующий контекст SELinux в новый каталог /data.

 

Убедитесь в том, что новый каталог /data переместился и подпапки mysql имеют корректный контекст SELinux.

 

Примечание: Вы можете также использовать опцию -e вместе fcontext. Это сделает метку контекста для /data и его подкаталогов в качестве контекста /var/lib/mysql.

 

AppArmor для установки MySQL на Ubuntu / Debian

После перемещения каталога данных MySQL на новое место, если вы не выполните следующие действия, на Ubuntu, вы получите эту ошибку при запуске базы данных:

“(errno: 13)” (permission denied).

Изменение файла usr.sbin.mysqld, как показано ниже, и добавьте следующие две строки. Не забудьте запятую в конце строки, которая требуется.

 

Затем выполните следующую команду для повторной обработки нового конфигурационного файла AppArmor для MySQL, и перезапустите AppArmor.

 

Примечание: В качестве альтернативы, вы можете также добавить псевдоним в файле псевдонима AppArmor, как показано ниже. Опять же, не забудьте запятую в конце этого псевдонима.

 

Параметр сокета клиента MySQL

После указанного изменения, вы могли бы получать это сообщение об ошибке при подключении от клиента mysql:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

 

 

Если это произойдет, передайте параметр -socket клиенту MySQL, и укажите его в файле mysql.sock, который находится в новом каталоге.

 

Если вы заходите в клиент MySQL локально, вы можете также использовать опцию -h и передать 127.0.0.1, как показано ниже. Это также позволит избежать появления сообщения об ошибке mysql.sock.

Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu


Читайте также

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

    Войти с помощью: 

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

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close