1.项目背景
公司原有的架构:一个展示型的网站,lnmp,MySQL5.1.77版本(MYISAM),50M数据量
1)经常出现小问题
1.表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时进行。
2.不支持故障自动恢复(CSR):当断电时有可能会出现数据损坏或丢失的问题
2)提出问题解决方案
1.提建议将现有的MYISAM引擎替换为Innodb,将版本替换为5.6.46
1)如果使用MYISAM会产生”小问题”,性能安全不能得到保证,使用innodb可以解决这个问题。
2)5.1.77版本对于innodb引擎支持不够完善,5.6.42版本对innodb支持非常完善了。
2.实施过程和注意要素
1) 针对要迁移升级的数据库进行迁移
3.采用逻辑升级方式
1) 逻辑方式升级其实就是通过逻辑备份工具(例如mysqldump工具)将数据库、表、
其他相关对象及数据逻辑备份成SQL脚本,再将其还原至MySQL5.6.42的实例中。
2.逻辑升级过程
# 准备一台新机器
1.先删除所有数据库 初始化数据库跟新数据没区别
[root@db03 /service/mysql/data]# rm -fr ./*
[root@db03 /service/mysql/data]# ll
total 0
2.生成
[root@db03 /service/mysql/scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data
# 旧数据库进行数据备份
[root@db02 ~]# mysqldump -B world > /tmp/full.sql
[root@db02 ~]# ll /tmp/full.sql -h
-rw-r--r-- 1 root root 239K Oct 29 15:49 /tmp/full.sql
# 更改存储引擎
[root@db02 /tmp]# sed -i 's#ENGINE=MyISAM#ENGINE=InnoDB#gi' /tmp/full.sql
# 推送备份数据库到新机器上
[root@db02 /tmp]# scp full.sql 172.16.1.53:/tmp/
root@172.16.1.53's password: 1
full.sql 100% 238KB 10.7MB/s 00:00'
# 新机器导入旧数据库数据
[root@db03 /service/mysql]# mysql < /tmp/full.sql
# 查看新数据库的存储引擎
mysql> select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB |
+--------------------------+
1 row in set (0.00 sec)
# 将业务切换到新数据库
1.通知开发更改下数据库的IP地址
3.升级小总结
MySQL的逻辑升级要注意以下几点:
a) 在生产环境上进行升级操作之前一定需要先在测试环境中多次进行相同版本的升级测试工作;
b) 实际工作中,测试环境升级成功后需要经过相关业务的回归测试,
确保相关功能升级后能正常使用后再在生产环境进行升级,建议测试环境进行1个月以上的测试
c) 生产环境升级前一定要进行备份
d) 生产环境的升级顺序建议是先升级从节点,再升级主节点或进行主从切换