Назад | Перейти на главную страницу

Как изменить каталог базы данных MySQL?

Я использую CentOS с cPanel. На моем сервере все базы данных MySQL сохраняются в /var/lib/mysql. Сейчас /var заполнен на 100%, и MySQL перестал работать. Как переместить базы данных в новый каталог, например /home/mysql особенно учитывая, что этим сервером управляет cPanel?

Я не могу подтвердить это из cpanel, так как у меня нет доступа, но это пример консоли, подключенной с помощью ssh и sudo к root. Есть аргументы в пользу использования записи привязки в / etc / fstab вместо символической ссылки, но у меня это работает.

Моя обычная процедура - остановить mysql, переместить содержимое каталога, связать оригинал и перезапустить mysqld.

[tomh@workstation001 ~]$ sudo su -
[root@workstation001 ~]# 

[root@workstation001 ~]# service mysqld stop
Stopping mysqld (via systemctl):  
                                                           [  OK  ]

[root@workstation001 ~]# mv /var/lib/mysql/ /opt/

[root@workstation001 ~]# ln -s /opt/mysql /var/lib/


[root@workstation001 ~]# ls -la /var/lib/mysql
lrwxrwxrwx 1 root root 10 Feb 26 23:02 /var/lib/mysql -> /opt/mysql

[root@workstation001 ~]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]


[root@workstation001 ~]# mysql -uroot 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.18-log MySQL Community Server (GPL)

mysql> show databases;
...
| Database              |
+-----------------------+
| information_schema    |
| mysql                 |
| performance_schema    |
| test   

Я только что заметил похожий вопрос, который похож на дубликат, в котором упоминаются некоторые проблемы, связанные с выполнением этого выше при включенном selinux; http://crashmag.net/change-the-default-mysql-data-directory-with-selinux-enabled

Итак, если у вас есть selinux, вам нужно сделать несколько дополнительных шагов.

если вы хотите изменить mysql каталог данных, вы должны отредактировать файл конфигурации mysql и изменить datadir стоимость.

datadir = /home/user/data

Ваш новый каталог данных ДОЛЖЕН принадлежать mysql и имеет надлежащий контекст безопасности.

chown -R mysql.mysql /home/user/data
chcon -R -t mysqld_db_t /home/user/data

перезапустить сервер mysql

/etc/init.d/mysqld restart

я нашел этот пошаговое руководство работает для меня.

Вы должны установить:

yum install policycoreutils-python

Руководство:

Просмотрите контекст SELinux расположения базы данных по умолчанию для mysql:

~]# ls -lZ /var/lib/mysql
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

Это показывает mysqld_db_t который является элементом контекста по умолчанию для расположения файлов базы данных. Этот контекст необходимо вручную применить к новому расположению базы данных, которое будет использоваться в этом примере, чтобы оно работало правильно.

Остановите демон mysqld:

~]# systemctl stop mariadb.service

Создайте новый каталог для нового местоположения баз данных. В этом примере используется / mysql /:

~]# mkdir -p /mysql

Скопируйте файлы базы данных из старого места в новое:

~]# cp -R /var/lib/mysql/* /mysql/

Измените владельца этого местоположения, чтобы разрешить доступ пользователю и группе mysql. Это устанавливает традиционные разрешения Unix, которые SELinux будет по-прежнему соблюдать:

~]# chown -R mysql:mysql /mysql

Выполните следующую команду, чтобы увидеть начальный контекст нового каталога:

~]# ls -lZ /mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0   mysql

Контекст usr_t этого вновь созданного каталога в настоящее время не подходит для SELinux в качестве местоположения файлов базы данных MariaDB. После изменения контекста MariaDB сможет правильно работать в этой области.

Откройте основной файл конфигурации MariaDB /etc/my.cnf в текстовом редакторе и измените datadir вариант, чтобы он относился к новому местоположению. В этом примере необходимо ввести значение /mysql:

[mysqld]
datadir=/mysql

Сохраните этот файл и выйдите.

Начало mysqld. Служба должна не запуститься, и сообщение об отказе будет зарегистрировано в /var/log/messages файл:

~]# systemctl start mariadb.service
Job for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.

Однако, если демон аудита запущен и вместе с ним setroubleshoot сервис, отказ будет зарегистрирован в /var/log/audit/audit.log файл вместо этого:

SELinux is preventing `/usr/libexec/mysqld` "write" access on /mysql. For complete SELinux messages. run `sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71`

Причина этого отрицания в том, что mysql неправильно помечен для файлов данных MariaDB. SELinux не позволяет MariaDB иметь доступ к контенту, помеченному как usr_t. Выполните следующие шаги, чтобы решить эту проблему:

Выполните следующую команду, чтобы добавить сопоставление контекста для mysql. Обратите внимание, что semanageutility по умолчанию не устанавливается. Если он отсутствует в вашей системе, установите policycoreutils-python пакет.

~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"

Это отображение записывается в /etc/selinux/targeted/contexts/files/file_contexts.local файл:

~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

/mysql(/.*)?    system_u:object_r:mysqld_db_t:s0

Теперь используйте restorecon утилита для применения этого отображения контекста к работающей системе:

~]# restorecon -R -v /mysql

Теперь, когда mysql location помечен правильным контекстом для MariaDB, mysqld запускается:

~]# systemctl start mariadb.service

Подтвердите, что контекст изменился для mysql:

~]$ ls -lZ /mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

Местоположение было изменено и помечено, и mysqld успешно начался. На этом этапе все запущенные службы должны быть протестированы, чтобы подтвердить нормальную работу.

Остановка установки / экземпляра по умолчанию

service mysqld stop

Очистить текущую конфигурацию

rm /etc/my.cnf

Деинсталлируйте установку / экземпляр по умолчанию

yum remove mysql mysql-server -y

Очистить текущий датадир

test -d /var/lib/mysql/ && rm -rf /var/lib/mysql/

Очистить «Новый» датадир

test -d /mysql/mysql/ && rm -rf /mysql/mysql/

Установите его снова

yum install mysql mysql-server -y

Проверить статус услуги

service mysqld status

Запустите его - просто чтобы создать первую / стандартную структуру

service mysqld start

Проверить статус услуги

service mysqld status

Прервать текущую установку сервера MySQL

service mysqld stop

Убедитесь, что у вас больше не запущен экземпляр / служба

ps axu | grep mysql

Переместите каталог данных mysql в раздел '/ mysql' и создайте символическую ссылку

test -d /var/lib/mysql/ && mv /var/lib/mysql/ /mysql/ && ln -s /mysql/mysql /var/lib/

Проверить символическую ссылку и реальный путь

ls -lrth /var/lib/ | grep mysql 

Установить разрешение на новый датадир

chown -R mysql:mysql /mysql/mysql

Начни это

service mysqld start

Попробуйте подключиться (имейте в виду, что установка MySQL по умолчанию не устанавливает pwd для пользователя root, и тогда вам следует подключиться с помощью «пустого пароля»

mysql -u root -p --host 127.0.0.1

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

create database DBTesteNew;
exit

Проверьте, находится ли новая база данных в 'новом каталоге данных'

ls /mysql/mysql

Убедитесь, что mysqld настроен на запуск во время загрузки

chkconfig mysqld on

начать сначала

reboot