MySQL 'In Place' 升级实践,从5.1到5.7
接上篇翻译的文章:使用'In place' 方法直接从5.0升级至5.7,在此记录我实践的过程。
1、环境准备
数据库A
版本:5.1
字符集:latin1
引擎:MyISAM
数据库量:约220G
表数据量:约600
服务器:centos6.5
2、升级过程
已经搭建好5.1版本数据的从库,等主从同步之后,开始升级从库
在第一次升级时遇到问题,执行mysql_upgrade显示表损坏。
我们在升级前,首先检查并修复表(MyISAM引擎)。
./bin/mysqlcheck -uroot -h-P -p -r -A
停主从,记录当前位置点
stop slave;show slave status;
记录下当前的位置点,并在配置文件中配置主从不随数据库启动
关闭5.1版本数据库
/etc/init.d/mysqld stop orcd /usr/local/mysql51./bin/mysqladmin -uroot --socket=/var/lib/mysql.sock -p'' shutdown
修改5.7版本配置文件(具体哪些参数发生了变化,请阅读文档,upgrading to 5.1, upgrading to 5.5, upgrading to 5.6 or upgrading to 5.7。
我注释掉了以下几项:
#innodb_data_file_path = ibdata1:1024M:autoextend#innodb_file_per_table = 1 #innodb_undo_directory = #innodb_undo_logs = 128 #innodb_undo_tablespaces = 3 #innodb_undo_log_truncate = 1#innodb_max_undo_log_size = 1G复制相关#gtid_mode = on#enforce_gtid_consistency = true#master_info_repository = TABLE#relay_log_info_repository = TABLE#slave_parallel_workers = 2<修改以适应5.1版本>binlog_checksum = NONEsql_mode ='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
配置文件修改完成后,进入5.7版本文件夹,开启数据库,注意使用--skip-grant-tables
cd /usr/local/mysql57./bin/mysqld_safe --defaults-file=../my.cnf --datadir=--basedir=. --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
NOTE:如果没有问题则启动完成,我遇到的问题是, mysqld_safe 需要在文件夹(/usr/local/mysql57 )内执行
运行mysql_upgrade
./bin/mysql_upgrade -uroot --socket=/var/lib/mysql.sock
简单说一下升级的过程,mysql_upgrade首先检查系统库并修复,检查并安装sys库,performance库。但并没有移除5.1默认的test库。然后开始检查业务库,修复不兼容的列。我在测试中主要碰到的提示为:
Note : TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format.
upgrade 修复该问题的sql为:
ALTER TABLE ``.` ` FORCE
由于5.6.6后修改了TIME/TIMESTAMP/DATETIME的一些行为,因此需要进行升级,关于具体哪些变化请移步官档
碰到的错误
1. 存在损坏的表,无法升级。升级前需要先repair table,注意应使用5.1版本
2. 表不支持升级
Error: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist检查报错的表引擎为MRG-MYISAM。需要手动重新创建,去主库导出建表语句,先删掉5.7的表,再执行创建表语句即可
重启数据库
运行过mysql_upgrade 之后,再次登录就需要密码了。
./bin/mysqladmin -uroot -h-P -p shutdown./bin/mysqld_safe --defaults-file=../my.cnf --datadir= --basedir=. --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
再次检查
./bin/mysqlcheck -uroot -h-P -p -A 使用的数据库未使用触发器,存储过程等,因为在这步就没有报错了。如果有使用,可以根据提示信息,决定是修复还是重建
检查主从是否正常开启。
根据报错信息,应该为relay log记录的问题,我们重启下主从。
stop slave;start slave;这时主从已经恢复正常了,查找网上的解决方法是reset slave,如果重启不管用的话只能重搭了,还好升级前记录了位置点。
现在数据库已经能够提供使用了,整个过程中 check 消耗大约1小时,upgrade 消耗了4小时左右。之后将与'dump'升级方式进行对比。后面还需要一些数据检查的工作,由于对数据内容不了解,就没有继续进行。
升级 数据 数据库 检查 版本 主从 文件 过程 问题 配置 位置 引擎 信息 再次 小时 文件夹 方法 语句 变化 提示 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 mysql数据库技术(第2版) 2021年青少年网络安全 新浪潮互联服务器出租 360网络安全与国家 武汉国家网络安全基地孵化器销售 哪家网络安全培训机构好 数据库分类怎么查询 3g4g移动通讯软件开发 腾讯云服务器ip分配不在当地 小学生网络安全教育小故事 听网络安全讲座作文 网络安全知识内容幼儿园 软件开发中间层开发 我的世界服务器保养 网络安全责任和惩戒措施 洛阳节能软件开发公司 网络安全监控漏洞 jetty服务器 学校网络安全教育调查问卷 宝利通录播服务器 周末软件开发兼职平台免费 医鹿服务器拥挤 数据库课件 共享打印机出现服务器关机 信息网络安全竞赛大纲 java通用数据库连接池 网络安全学院成绩 鸿蒙 软件开发企业 张昭忠网络安全 社区网络安全的信息相关文章