欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一次mysql的数据迁移问题

程序员文章站 2022-07-13 08:54:59
...

本来有两个方式

1.mysqldump

2.select * from table_1 into outfile

结果好奇心驱使想尝试直接复制data目录

源:centos,mysql 5.6

目标:ubuntu,mysql 5.7

操作

centos:

rsync -av /var/lib/mysql [email protected]:/data/

/data目录下会多一个mysql目录

 

ubuntu:

修改basedir

vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改
#basedir   /var/lib/mysql
basedir /data/mysql

修改basedir权限

chown -R mysql:mysql /data/mysql

chmod -R 777 /data/mysql  (此操作可以换权限,此处安全性不重要)

不修改的话,可能会报错Error 13

 

修改AppArmor

其实Ubuntu下默认安装了并存在一个AppArmor的服务,这个服务是用于访问控制的。在以apt-get安装mysql时,在AppArmor的配置中也写入了针对mysql的权限控制的配置,导致mysqld_safe与mysqld进程无法读写新移植的datadir目录中的文件,也同样导致了mysql_install_db无法在对应的mysql schema下创建文件。

所以相应的, 我们只需要修改对应的配置文件,然后重新写加载AppArmor就可以了。我们通过

vi /etc/apparmor.d/usr.sbin.mysqld

然后修改mysql部分中,将原来的数据目录替换成迁移后的新目录

#/var/lib/mysql/ r,
#/var/lib/mysql/** rwk,
/data/mysql_data/ r,
/data/mysql_data/** rwk,

然后重新加载AppArmor

/etc/init.d/apparmor reload

之后再重新启动mysql服务就可以了。

参考自
https://blog.csdn.net/harleylau/article/details/81222949

ubuntu上不修改的话,可能会启动失败

 

mysql -uroot -p

mysql>show variables like '%dir%';

报错
Table 'performance_schema.session_variables' doesn't exist
终端命令行输入
mysql_upgrade -u root -p --force
输入密码

mysql>show variables like '%dir%';

报错
Native table 'performance_schema'.'session_variables' has the wrong structure
mysql命令行输入
mysql>set @@global.show_compatibility_56=ON;

 

目前在ubuntu上遇到的问题通过如上操作解决。