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

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

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

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

start: Job failed to start
57
задан 18 February 2017 в 01:50

7 ответов

Я обнаружил, что AppArmor был виновником изучения 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.

0
ответ дан 18 February 2017 в 01:50

Забыл про app armor.

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

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

stop mysql

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

mkdir /array2/mysql

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

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

Сделайте резервную копию [ 1113] file:

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

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

nano /etc/mysql/my.cnf

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

Шахта стала :

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

Обновите разрешения каталога:

chown -R mysql:mysql /array2/mysql

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

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

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

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

Сообщите AppArmor о новом датадире:

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

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

sudo /etc/init.d/apparmor reload

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

start mysql
0
ответ дан 18 February 2017 в 01:50

Я предпочитаю использовать опцию 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.

  6. [+1121]
0
ответ дан 18 February 2017 в 01:50

Знайте.

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

«Таблица» databaseName.tableName «не существует»

ошибки.

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

sudo cp -p /var/lib/mysql/ib* /array2/mysql/
0
ответ дан 18 February 2017 в 01:50

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

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

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

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

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

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

Just мои 2 цента стоит.

0
ответ дан 18 February 2017 в 01:50

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

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

/media/*user*/Data/

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

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

sudo chmod 771 *DIR*

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

0
ответ дан 18 February 2017 в 01:50

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

копия с неповрежденными полномочиями:

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

Надежда, которая помогает кому-то, потому что symlinking не работал на меня, и это было самым простым путем

4
ответ дан 18 February 2017 в 01:50

Другие вопросы по тегам:

Похожие вопросы: