目录
一.准备
1.哈希值和备份数据脚本
2.停止主从
二.升级从数据库
1.升级
2.测试
3.启动主从
三.升级主数据库
1.第一步备份
2.第二步升级
3.第三步测试
四.回滚方案
1.先回退数据库
2.重新启动数据库,导入原先备份数据。
一.准备
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