当前位置: 首页>>技术教程>>正文


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

,

问题描述

我的硬盘分区有两个分区,因此我可以轻松地使用re-install 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

次佳解决思路

Super user has a nice step by step instructions on how to solve this probelm

这是关于做同样事情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

希望这可以帮助!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7164.html,未经允许,请勿转载。