Разные места для баз данных MySQL?

18

Могу ли я настроить MySQL для хранения конкретной базы данных в отдельном месте на диске?

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

Как я могу это сделать?

Colin
источник
1
Кстати, это можно сделать наоборот. Оставьте базу данных такой, какая она была, и символическую ссылку на нее из Dropbox. Dropbox на самом деле не понимает символические ссылки и просто синхронизирует их как обычно.
TRiG

Ответы:

27

Конечно вы можете! Вы должны предоставить корневое разрешение . Прочитайте ¯Ln страницы руководства.

MySQL хранит данные базы данных в отдельных каталогах в /var/lib/mysql. Я думаю, сначала вы должны были сделать каталог, куда вы хотите поместить файлы выбранной базы данных. Предоставьте разрешение root, остановите MySQL deamon:

# /etc/init.d/mysql stop

Скопируйте ваши данные в новую папку:

# cp /var/lib/mysql/DATABASENAME /path/to/new/database/dir

Удалите старый каталог из файлов данных MySQL: ( Внимание! ВСЕГДА сначала делайте дамп SQL !!! )

# rm -R /var/lib/mysql/DATABASENAME

Создайте символическую ссылку на каталог данных MySQL: ( Обратите внимание! Сначала прочтите man-страницу ln !!! )

# ln -s /full/path/to/new/database/dir /var/lib/mysql/DATABASENAME

После этого вы готовы запустить MySQL:

# /etc/init.d/mysql start

Предупреждение! Если ваш новый каталог не доступен для чтения и чтения MySQL, это не сработает! Пример, общая проблема: вы помещаете новый каталог данных в свою домашнюю папку, ваша домашняя папка защищена от чтения другими пользователями (например, drwxrwx --- you you yourdir).

Спросите, хотите ли вы узнать что-то еще об этом методе!

antivirtel
источник
2
Благодарность! Я даже не рассматривал символические ссылки, я был слишком занят, думая о том, как сделать это внутри mysql.
Колин
8
Вы хотите изменить, /etc/apparmor.d/*mysqldчтобы включить новый каталог тоже. Затем sudo service apparmor reloadперед перезапуском MySQL.
Кис Кук
3
@KeesCook большое спасибо за подсказку apparmor, которая сводила меня с ума !! Похоже, что лучше его вставить /etc/apparmor.d/local(хотя в моей установке уже есть usr.sbin.mysqld), добавление сингла /full/path/to/new/database/dir/** rwk,сделало это для меня ...
Тобиас, J
Большое спасибо, некоторые детали редактирования apparmor здесь также полезны. Я замедлился, пытаясь поместить базу данных на диск, который не монтируется автоматически при загрузке, и ему нужен был пользователь root для доступа к ней. Отказался работать. Отредактированный , fstabкак это так , что этот диск был установлен в файловой системе после загрузки, теперь все работает.
кардамон
3

Имейте в виду, что если вы используете Ubuntu, вам также необходимо добавить запись в конфигурационный файл AppArmour /etc/apparmor.d/usr.sbin.mysqld, в противном случае вы продолжите получать ошибки прав записи даже при изменении файлов и папок. разрешения.

Андреа Моро
источник