如何将MySQL数据文件移动到其他分区?


27

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

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

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

但是我也想对我的MySQL数据文件执行此操作,因为每次我重新安装计算机时我都会感到烦恼,我需要执行一个完整的SQLdump,然后还原所有数据库,然后才能进行更多工作。

不破坏MySQL的最佳方法是什么?

Answers:


30

好吧,实际上这个问题可能有特定于Ubuntu的答案。

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

假设您运行的是Ubuntu的较新版本,则默认情况下可能会很好地安装AppArmor,并在强制模式下使用/ usr / sbin / mysqld的配置文件。该默认配置文件很可能不接受您的新数据目录。

让我们假设您的新数据目录将是/ 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

这似乎不适用于Natty(11.4)。我必须使用/ usr / sbin / mysqld启动MySQL,以使其读取更改后的数据目录。否则,它将继续读取我的旧数据目录。我这可能是一个错误。
三杯

以上在Ubuntu 12.04(Precise)上无法为我解决问题。我发现需要编辑文件/etc/apparmor.d/tunables/alias使其包含一行“ alias / var / lib / mysql /-> / home / data / mysql /”,在此位置,我不需要对任何其他AppArmor文件进行任何更改。在使用“ /etc/init.d/apparmor restart”重新启动AppArmor和使用“ restart mysql”重新启动MySQL之后,它立即起作用。

我认为需要在要使用的新文件夹上设置某些权限。有人知道他们是什么吗?我知道mysql安装会创建一个mysql用户...默认情况下,我无法访问/ var / lib / mysql文件夹的内容。
NullVoxPopuli 2013年

4

超级用户对如何解决此问题有很好的逐步说明

这是另一套关于执行相同操作的指令 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

希望这可以帮助!


0

这确实不是Ubuntu特有的。不过,这可能会有所帮助:http : //developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


指示并没有真正帮助,因为我无法工作的部分是AppArmour,而您的帖子只是顺便解释了一下。另外,此网站是否有特定于Ubuntu的问题?寻求帮助的新用户如何知道特定于Ubuntu的内容,以及应该如何询问它们是否通用?
斯蒂芬RC 2010年

网站不可用。
横街2014年


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.