it-swarm.cn

如何将MySQL数据文件移动到不同的分区?

我的硬盘分区有两个分区,因此我可以轻松地重新安装Ubuntu并尝试不同版本而不会丢失我的主目录数据。设置如下:

20GB  -> /     (root)
180GB -> /home 

我做了很多开发工作,所以我将/var/www文件夹符号链接到/home/valorin/workspace

但是我想用我的MySQL数据文件来做这件事,因为我很生气,每次我重新安装我的机器时,我需要做一个完整的SQLdump,然后在我做更多的工作之前恢复所有的数据库。

在不破坏MySQL的情况下,最好的方法是什么?

28
Stephen RC

嗯,实际上Ubuntu有一个潜在的特定答案。

正如Gergoes链接所提到的,这基本上是关于修改/ etc/mysql/my.cnf并为设置一个新值datadir =[mysqld]部分。到目前为止,答案的非特定部分。

假设您正在运行一个有点现代版本的Ubuntu,您很可能默认安装 AppArmor ,其中包含/ usr/sbin/mysqld的配置文件强制模式。该默认配置文件很可能不接受您的新datadir。

我们假设您的新数据将是/ home/data/mysql

如果你打开文件/ etc/apparmor.d/usr.sbin.mysqld,你将在规则中找到这两行。

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

假设我们上面的例子,它们必须被这两行替换或(可能更好)补充。

/home/data/mysql/ r,
/home/data/mysql/** rwk,

在我们使用新的datadir启动MySQL服务器之前,我们还必须显式重新加载我们的新apparmor配置文件。

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
31
andol

超级用户有一个关于如何解决这个问题的一步一步的说明

这是关于做同样事情的另一套指令 http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

在这里重新发布。如果你可以超级用户,可以上下投票。

在对权限的一些常见混淆之后,我意识到问题不在于我没有正确的权限和路径,而是AppArmor阻止mysql读取和写入新位置。

这是我的解决方案:

首先停止MySQL所以当你摆弄时没有什么奇怪的事情发生:

$ Sudo stop mysql

然后将所有数据库目录移动到新主目录:

$ Sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

不要移动文件,它们将由mysql生成,只需移动文件夹(即数据库)。

然后礼貌地要求AppArmor允许mysql使用新文件夹:

$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld

添加行:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

然后告诉mysql datadir已移动:

$ Sudo vim /etc/mysql/my.cnf 

换行:

datadir=/var/lib/mysql

至:

datadir=/my-new-db-dir/

注意:根据您的数据库设置,您可能还需要更改innodb-data-home-dir等。

然后重新启动AppArmor以读取新设置:

$ Sudo /etc/init.d/apparmor restart

并使用新的datadir再次启动MySQL:

$ Sudo start mysql

希望这可以帮助!

4
nelaaro

对于那些喜欢我使用VirtualBox并需要将MySQL数据库移动到主机系统上的共享文件夹的人,请按照简单的教程 http://vacilando.org/en/article/moving-mysql-data -files-的virtualbox共享文件夹

0
Vacilando

这真的不是Ubuntu具体的。不过,这里可能会有所帮助: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman