mysql 升级和降级 5.7.20-5.7.22

619人阅读 2016-11-25 16:26:48

1 官方推荐的两种升级方式:

in-place upgrade

logical upgrade

2 升级之前:

备份所有数据库,包括系统库mysql

[root@Darren1 ~]# mysqldump -uroot -p147258 -A -B  -F --master-data=2 --events --single-transaction>/tmp/mysqlall.bak

下载5.7.16二进制包,上传解压到/opt/mysql/目录下

3升级演示:5.7.20升级到5.7.22

方法一: in-place upgrade:

设置数据库关闭方式为slow方式,缓存中的数据在关闭之前全部落地:

[root@mysqldb 3306]# mysql -uroot -p"root" -e 'set global innodb_fast_shutdown=0;' -S /mysql/data/3306/mysql.sock

停止数据库服务:

[root@mysqldb 3306]# mysqladmin -uroot -p"root" shutdown -S /mysql/data/3306/mysql.sock

把之前5.7.20的软链接/usr/local/mysql删除,重新建立5.7.22软链接:

[root@mysqldb app]# rm -rf mysql

[root@mysqldb app]# ln -s mysql-5.7.22-linux-glibc2.12-x86_64 mysql

启动数据库服务:

[root@mysqldb 3306]# ./mysql.start

检查所有库中所有表的兼容性:

[root@mysqldb 3306]# mysql_upgrade -uroot -p"root" -S /mysql/data/3306/mysql.sock

检查结束后会在datadir目录下生成mysql_upgrade_info文件,记录了数据库版本。

停止数据库服务:

[root@mysqldb data]# mysqladmin -uroot -p"root" -S /mysql/data/3306/mysql.sock shutdown

启动数据库服务:

把启动5.7.16的启动脚本mysql.server复制到/etc/init.d/下,替代旧的mysqld.

[root@mysqldb 3306]# cp /mysql/app/mysql/support-files/mysql.server /etc/init.d/mysql

方法二:logical-upgrade

把mysql所有库导出来:

[root@mysqldb~]# mysqldump -uroot -p --add-drop-table --routines --events --all-databases --force >/mysql/data-for-upgrade.sql

停数据库服务:

[root@mysqldb~]# mysqladmin -uroot -p shutdown

创建新的目录存放5.7.22:

[root@mysqldb ~]# mkdir -p /mysql/data/mysql/mysql3307/{data,logs,tmp}

[root@mysqldb data]# chown -R mysql:mysql /data/mysql/mysql3307

删除旧的软链接,重新创建软连接:

[root@mysqldb mysql app]# ln -s mysql-5.7.22-linux-glibc2.5-x86_64  mysql

复制新的配置文件,并修改端口号为3307:

[root@mysqldbmysql3307]# cp /etc/my.cnf /data/mysql/mysql3307/my3307.cnf

[root@mysqldb mysql3307]# sed -i 's#3306#3307#g' my3307.cnf

指定配置文件初始化:

[root@mysqldb bin]# ./mysqld --initialize --defaults-file=/data/mysql/mysql3307/my3307.cnf 

查看错误日志,找到密码:

[root@mysqldb bin]# cat /data/mysql/mysql3307/data/error.log |grep password

2016-11-24T14:35:59.219125Z 1 [Note] A temporary password is generated for root@localhost: kU+Ve&lo6a/j

指定3307配置文件,启动数据库服务:

[root@mysqldb bin]# ./mysqld_safe --defaults-file=/data/mysql/mysql3307/my3307.cnf &

指定sock文件登陆,输入前面查看的密码:

[root@mysqldb bin]# mysql -uroot -p -S /tmp/mysql3307.sock

Enter password:   

重新修改密码:

mysql>alter user user() identified by 'root';

导入之前备份数据:

[root@mysqldb bin]# mysql -uroot -p -S /tmp/mysql3307.sock --force </tmp/data-for-upgrade.sql   

检查兼容性:

[root@mysqldb bin]# mysql_upgrade -uroot -p -S /tmp/mysql3307.sock

关闭服务器:

[root@Darren1 bin]# mysqladmin -uroot -p shutdown -S /tmp/mysql3307.sock

用5.7.16二进制包重新建立3307实例,把旧的5.7.14版本的3306实例数据导出,然后导入3307实例中,测试3307实例确保没有问题,然后删除3306实例,把3307实例端口改为3306.

4 降级演示:5.7.22降级5.7.20

方法一:in-place downgrade

设置数据库关闭方式:

[root@mysqldb local]# mysql -uroot -p -e 'set global innodb_fast_shutdown=0;'       

停止数据库服务:

[root@Darren1 local]# mysqladmin -uroot -p shutdown

删除redolog文件:

[root@Darren1 data]# rm -rf /data/mysql/mysql3306/data/ib_logfile*

删除5.7.22软链接,并重新创建5.7.20软连接:

——————————————

[root@mysqldb app]# rm -f mysql

[root@mysqldb app]# ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql

启动数据库服务:

降级检查:

[root@mysqldb 3306]# mysql_upgrade -uroot -p"root" -S /mysql/data/3306/mysql.sock

停止数据库服务,重新启动数据库服务:

方法二:logical downgrade

备份降级前的所有库和表:

[root@mysqldb ~]# mysqldump -uroot -p --add-drop-table --routines --events --all-databases --force> /tmp/data-for-downgrade.sql

初始化:

[root@mysqldb bin]# ./mysql -uroot -p‘root’ -S /tmp/mysql3307.sock</tmp/data-for-downgrade.sql

[root@mysqldb bin]# ./mysql_upgrade -uroot -p147258 --skip-version-check -S /tmp/mysql3307.sock

以上步骤,部分省略,可参考5.7官方文档。

猜你喜欢

转载自blog.csdn.net/ichglauben/article/details/81185549