Большинству ИТ специалистов известен сервер БД MySQL. Большинство его использует. И все хорошо, если хватает места на жестком диске в разделе /var для хранения баз данных этого сервера и если администратора это место устраивает. Однако случаются моменты, когда необходимо изменить место расположения баз: не стало хватать места в этом разделе и купили второй жесткий диск, изначально так было задумано (например, системный диск небольшого размера), просто неудобно и т.д.
В этом топике я расскажу как изменить расположение директории нахождения БД сервера MySQL для некоторых ОС.
FreeBSDВариант 1.
Останавливаем MySQL:
# /usr/local/etc/rc.d/mysql-server stop
Редактируем файл /etc/rc.conf и вносим в него строчки:
mysql_datadir="/dir1/dir2"
Создаем нужную директорию и копируем в нее все, что лежит в директории по-умолчанию (/var/db/mysql):
# cd /dir1
# mkdir dir2
# cp -R /var/db/mysql/ /dir1/dir2
# chown -R mysql:mysql /dir1/dir2
Запускаем MySQL:
# /usr/local/etc/rc.d/mysql-server start
Все, MySQL берет данные из нужной нам директории.
Вариант 2.
Останавливаем MySQL:
# /usr/local/etc/mysql-server stop
Создаем нужную директорию, переносим все наши базы туда, удаляем директорию по-умолчанию и создаем сим-линк:
# cd /dir1
# mkdir dir2
# cd /var/db
# cp -R /var/db/mysql/ /dir1/dir2
# rm -r /var/db/mysql
# ln -s /dir1/dir2 /var/db/mysql
# chown -R mysql:mysql /dir1/dir2
Запускаем сервер обратно:
# /usr/local/etc/rc.d/mysql-server start
Теперь у нас MySQL сервер берет базы, обращаясь в свое привычное место, но благодаря файловой системе Unix - попадая на самом деле в совсем другую директорию, а то и физический диск.
Debian (не Ubuntu!)Вариант 1.
Останавливаем MySQL сервер.
# /etc/init.d/mysql stop
Редактируем файл /etc/mysql/my.cnf, создаем необходимую папку и копируем в нее текущие базы.
# cd /etc/mysql
# nano my.cnf
// меняем значение пути к БД - строчка datadir=
// например, на /dir1/dir2
# cd /dir1
# mkdir dir2
# cp -R /var/lib/mysql/ /dir1/dir2
# chown -R mysql:mysql /dir1/dir2
Старую директорию можно удалить после успешного старта сервера.
И запускаем сервер обратно.
# /etc/init.d/mysql start
Вариант 2.
Вариант 2 для Debian подобен варианту 2 для FreeBSD.
Останавливаем MySQL:
# /etc/init.d/mysql stop
Создаем нужную директорию, переносим все наши базы туда, удаляем директорию по-умолчанию и создаем сим-линк:
# cd /dir1
# mkdir dir2
# cd /var/lib
# cp -R /var/lib/mysql/ /dir1/dir2
# rm -r /var/lib/mysql
# ln -s /dir1/dir2 /var/lib/mysql
# chown -R mysql:mysql /dir1/dir2
Запускаем сервер обратно:
# /etc/init.d/mysql start
Теперь у нас MySQL сервер берет базы, обращаясь в свое привычное место, но благодаря файловой системе Unix - попадая на самом деле в совсем другую директорию, а то и физический диск.
Ubuntu (-Server)Варианты один в один как в Debian, но с дополнением.
Т.к. Ubuntu использует систему Apparmor, то ни первый, ни второй вариант сходу не прокатят - MySQL просто не стартанет. Поэтому, после проделывания необходимых действий по удобному для Вас варианту, до запуска MySQL сервера, нам необходимо внести записи в Apparmor.
Для этого отредактируйте файл /etc/apparmor.d/usr.sbin.mysqld
Вот так он должен примерно выглядить. Обратите внимание на добавленные строчки касательно директорий /dir1/dir2:
# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>
/usr/sbin/mysqld {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/mysql>
#include <abstractions/winbind>
capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/my.cnf r,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/dir1/dir2/ r,
/dir1/dir2/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,
/sys/devices/system/cpu/ r,
}
Перезапускаем apparmor:
# /etc/init.d/apparmor restart
После редактирования этого файла уже можно запускать MySQL сервер.
CentOS/RedHatОстанавливаем MySQL:
# /etc/init.d/mysqld stop
Копируем текущие базы:
# cd /var/lib
# cp -R mysql /dir1/dir2
# chown -R mysql:mysql /dir1/dir2
Изменяем файл /etc/my.cnf
В этом файле находим опцию datadir и меняем ее на необходимый путь:
datadir = /dir1/dir2
Запускаем MySQL:
# /etc/init.d/mysqld start
Все, директория баз данных изменена.
Актуально для: MySQL на Debian (Lenny, Squeeze), Ubuntu, CentOS/RHEL, FreeBSD
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)