MySQL企业案例
项目一(更新数据库)
项目背景:
公司原有的架构:一个展示型的网站,LAMT,MySQL5.1.77版本(MYISAM),50M数据量。
小问题不断:
1、表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时进行。
2、不支持故障自动恢复(CSR):当断电时有可能会出现数据损坏或丢失的问题。
如何解决:
1、提建议将现有的MYISAM引擎替换为Innodb,将版本替换为5.7.44
1)如果使用MYISAM会产生”小问题”,性能安全不能得到保证,使用innodb可以解决这个问题。
2)5.1.77版本对于innodb引擎支持不够完善,5.6.38版本对innodb支持非常完善了。
2、实施过程和注意要素
## 不停库的操作
# 1.准备一个新环境
# 2.二进制安装一个MySQL5.7.44
# 3.当前正在提供服务的生产库,进行一个全备(打点全备)
[root@db01 mysql]# mysqldump -uroot -p123 -A > /tmp/full.sql
# 4.将全备恢复到新环境
[root@db01 ~]# mysql -uroot -p123 < /tmp/full.sql
# 5.从新环境备份出程序库的所有表数据
[root@db01 ~]# mysqldump -uroot -p123 -B zls > /tmp/zls.sql
# 6.修改表的存储引擎
[root@db01 ~]# sed -i 's#ENGINE=MyISAM#ENGINE=InnoDB#g' /tmp/zls.sql
# 7.将修改后的程序库数据导入新环境
1)关闭binlog的记录
set sql_log_bin=0;
2)导入数据
source /tmp/zls.sql
3)开启binlog的记录
set sql_log_bin=1;
## 停库操作
# 1.先挂维护页
# 2.旧环境停止连接数据库的服务
systemctl stop tomcat
systemctl stop php-fpm
...
# 3.再停止旧环境数据库
systemctl stop mysqld
# 4.从binlog中截取增量数据
# 5.启动新环境数据库
# 6.恢复截取的增量数据到新环境
# 7.测试
# 8.应用割接(将代码原来连接数据库的信息改为新环境)
# 9.启动连接数据库的服务
# 10.取消维护页