问题描述
我的硬盘分区有两个分区,因此我可以轻松地使用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
希望这可以帮助!