记录一次mysql的数据迁移问题
本来有两个方式
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上遇到的问题通过如上操作解决。
下一篇: 记一次前后端分离项目的部署过程