Answers:
好吧,实际上这个问题可能有特定于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
这是另一套关于执行相同操作的指令 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特有的。不过,这可能会有所帮助:http : //developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location
对于像我这样使用VirtualBox并需要将MySQL数据目录移动到主机系统上的共享文件夹的用户,请遵循位于http://vacilando.org/en/article/moving-mysql-data-files-virtualbox上的简单教程-共享文件夹
这样就行不通了。
用户mysql必须有权写入新目录:
sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..