目录
一.准备
1.哈希值和备份数据脚本
注:用来测试数据库是否有问题,这里把每个库的每个表的元组的数值拷贝下来
~]# vim mysql.sh #!/bin/bash USER="root" # 输入用户 PORT=3306 # 端口 PASSWORD="mysql_P@s5" # 密码 HOST="172.17.0.142" # 数据库ip DB_md=`mysql -uroot -p"mysql_P@s5" --default-character-set=utf8mb4 -e "show databases"|grep -Ev "^(Database|mysql|performance_schema|information_schema|sys)$"|xargs` # 所有库名 DB="show databases" # 查看数据库名 TB="show tables" # 查看表名 mysql -u$USER -p$PASSWORD -e 'show processlist;' > list.txt # 最大连接数 mysql -V >> list.txt # 系统版本 back() { # 准备哈希值 if [ -e count_sum.txt ];then touch count_sum.txt else rm -rf count_sum.txt && touch count_sum.txt fi for i in `mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -e "$DB"` do for j in `mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "$TB" ` do su=`mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "select count(*) from $j"` echo -e ${i}:${j}:${su} >> count_sum.txt done echo -e "\n++++++++++++++++++++++++++++++++" >> count_sum.txt done # 备份数据库数据 /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8mb4 --single-transaction --master-data=2 --insert-ignore --force -q --databases ${DB_md} > bak.sql 2> /dev/null } back
2.停止主从
# 从数据库上执行 ~]# mysql -uroot -pmysql_P@s5 -e 'show slave status\G;' ##在从库停止主从连接 ~]# mysqladmin -usystem -pmysql_P@s5 shutdown ##关闭服务# 从数据库上执行 ~]# mysql -uroot -pmysql_P@s5 -e 'show slave status\G;' ##在从库停止主从连接~]# mysqladmin -usystem -pmysql_P@s5 shutdown ##关闭服务
二.升级从数据库
1.升级
# 下载软件 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz # 解压 ~]# gunzip mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz ~]# tar -xf mysql-5.7.39-linux-glibc2.12-x86_64.tar # 指定目录地址 ~]# cp -r mysql-5.7.39-linux-glibc2.12-x86_64 /usr/local/ # 备份原来的数据库 ~]# cp -r /usr/local/mysql /usr/local/mysql-5.7.34 # 把升级的数据库链接到原来的数据库 ~]# ln -s /usr/local/mysql-5.7.39-linux-glibc2.12-x86_64/ /usr/local/mysql # 需修改配置 ~]# vim /etc/my.cnf slow_query_log = 1 # 0.5需修改为1 myisam_repair_threads = 1 # 删除myisam_repair_threads = 1 ##启动服务 ~]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
2.测试
##检查更新表结构冲突 ~]# /usr/local/mysql/bin/mysql_upgrade -usystem -pxxxx-S /data/mysql/mysql.sock --skip-version-check ##查看数据库版本(查看数据库与之前的版本) ~]# /usr/local/mysql/bin/mysql -V ~]# mysql -uroot -pmysql_P@s5 -e 'select version();' ##sql查看数据库版本 ~]# cat list.txt ~]# mv count_sum.txt count_sum-src.txt # 把准备行数文件转移 # 把数据备份哪一行删除,然后执行 ~]# bash mysql.sh ~]# sha512sum count_sum.txt && sha512sum count_sum-src.txt # 对比 ## 登录从库后 ## ~]# mysql -uroot -pmysql_P@s5 ## 创建测试数据库 > CREATE DATABASE IF NOT EXISTS ceshi DEFAULT CHARSET utf8 COLLATE utf8_general_ci; > use ceshi; ##创建测试表 > create table test(id int(10) primary key auto_increment, name varchar(100) not null, age int(4))ENGINE=InnoDB DEFAULT CHARSET=utf8; # 查询 > desc test; ##删除测试数据库## > DROP DATABASE ceshi;
3.启动主从
~]# mysql -uroot -pmysql_P@s5 > start slave; ##启动主从 > show slave status\G; ##查看主从状态
三.升级主数据库
1.第一步备份
~]# bash mysql.sh ~]# mysqladmin -usystem -pmysql_P@s5 shutdown ##关闭服务
2.第二步升级
# 下载软件 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz # 解压 ~]# gunzip mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz ~]# tar -xf mysql-5.7.39-linux-glibc2.12-x86_64.tar # 指定目录地址 ~]# cp -r mysql-5.7.39-linux-glibc2.12-x86_64 /usr/local/ # 备份原来的数据库 ~]# cp -r /usr/local/mysql /usr/local/mysql-5.7.34 # 把升级的数据库链接到原来的数据库 ~]# ln -s /usr/local/mysql-5.7.39-linux-glibc2.12-x86_64/ /usr/local/mysql # 需修改配置 ~]# vim /etc/my.cnf slow_query_log = 1 # 0.5需修改为1 myisam_repair_threads = 1 # 删除myisam_repair_threads = 1 ##启动服务 ~]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
3.第三步测试
##检查更新表结构冲突 ~]# /usr/local/mysql/bin/mysql_upgrade -usystem -pxxxx -S /data/mysql/mysql.sock --skip-version-check ##查看数据库版本(查看数据库与之前的版本) ~]# /usr/local/mysql/bin/mysql -V ~]# mysql -uroot -pmysql_P@s5 -e 'select version();' ##sql查看数据库版本 ~]# cat list.txt ~]# mv count_sum.txt count_sum-src.txt # 把准备行数文件转移 # 把数据备份哪一行删除,然后执行 ~]# bash mysql.sh ~]# sha512sum count_sum.txt && sha512 count_sum-src.txt # 对比 ## 登录从库后 ## ~]# mysql -uroot -pmysql_P@s5 ## 创建测试数据库 > CREATE DATABASE IF NOT EXISTS ceshi DEFAULT CHARSET utf8 COLLATE utf8_general_ci; > use ceshi; ##创建测试表 > create table test(id int(10) primary key auto_increment, name varchar(100) not null, age int(4))ENGINE=InnoDB DEFAULT CHARSET=utf8; # 查询 > desc test; ##删除测试数据库## > DROP DATABASE ceshi;
四.回滚方案
1.先回退数据库
##关闭服务 ~]# mysqladmin -usystem -pmysql_P@s5 shutdown # 备份升级的数据库 ~]# cp -r /usr/local/mysql /usr/local/mysql-5.7.39-linux-glibc2.12-x86_64.tar # 恢复之前升级备份的数据库 ~]# cp -r /usr/local/mysql-5.7.34 /usr/local/mysql ##启动服务 ~]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
2.重新启动数据库,导入原先备份数据。
# 登录数据库并导入数据 ~]# mysql -uroot -pmysql_P@s5 > source /data/mysql.back/bak.sql