Забыли про приложение броня.
Для тех, кто заинтересован, я сделал следующее, чтобы переместить папку.
Остановите сервер MySQL:
stop mysql
Создайте новый каталог:
mkdir /array2/mysql
Скопируйте ТОЛЬКО папки базы данных:
cp -R /var/lib/mysql /array2/mysql
cp -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 и сокета на новое местоположение
Мой стал:
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 о новом датадире:
echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
Перезагрузите профили apparmor
sudo /etc/init.d/apparmor reload
Затем запустите mysql:
start mysql
/etc/apparmor.d/usr.sbin.mysqld
каждый раз, когда mysql получает обновление, вы можете добавить/array2/mysql/** rwk,
к нему/etc/apparmor.d/local/usr.sbin.mysqld
. Mysql по-прежнему будет иметь доступ к старому каталогу данных, но это, вероятно, не проблема.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
, Почему только папки базы данных?innodb_use_native_aio=0
в[mysqld]
разделе вашегоmy.cnf
файла, поскольку ZFS в linux не поддерживает AIO. dev.mysql.com/doc/refman/5.5/en/…Я обнаружил, что AppArmor был виновником изучения
syslog
и смог успешно изменить расположениеmysql
данных, следуя этому процессу.Обратите внимание, что в редактируемых ниже файлах
+
были добавлены строки, начинающиеся с, а строки, начинающиеся с-
. Вы не должны фактически печатать / вставлять+
знаки при добавлении строк в эти файлы.Я клонировал
mysql
каталог на новое место:Затем я отредактировал
datadir
строку в/etc/mysql/my.cnf
:Затем я отредактировал
/etc/apparmor.d/usr.sbin.mysqld
:Затем я перезапустил
mysql
.источник
Быть в курсе
Если у вас есть таблицы InnoDB вы должны скопировать в
ibdata*
иib_logfile*
файлы или вы не сможете использовать таблицы. Ты получишь:ошибки.
Выполните эту команду копирования , чтобы скопировать в
ibdata*
иib_logfile*
файлы.источник
Я просто попробовал другой способ, который некоторые могут найти полезным:
скопировать с разрешениями нетронутыми:
резервное копирование (на случай, если что-то пойдет не так):
создайте новый пустой каталог вместо старого:
привязать монтируем новое местоположение к старому:
Надеюсь, что это кому-то поможет, потому что символические ссылки не работают для меня, и это был самый простой способ
источник
Если вы перемещаете свой datadir, вам нужно не только дать новые разрешения datadir, но и убедиться, что все родительские каталоги имеют разрешение.
Я перенес свой datadir на жесткий диск, смонтированный в Ubuntu как:
и мой датадир был Базы данных .
Мне пришлось установить разрешения на 771 для каждого из носителей, пользователей и каталогов данных:
Если это не работает, другой способ заставить MySQL работать - изменить пользователя в /etc/mysql/my.cnf на root; хотя, несомненно, есть некоторые проблемы с этим с точки зрения безопасности.
источник
Я предпочитаю использовать опцию mount with bind, чтобы избежать дальнейших изменений в конфигурации Apparmor и Mysql.
Например:
Предположим, я хочу переместить все в
/var/www
. Допустим, этот каталог - моя среда разработки, и он смонтирован в другом разделе.Сначала нам нужно остановить MySQL :
Перемещаем файлы (сохраняя разрешение)
Это создаст каталог
/var/www/mysql/
со всем содержимым.Мы удаляем все в старом каталоге:
Мы монтируем новый каталог с
bind
опцией в старый.отредактируйте
/etc/fstab
и добавьте эту строку:Это будет монтировать
/var/www/mysql
в нашем пустом каталоге/var/lib/mysql
.
bind
Опция здесь делает волшебство, она будет заполняться/var/lib/mysql
содержимым,/var/www/mysql
поэтому для mysql и apparmor это будет похоже на то, что ничего не изменилось.Теперь мы делаем крепление:
и перезапустите MySQL.
источник
Вы понимаете, если вы будете следовать командам дословно из принятого ответа, это потерпит неудачу?
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 цента стоит.
источник