升级原因
超过产品生命周期,官方不在提供支持,但产品还在不段的迭代开发中
新版本有打的性能提升。 (5.6 = 3 * 5.5 / 5.7 = 2 * 5.6 / 5.8 更多功能 = 5.7 )
新版本的新功能毕竟吸引人,利于开发产品实现
操作系统升级,对某些版本不支持
MySQL提供的升级方式
In-place升级(mysql_upgrade)
使用于不夸大版本的升级,适合小版本间升级。 5.5 -> 5.6 / 5.6 -> 5.7
操作系统也需要一致
逻辑导出导入升级 (mysqldump, mydumper)
跨大版本的升级 5.5 -> 5.7
操作系统变更
字符集转换
In-place 升级(先从库,再主库)
1. cd /usr/local/
2. 关闭原来的版本
3. 冷copy datadir [占用时间比较多]
4. unlink mysql
5. ln -s /opt/mysql/mysql-new-verison /usr/local/mysql
6. /usr/local/mysql/bin/mysqld --defaults-file=/path/my_new.cnf --skip-network --skip-grant-tables &
7. /usr/local/mysql/bin/mysql_upgrade -S /tmp/mysql.socket [这个过程时间也比较多,需要analyze table]
8. /usr/local/mysql/bin/mysqld --defaults-file=/path/my.cnf &
统计信息不准:
show processlist; 可能出现大量 state: static....
use xxx; show tables status; 收集统计信息,可能会有效果。
如果还是不行,那就重启数据库。
mysql 表的统计信息自动收集:
1.MySQL启动
2.select * from information_schema.tables;
3. show table status;
4. 表修改超过 10%
逻辑导出导入升级
1.利用mysqldump ,mydumper 导出
2.mysqldump --master-data=2 --single-transaction=1 DbName > DbName_`date+%Y%m%d`.sql
3.利用新版本初始化环境
4.把备份SQL导入新库( mysql DbName < DbName_`date+%Y%m%d`.sql
5.利用逻辑升级 > 用户迁移(pt-show-grants)
*************************************************
阅读一下新版本的 what's new change log
禁忌对生产中的主库直接做升级
升级优先从库升级
升级之前做基准测试
sysbench / pt-summary / zabbix
sysbench 基准测试脚本
1. bulk_insert.lua 批量写入操作
2. oltp_delete.lua 写入和删除并行操作
3. oltp_insert.lua 纯写入操作
4. oltp_point_select.lua 只读操作,条件为唯一索引列
5. oltp_read_only.lua 只读操作,包含聚合,去重等操作
6. oltp_read_write.lua 读写混合操作,最常用的脚本
7. oltp_update_index.lua 更新操作,通过主键进行更新
8. oltp_update_non_index.lua 更新操作,不通过索引列
9. oltp_write_only.lua 纯写操作,常用脚本,包括insert update, delete
10. select_random_points.lua 随机集合只读操作,常用脚本,聚集索引列的selete in 操作
11. select_random_ranges.lua 随机范围只读操作,常用脚本,聚集索引列的select between操作
生产中推荐方法
上生产前需要有两个报告 (老版本 vs 新版本 )
基准测试报告 (sysbench)
功能环境测试报告 (set global long_query_time = 0; 收集生产的sql,放到新版本跑一下,看看是否报错 )
升级顺序
先升级一个从库
给一个从库接入生产只读
对比新版本和老版本性能
从库全部升级到新版本
主库下线切换
新版本数据库添加参数,防止不兼容 : binlog_checksum=none; log_bin_user_v1_row_events=on/升级完off;
其他注意事项
大版本升级
只建议通过逻 辑升级
Innodb大版本
innodb_file_format: 5.7 Antepope / 8.0 Barracuda
create table tb1(xx) row_format = dynamic;
compact & redundant 特点: varchar, varbinary, blob, text 存储 768 bytes 在当前Page,其他存储在 overflow page
dynamic & compressed 对于 varchar, varbinary, blob, text 在当前Page只存储20 bytes 的之阵位,只想overflow page
字符集转换,gbk 转换成 utf8
导出sql ; iconv -f gbk -t utf8; 导入