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

Я пытаюсь переместить каталог данных моей базы данных MySQL во второй дисковый массив, который у меня есть в качестве точки монтирования /array2/.

Проблема, с которой я столкнулся, заключается в том, что я перепробовал все, и после того, как я изменил местоположение datadir в моем файле.cnf, mysql больше не запустится.

Все, что я получаю, это:

start: Job failed to start

Забыл о приложении armour.

Для тех, кто заинтересован, я сделал следующее, чтобы переместить папку.

Остановите сервер mysql:

stop mysql

Создайте новый каталог:

mkdir /array2/mysql

Скопируйте ТОЛЬКО папки базы данных:

cp -R /var/lib/mysql /array2/mysqlcp -R /var/lib/mysql/users /array2/mysql

Резервное копирование my.cnf файл:

cp /etc/mysql/my.cnf /root/my.cnf.backup

Отредактируйте my.cnf файл:

nano /etc/mysql/my.cnf

Измените все упоминания о старом каталоге данных и сокете на ваше новое местоположение

Мой стал:

datadir=/array2/mysql
socket=/array2/mysql/mysql.sock

Обновите права доступа к каталогу:

chown -R mysql:mysql /array2/mysql

Переименуйте старый каталог:

mv /var/lib/mysql /var/lib/mysql-old

Создайте символическую ссылку, на всякий случай:

ln -s /array2/mysql /var/lib/mysql 

Сообщите AppArmor о новом datadir:

echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias

Перезагрузите профили apparmor

sudo /etc/init.d/apparmor reload

Затем запустите mysql:

start mysql

Я обнаружил, что АппАрмор был виновником, изучив syslog, и смог успешно изменить mysql расположение данных, выполнив этот процесс.

Пожалуйста, обратите внимание, что в файлах, отредактированных ниже, строки, начинающиеся с + были добавлены, и строки, начинающиеся с - были удалены. На самом деле вы не должны вводить / вставлять + знаки при добавлении строк в эти файлы.

Я клонировал mysql каталог в новое местоположение:

sudo rsync -av /var/lib/mysql /new_dir

Затем я отредактировал datadir очередь в /etc/mysql/my.cnf:

sudo vi /etc/mysql/my.cnf
-datadir     = /var/lib/mysql+datadir     = /new_dir/mysql

Затем я отредактировал /etc/apparmor.d/usr.sbin.mysqld:

sudo vi /etc/apparmor.d/usr.sbin.mysqld
-  /var/lib/mysql/ r,-  /var/lib/mysql/** rwk,+  /new_dir/mysql/ r,+  /new_dir/mysql/** rwk,

Затем я перезапустил mysql.

Знать.

Если у вас есть таблицы InnoDB, вы ДОЛЖНЫ скопировать поверх ibdata* и ib_logfile* файлы, или вы не сможете использовать таблицы. Вы получите:

'Таблица 'имя_базы данных.Имя_таблицы' не существует'

ошибки.

Выполните эту команду копирования, чтобы скопировать поверх ibdata* и ib_logfile* файлы.

sudo cp -p /var/lib/mysql/ib* /array2/mysql/

Я просто попробовал другой способ, который некоторые могут счесть полезным:

копирование с сохранением прав доступа:

rsync -avzh /var/lib/mysql /path/to/new/place

резервное копирование (на случай, если что-то пойдет не так):

mv /var/lib/mysql /var/lib/_mysql

создайте новый пустой каталог вместо старого:

mkdir /var/lib/mysql

привязать смонтировать новое местоположение к старому:

mount -B /path/to/new/place /var/lib/mysql

Надеюсь, это кому-то поможет, потому что символическая ссылка у меня не сработала, и это был самый простой способ

Я предпочитаю использовать опцию mount with bind, чтобы избежать каких-либо дальнейших изменений в конфигурации Apparmor и Mysql.


Например:

Предположим, я хочу переместить все в /var/www.Допустим, этот каталог - моя среда разработки, и он смонтирован в другом разделе

  1. Сначала нам нужно остановить mysql:

    sudo systemctl stop mysql.service
  2. Мы перемещаем файлы (сохранение разрешения)

    sudo rsync -av /var/lib/mysql /var/www

    Это приведет к созданию каталога /var/www/mysql/ со всем содержимым.

  3. Мы удаляем все, что находится в старом каталоге:

    sudo rm -r /var/lib/mysql/*
  4. Мы монтируем новый каталог с помощью bind вариант в старом варианте.
    редактировать /etc/fstab и добавьте эту строку:

    /var/www/mysql /var/lib/mysql  none  bind 0 0

    Это позволит смонтировать /var/www/mysql в нашем пустом реж /var/lib/mysql
    То bind опция здесь творит волшебство, она заполнит /var/lib/mysql с содержанием /var/www/mysql так что для mysql и apparmor это будет так, как будто ничего не изменилось.

  5. Теперь мы делаем монтаж:

    sudo mount -a

    и перезапустите mysql.

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

Я переместил свой каталог данных на жесткий диск, смонтированный в Ubuntu как:

/media/*user*/Data/

и мой datadir был Базы данных.

Мне пришлось установить права доступа на 771 для каждого из носителей, пользователь и каталоги данных:

sudo chmod 771 *DIR*

Если это не сработает, другой способ заставить mysql работать - изменить пользователя в /etc /mysql /my.cnf на root; хотя, несомненно, есть некоторые проблемы с этим с точки зрения безопасности.

Вы понимаете, что если вы будете дословно следовать командам из принятого ответа, это приведет к сбою?

cp -R /var/lib/mysql /array2/mysql

Скопирует /var/lib/mysql в /array2/mysql/mysql.

Когда вы устанавливаете свой конфигурационный файл, вам лучше указать /array2 /mysql/mysql в качестве каталога, иначе ваш mysqld не запустится.

Лучшими командами копирования были бы:

cp -R /var/lib/mysql /array2/cp -R /var/lib/mysql/users /array2/mysql

Всего на мои 2 цента.