【DBA手记】-MySQL小版本升级文档-从5.7.30升级到5.7.42
- 本文档先在测试环境下验证,后在准生产环境也作了验证.为了更安全,建议先用mydumper或mysqldump或xtraback等常用备份工具做好备份工作.
- 备注:本文是整理的之前一个笔记
- author: superSong
Email: dba.supersong@163.com
背景及环境
- 因扫描出mysql有安全漏洞,解决方案那就为升级mysql版本呗 高版本修复了该漏洞
- 本环境的mysql的安装程序即二进制文件(包) 和 数据目录 都在 /data/mysql这个目录中,版本升级时,直接备份这个mysql目录即可.
- 准备好新的mysql二进制安装包并上传到服务器任意路径下,如/root/soft/mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
- 逻辑思想是只需要把原来的mysql5.7.30的二进制安装程序替换为新的应用程序即可,其它是不用变动的.
- 要找出原来的二进制应用程序的位置,这里是在/data/mysql目录里除了里面data外的其它程序都是应用程序.
- 说明:(一般情况下,mysql应用程序是放在/usr/local/下,数据目录放在/data/mysql/data/下,两者是分开的.本案例中的mysql应用程序和数据目录都放在了一起都在/data/mysql下)
备份
1. 关停mysql
这里要注意要使用 慢速关闭mysql,这样InnoDB在关闭之前执行完整的清除和更改缓冲区合并
登录到mysql中 执行
mysql> SET GLOBAL innodb_fast_shutdown=0;
mysql> shutdown;
2. 备份原来的mysql目录,里面[包含了应用程序和数据]
[root@node1 data]# mv /data/mysql /data/mysql_bak20231123
部署
1. 创建新的mysql目录 并授权
[root@node1 data]# mkdir /data/mysql
[root@node1 data]# chown -R mysql.mysql /data/mysql
[root@node1 data]# ll /data
总用量 0
drwxr-xr-x 3 mysql mysql 18 11月 23 14:17 mysql
drwxr-xr-x 12 mysql mysql 190 11月 22 15:30 mysql_bak20231123
drwxr-xr-x 2 mysql mysql 22 11月 21 15:49 slowlog
2.把原来备份好的数据目录复制拷贝过来,放到新建的mysql目录下
[root@node1 data]#cp -ar /data/mysql_bak20231123/data /data/mysql/
3. 解压新的mysql二进制包
[root@node1 ~]# cd /root/soft/
[root@node1 soft]# tar -zxf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
[root@node1 soft]# ll -h
drwxr-xr-x 9 root root 129 11月 23 14:20 mysql-5.7.42-linux-glibc2.12-x86_64
-rw-r--r-- 1 root root 647M 11月 23 14:18 mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
4. 将解压后的mysql-5.7.42-linux-glibc2.12-x86_64里面的所有文件移到 /data/mysql 目录下
[root@node1 soft]# ll /data/mysql
总用量 4
drwxr-x--- 12 mysql mysql 4096 11月 23 12:03 data
[root@node1 soft]# mv /root/soft/mysql-5.7.42-linux-glibc2.12-x86_64/* /data/mysql/
[root@node1 soft]# chown -R mysql.mysql /data/mysql/ # 并修改属组为mysql
[root@node1 soft]#
[root@node1 soft]# ll /data/mysql
总用量 272
drwxr-xr-x 2 mysql mysql 4096 11月 23 16:18 bin
drwxr-x--- 6 mysql mysql 4096 11月 23 16:16 data # 这里是复制过来的原来的数据目录
drwxr-xr-x 2 mysql mysql 73 11月 23 16:18 docs
drwxr-xr-x 3 mysql mysql 4096 11月 23 16:18 include
drwxr-xr-x 5 mysql mysql 230 11月 23 16:18 lib
-rw-r--r-- 1 mysql mysql 255738 3月 16 2023 LICENSE
drwxr-xr-x 4 mysql mysql 30 11月 23 16:18 man
-rw-r--r-- 1 mysql mysql 566 3月 16 2023 README
drwxr-xr-x 28 mysql mysql 4096 11月 23 16:18 share
drwxr-xr-x 2 mysql mysql 90 11月 23 16:18 support-files
5. 启动mysql
[root@node1 ~]# mysqld_safe --user=mysql --datadir=/data/mysql/data &
6.运行mysql_upgrade
[root@node1 ~]# mysql_upgrade -uroot -p123456 --socket=/data/mysql/data/mysql.sock
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
...
...
mysql.time_zone_transition_type OK
mysql.user OK
The sys schema is already up to date (version 1.5.2).
Checking databases.
sys.sys_config OK
test.t1 OK
test.t5 OK
Upgrade process completed successfully.
Checking if update is needed.
重启mysql
[root@node1 soft]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
[root@node1 soft]#
[root@node1 soft]# ps aux |grep mysql
root 76047 1.6 0.0 113312 1664 pts/2 S 17:02 0:00 /bin/sh /data/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/data/db.pid
mysql 77371 11.7 9.0 2270128 262528 pts/2 Sl 17:02 0:00 /data/mysql/bin/mysqld --basedir=/data/mysql --datadir=/data/mysql/data --plugin-dir=/data/mysql/lib/plugin --user=mysql --log-error=/datamysql/data/error.log --open-files-limit=65535 --pid-file=/data/mysql/data/db.pid --socket=/data/mysql/data/mysql.sock --port=3306
验证
[root@node1 mysql]# mysql -uroot -p123456 --socket=/data/mysql/data/mysql.sock
root@db 16:24: [(none)]> select @@version;
+------------+
| @@version |
+------------+
| 5.7.42-log |
+------------+
1 row in set (0.00 sec)