跳转至

MySQL 升级

虽然我非常反对手动编译或使用 generic 二进制文件安装 Linux 软件包,但我们公司的运维组似乎十分热衷于此,好巧不巧我在运维组工作过几天,接手了升级 MySQL 的活,于是记录一下使用二进制包升级 MySQL 的操作。

1. MySQL 安装包准备

软件压缩包名:

mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

从 FTP 服务器下载(或随便其他方式拿到二进制包):

wget -P /mysql/ http://ip:port/path/to/ftp_dir/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

2. 数据库服务器确认

  1. 测试环境服务器:见 Excel 表格
  2. 生产环境服务器:见 Excel 表格

3. 数据备份

创建备份文件夹:

mkdir /mysql/dbbackup

备份 MySQL 库:

mysqldump -uroot -p'mysql_password' --master-data=2 -c db_name > /mysql/dbbackup/db_name_20200909.sql

4. 升级前准备

先升级从,再升级主。

4.1 关闭 keepalived

service keepalived stop

4.2 关闭 MySQL

su - //切换到超级用户
service mysql stop

4.3 备份 binlog

mkdir /mysql/log_20200909_bak && cp -pr /mysql/log/* /mysql/log_20200908_bak

5. 正式升级

  1. 解压、修改目录名、赋权:
tar -xvf /mysql/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /mysql/service/ && mv /mysql/service/mysql-5.7.31-linux-glibc2.12-x86_64/ /mysql/service/mysql-5.7.31/ && chown -R mysql.mysql /mysql/service/mysql-5.7.31
  1. 删除压缩文件
rm /mysql/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

6. 修改 my.cnf 配置文件

  1. 备份旧的配置文件、修改新的配置:
cp /etc/my.cnf /etc/my_5.7.28.cnf && vi /etc/my.cnf

修改以下行:

basedir=/mysql/service/mysql-5.7.31
  1. 执行 MySQL 的启动:
/mysql/service/mysql-5.7.31/bin/mysqld --defaults-file=/etc/my.cnf &

检查是否启动:

ps -ef | grep mysqld | grep -v grep

7. 运行 mysql_upgrade 升级数据字典

  1. 关闭 MySQL:
/mysql/service/mysql-5.7.31/bin/mysql -uroot -p'mysql_password' --execute="SET GLOBAL innodb_fast_shutdown=0" && /mysql/service/mysql-5.7.31/bin/mysqladmin -uroot -p'mysql_password' shutdown
  1. 启动新版 MySQL:

    /mysql/service/mysql-5.7.31//bin/mysqld --defaults-file=/etc/my.cnf &
    

  2. 检查兼容性:

/mysql/service/mysql-5.7.31/bin/mysql_upgrade -uroot -p'mysql_password'
  1. 检查无误后停止 MySQL:
/mysql/service/mysql-5.7.31/bin/mysqladmin -uroot -p'mysql_password' shutdown

8. 修改启动脚本重启 MySQL

  1. 备份原启动脚本、复制新启动脚本:
mv /etc/init.d/mysql /etc/init.d/mysql_20200908 && cp /mysql/service/mysql-5.7.31/support-files/mysql.server /etc/init.d/mysql
  1. 修改启动脚本:
vi /etc/init.d/mysql
# 修改内容:
basedir=/mysql/service/mysql-5.7.31/
datadir=/mysql/data/
  1. 添加开机启动、启动 MySQL:
chkconfig --add mysql && chkconfig mysql on && service mysql restart

9. 设置环境变量

  1. 编辑:
vi /etc/profile

修改 PATH

/mysql/service/mysql-5.7.31/bin:$PATH
  1. 刷新环境变量
source /etc/profile

10. 验证升级

mysql -V

11. 恢复 keepalived

su - //切换到超级用户
service keepalived restart

12. 主从连接检查

  1. 检查 MySQL 主从状态:
show slave status\G;
  1. 检查 keepalived 状态:
cat /app/log/keepalived/status