MySQL 5.7迁移到另一台MySQL 8,然后使用mysqldump导入导出功能来实现升级。
我们除了直接升级外,还可以新建实例并将数据导入到新实例里。由于应用、模式、配置兼容性,可能需要一一排错。
下载地址是通过官网找的8.4然后推理得到8.0的地址。
wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
yum localinstall mysql80-community-release-el8-1.noarch.rpm
不知为了,gpgcheck检查不通过,估计可能和系统本身自带mysql-server有关。我们当然可以使用自带的,然后通过versionlock的形式锁定特定版本。自带的版本不完整,这里使用MySQL社区源。
同理,安装特定版本需要将部分组件都写上,不然他直接安装最新版。
yum install mysql-community-server-8.0.34-1.el8 mysql-community-client-8.0.34-1.el8 mysql-community-client-plugins-8.0.34-1.el8 mysql-community-libs-8.0.34-1.el8
安装完后禁用源:
# 查询源列表
dnf repolist all
# 禁用源
dnf config-manager --disable mysql80-community
dnf config-manager --disable mysql-tools-community
dnf config-manager --disable mysql-connectors-community
如果数据文件夹另外放置到数据盘请根据5.7版本操作。
在获得临时密码后,我们通常修改密码,但是MySQL 8默认密码规则其实很复杂的,且你不能在修改密码前就修改密码规则。 故而:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'N[IA&@v!g}X^[]Yv[E9gcCXtO';
然后新增用户及权限
CREATE USER 'dbuser1'@'%' IDENTIFIED BY 'dFKhugE3pjnoRDsR';
GRANT ALL PRIVILEGES ON *.* TO 'dbuser1'@'%' WITH GRANT OPTION;
一般的,我们不会允许用户拥有和root同等权限,且我们会新建角色(role),然后分配角色到用户会更符合规范。
我们通过MySQLDump 官方文档 mysqldump –databases db1 db2… > dump.sql或者mysqldump –all-databases来备份。
mysqldump --all-databases
# 远程访问
mysqldump -h 192.168.1.2 -u root -p password --databases db1 > db1.sql
然后通过mysql < dump.sql 导入
mysql -uroot -pdFKhugE3pjnoRDsR < dump_all.sql
# 不使用特殊符号方便直接输入密码导入,但是风险是该密码明文历史可见。
mysql -h 192.168.1.2 -uroot -pdFKhugE3pjnoRDsR < dump_all.sql
如果需要不直接输入密码则需要进入mysql后
source dump_all.sql
导入可能遇到ERROR 1118 (42000): Row size too large (> 8126)错误,直接禁用Strict Mode等导入完成后再启用即可。
SET GLOBAL innodb_strict_mode=OFF;
SET GLOBAL innodb_strict_mode=ON;