如何移动 MySQL 数据目录?

如何移动 MySQL 数据目录?

我正在尝试将我的 MySQL 数据库的数据目录移动到作为挂载点的第二个磁盘阵列/array2/

我遇到的问题是我已经尝试了所有方法,但在修改 my.cnf 中 datadir 的位置后,mysql 将无法再次启动。

我得到的是:

start: Job failed to start

答案1

忘记了应用程序装甲。

对于任何感兴趣的人,我做了以下操作来移动文件夹。

停止 mysql 服务器:

stop mysql

创建新目录:

mkdir /array2/mysql

仅复制数据库文件夹:

cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql

备份my.cnf文件:

cp /etc/mysql/my.cnf /root/my.cnf.backup

编辑my.cnf文件:

nano /etc/mysql/my.cnf

将所有提及的旧数据目录和套接字更改为新位置

我变成了:

datadir=/array2/mysql
socket=/array2/mysql/mysql.sock

更新目录权限:

chown -R mysql:mysql /array2/mysql

重命名旧目录:

mv /var/lib/mysql /var/lib/mysql-old

创建一个符号链接,以防万一:

ln -s /array2/mysql /var/lib/mysql 

让 AppArmor 了解新的数据目录:

echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias

重新加载 apparmor 配置文件

sudo /etc/init.d/apparmor reload

然后启动mysql:

start mysql

答案2

通过检查,我发现 AppArmor 是罪魁祸首syslog,并且能够mysql按照此过程成功更改数据位置。

请注意,在下面编辑的文件中,+添加了以 开头的行,-删除了以 开头的行。+向这些文件添加行时,您实际上不应该键入/粘贴符号。

我将目录克隆mysql到新位置:

sudo rsync -av /var/lib/mysql /new_dir

然后我编辑了以下datadir/etc/mysql/my.cnf

sudo vi /etc/mysql/my.cnf
-datadir     = /var/lib/mysql
+datadir     = /new_dir/mysql

然后我编辑/etc/apparmor.d/usr.sbin.mysqld

sudo vi /etc/apparmor.d/usr.sbin.mysqld
-  /var/lib/mysql/ r,
-  /var/lib/mysql/** rwk,
+  /new_dir/mysql/ r,
+  /new_dir/mysql/** rwk,

然后我重新启动了mysql

答案3

意识到。

如果您有 InnoDB 表,则必须复制ibdata*ib_logfile*文件,否则您将无法使用这些表。您将获得:

‘表‘databaseName.tableName’不存在’

错误。

运行此复制命令来复制ibdata*ib_logfile*文件。

sudo cp -p /var/lib/mysql/ib* /array2/mysql/

答案4

我刚刚尝试了另一种方法,有些人可能会觉得有用:

复制并保留权限:

rsync -avzh /var/lib/mysql /path/to/new/place

备份(以防出现问题):

mv /var/lib/mysql /var/lib/_mysql

在旧目录的位置创建一个新的空目录:

mkdir /var/lib/mysql

将新位置绑定到旧位置:

mount -B /path/to/new/place /var/lib/mysql

希望这对某些人有帮助,因为符号链接对我来说不起作用,这是最简单的方法

相关内容