mysql移动数据目录_如何移动MySQL数据目录?

本文详细记录了在Linux环境中将MySQL数据库的数据目录迁移到新位置的五个步骤,包括停止服务、创建新目录、复制文件、修改配置文件、更新权限、处理AppArmor以及处理InnoDB表。在迁移过程中遇到了AppArmor的限制,最终通过调整AppArmor配置解决了问题。此外,还提供了其他几种替代方法,如使用rsync和改变目录权限等。
摘要由CSDN通过智能技术生成

问题描述

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

我遇到的问题是我已经尝试了一切,在我修改my.cnf中的datadir位置后,mysql将无法重新启动。

我得到的只是:

start: Job failed to start

最佳解决办法

忘了app盔甲。

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

停止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和套接字的所有提及更改为新位置

我成了:

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了解新的datadir:

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

重新加载apparmor配置文件

sudo /etc/init.d/apparmor reload

然后启动mysql:

start mysql

次佳解决办法

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

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

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

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

然后我在/etc/mysql/my.cnf中编辑了datadir系列:

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。

第三种解决办法

意识到。

如果您有InnoDB表,则必须通过ibdata*和ib_logfile*文件进行复制,否则您将无法使用这些表。你会得到:

‘Table ‘databaseName.tableName’ doesn’t exist’

错误。

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

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

第四种办法

我只是尝试了另一种方式,有些人可能觉得有用:

复制权限完整:

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

备份(如果出现问题):

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

创建一个新的空目录来代替旧目录:

mkdir /var/lib/mysql

bind将新位置挂载到旧位置:

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

希望能帮到某人,因为符号化对我来说不起作用,这是最简单的方法

第五种办法

如果移动datadir,则不仅需要赋予新的datadir权限,还需要确保所有父目录都具有权限。

我将我的datadir移动到硬盘驱动器上,安装在Ubuntu中:

/media/*user*/Data/

我的datadir是数据库。

我必须为每个媒体,用户和数据目录设置771的权限:

sudo chmod 771 *DIR*

如果这不起作用,另一种让mysql工作的方法是将/etc/mysql/my.cnf中的用户更改为root;虽然毫无疑问从安全角度来看这样做有些问题。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值