我的硬盘有两个分区,因此我可以轻松重新安装 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/..