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

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

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

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

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

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

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

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

假设你正在运行一个现代版本的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 

超级用户有一个很好的分步说明如何解决这个问题

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

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

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

这是我的解决方案:

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

 $ sudo stop mysql 

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

 $ sudo mv /var/lib/mysql/ /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 

希望这可以帮助!

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

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

这不会那样。

用户mysql必须有权写入新目录:

 sudo chown -R mysql:mysql /newdatadir sudo chmod -R 754 /newdatadir sudo chmod 754 /newdatadir/..