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

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

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

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

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

但是我也想对我的 MySQL 数据文件执行此操作,因为我每次重新安装机器时都需要执行完整的 SQLdump,然后恢复所有数据库才能做更多工作,这让我很恼火。

在不破坏 MySQL 的情况下做到这一点的最佳方法是什么?

答案1

嗯,实际上这个问题可能有一个针对 Ubuntu 的特定答案。

正如 Gergoes 链接所述,这基本上是关于修改/etc/mysql/my.cnf并设置一个新值数据目录=在里面[mysqld]部分。到目前为止,答案还不是很明确。

假设你正在运行一个较新版本的 Ubuntu,你很可能已经应用装甲默认安装,带有配置文件在/usr/sbin/mysqld目录下在强制模式下。该默认配置文件很可能不会接受您的新数据目录。

假设你的新数据目录是/主目录/数据/mysql

如果你打开文件/etc/apparmor.d/usr.sbin.mysqld你会在规则中发现这两行。

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

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

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

在我们启动 MySQL 服务器及其新的数据目录之前,我们还必须明确地重新加载新的 apparmor 配置文件。

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

答案2

超级用户提供了关于如何解决这个问题的详细的分步说明

以下是另一组关于如何做同样事情的说明 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

希望这可以帮助!

答案3

这实际上不是 Ubuntu 独有的。不过,以下内容可能会有所帮助:http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

答案4

这可不行。

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

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

相关内容