MySQL数据库的不同位置?


18

我可以配置MySQL以将特定数据库存储在磁盘上的单独位置吗?

我仍然希望所有新数据库都转到默认位置,但是我想将一个特定的数据库存储在我的Dropbox文件夹中,以便它可以在几台计算机之间保持同步。

我怎样才能做到这一点?


1
顺便说一句,有可能反过来做。保持数据库不变并从Dropbox 对其进行符号链接。Dropbox并不真正了解符号链接,只会正常进行同步。
TRiG

Answers:


27

当然可以!您必须授予root权限。阅读ln手册页。

MySQL将数据库数据存储在单独的目录中/var/lib/mysql。我认为,首先,您必须创建一个目录,您要在其中放置所选数据库的文件。授予root权限,停止MySQL守护进程:

# /etc/init.d/mysql stop

将数据复制到新文件夹:

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

从MySQL数据文件中删除旧目录:(警告!务必先进行SQL转储!!!

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

将符号链接返回到MySQL数据目录:(注意!请先阅读ln的手册页!!!

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

之后,您就可以开始启动MySQL了:

# /etc/init.d/mysql start

警告!如果您的新目录不能被MySQL读写,那将是行不通的!例如,常见问题:将新数据目录放置到主文件夹中,您的主文件夹被他人保护读取(例如:drwxrwx ---您是yourdir)。

问,如果您想了解有关该方法的其他信息!


2
谢谢!我什至没有考虑符号链接,我太忙于思考如何在mysql中进行链接。
科林2010年

8
您还需要进行编辑/etc/apparmor.d/*mysqld以包括新目录。然后sudo service apparmor reload在重新启动MySQL之前。
Kees Cook

3
@KeesCook非常感谢您的推荐技巧,这让我发疯了!!看起来最好放进去/etc/apparmor.d/local(在我的安装中已经有一个usr.sbin.mysqld),/full/path/to/new/database/dir/** rwk,为我添加了一个...
Tobias J

非常感谢,在此处编辑Apparmor的一些详细信息也很有用。我放慢了尝试将数据库放在启动时不会自动挂载的驱动器上,并且需要root用户才能访问它。拒绝工作。fstab这样进行编辑,以便在启动后将该驱动器安装在文件系统中,现在一切正常。
cardamom

3

请记住,如果您使用的是Ubuntu,则还需要在AppArmour配置文件/etc/apparmor.d/usr.sbin.mysqld中添加一个条目,否则即使更改文件和文件夹,也会不断出现写入权限错误权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.