MySQL 的在线升级方案

一、MySQL的在线升级方案研究(5.6-5.7)
配置:CentOS下MySQL(5.6)——MySQL(5.7)
升级之前呢,先查看相关官方文档有哪些注意事项:
·仅在一般可用性(GA)版本之间支持升级。

·支持从 MySQL 5.6 升级到 5.7.

·在升级到下一个version之前,建议升级到最新版本。例如,在升级到 MySQL 5.7 之前升级到最新的 MySQL 5.6 版本。

·不支持跳过版本的升级。例如,不支持直接从 MySQL 5.5 升级到 5.7.
·支持在发行版系列中进行升级。例如,从MySQL5.7升级。x到5.7.支持y。还支持跳过发行版。例如,从 MySQL 5.7 升级。 x到 5.7. 支持z。

1.使用现有的MySQL安装中的数据目录进行升级(In-Place升级):
*停止旧的(MySQL 5.6)服务器

*通过将旧二进制文件替换为新二进制文件来升级 MySQL 二进制文件

*正常启动 MySQL 5.7 服务器(无特殊选项)

*Run mysql_upgrade升级系统表

*重启 MySQL 5.7 服务器

2.通过重新加载从现有MySQL安装生成的转储文件进行升级(数据的导入导出,逻辑升级)
*从以前的 MySQL 安装中导出现有数据:

mysqldump -u root -p
--add-drop-table --routines --events
--all-databases --force > data-for-upgrade.sql

*关闭旧的 MySQL 服务器:

mysqladmin -u root -p shutdown

*安装 MySQL 5.7
*初始化一个新的数据目录:

mysqld --initialize --datadir=/path/to/5.7-datadir

  


*使用新数据目录启动 MySQL 5.7 服务器:

--mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &

  


*登录MySQL重置密码:

shell> mysql -u root -p
Enter password: **** <- enter temporary root password

mysql> ALTER USER USER( ) IDENTIFIED BY 'password';

  


*将先前创建的转储文件加载到新的 MySQL 服务器中
*Run mysql_upgrade然后重新启动MySQL确保所做的更改已经全部生效

3.使用 MySQL Yum Repository 升级 MySQL

4.使用 Directly-Downloaded RPM 软件包升级 MySQL

5.利用主从架构进行数据库不停机的在线升级
切主从需要考虑几点:
1、主库、从库硬件配置是否差异过大
2、项目内的数据库url是否需要修改
3、是否需要花钱再买一台机子做从库

数据库升级测试:
要求:
1、数据库停机时间最短
2、数据库数据最快还原
3、不用改项目中url配置

配置:CentOS下MySQL(5.6-47)

单机版本升级:
停库 ——> 备份 ——> 安装 ——> 拉起 ——> 更新

查看当前MySQL版本:

[root@MySQL ~]# mysql -p123456 -e "\s" |grep 'Server version' |awk '{print $3}'
Warning: Using a password on the command line interface can be insecure.
5.6.47
停库:[root@MySQL ~]#service mysqld stop
备份:cp -r /data/mysql /data/mysql_bak
升级新版本:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
启动:[root@MySQL local]# unlink mysql
[root@MySQL local]# ln -s mysql-5.7.23-el7-x86_64/ mysql
[root@MySQL local]# /etc/init.d/mysql.server start
Starting MySQL.. SUCCESS!
更新:[root@MySQL local]# mysql_upgrade -s
The --upgrade-system-tables option was used, databases won't be touched.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading the sys schema.
Upgrade process completed successfully.
Checking if update is needed.
[root@MySQL ~]#service mysqld restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS! 
重启MySQL以确保对系统表所做的任何更改都生效:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
查看新版本:[root@MySQL ~]# mysql -p123456 -e "\s" |grep 'Server version' |awk '{print $3}'
Warning: Using a password on the command line interface can be insecure.
5.7.23	

  


场景:
xtrabackup 备份mysql5.6
停机,数据库升级到5.7
使用备份文件还原到5.7
把binlog 末尾位置作为起点,导入原mysql5.6的sql

将MySQL5.6.47-MySQL5.7.15 测试过程记录如下:
step1:必须备份数据库(Xtrabackup)

[root@localhost local]# innobackupex --defaults-file=/usr/my.cnf --user=root --password=123456 --socket=/var/lib/mysql/mysql.sock /mysqlbk

  


备份完成后输出:200401 10:01:50 completed OK!

step2:关闭MySQL数据库:

mysql> set global innodb_fast_shutdown=0 

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.47 |
+-----------+
1 row in set (0.05 sec)


[root@localhost local]# /etc/init.d/mysql stop
Shutting down MySQL.... SUCCESS!

  

step3:卸载MySQL5.6的base目录,然后建立新版本的目录链接,修改权限

[root@localhost lib]# ln -sv /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64 /var/lib/mysql
‘/var/lib/mysql’ -> ‘/usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64’
[root@localhost lib]# chown -R mysql:mysql /var/lib/mysql
[root@localhost lib]# chown -R mysql:mysql /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64
[root@localhost lib]# cp /usr/local/mysql57/mysql-5.7.15-linux-glibc2.5-x86_64/support-files/mysql.server /etc/init.d/mysql
cp: overwrite ‘/etc/init.d/mysql’? y

  


step4:替换my.cnf并恢复数据

[root@localhost local]# innobackupex --defautls-file=/mysqlbk/my.cnf --apply-log --redo-only /mysqlbk/2020-04-01_10-01-48/
200401 10:29:11 innobackupex: Starting the apply-log operation
恢复返回结果;200401 10:29:12 completed OK!

  


step5:启动数据库

[root@localhost lib]# /etc/init.d/mysql start
Starting MySQL.... SUCCESS!	

  


//这一步出现了一个错误,数据库起不来
主要表现为这几个错误:
MySQL启动时找不到sock文件,find全局也没有,于是想利用初始化重新启动
利用MySQL5.6初始化命令提示:

[root@localhost bin]# ./mysql_install_db --defaults-file=/usr/my.cnf --datadir=/usr/local/mysql/data
2020-04-01 13:47:35 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2020-04-01 13:47:39 [ERROR] The bootstrap log isn‘t emport
2020-04-01 13:47:39 [ERROR] 2020-04-01T05:47:35.777961Z 0 [Warning] --bootstrap is deprecated. Please consider using --initialize instead

  


该命令已经废弃了,建议使用 --initialize 选项
中间因为操作命令有误,出现了这个错误

2020-04-01 11:19:33 3687 [Note] Plugin ’FEDERATED‘ is disabled.
mysqld: Table 'mysql.plugin' doesn‘t exist
2020-04-01 11:19:33 3687 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.

  


最终参考资料:

./mysqld --initialize --user=root --datadir=/usr/local/mysql/data/ --innodb_data_file_path=ibdata1:1G:autoextend

  


成功启动MySQL 并登录

step6:执行mysql_upgrade脚本升级

[root@localhost bin]# mysql_upgrade -uroot -p123456

  



升级后发现在Linux界面 mysql --version 显示:

[root@localhost mysql]# mysql --version
mysql Ver 14.14 Distrib 5.6.47, for Linux (x86_64) using EditLine wrapper

  


而在MySQL运行:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.15 |
+-----------+
1 row in set (0.00 sec)

  

后来确定原因是Linux层面的环境变量问题 配置到$PATH 后:

[root@localhost mysql]# mysql --version
mysql Ver 14.14 Distrib 5.7.15, for linux-glibc2.5 (x86_64) using EditLine wrapper

  

 

 
posted @ 2020-04-03 15:34  ToMrYuTao  阅读(2377)  评论(0编辑  收藏  举报