接上篇翻译的文章:使用'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 or cd /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 = NONE sql_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’升级方式进行对比。后面还需要一些数据检查的工作,由于对数据内容不了解,就没有继续进行。
上一篇:Redis简介
下一篇:MySQL多源复制配置实施步骤
相关内容
热门资讯赋能全域数据互通,“郑数登”入... 【大河财立方 记者 李雯雯】5月19日,大河财立方记者从郑州数据交易中心获悉,由河南省发展改革委、中...河南文旅,“留量时代” 【大河财立方 记者 朱娟】初夏微风,轻拂过中原,吹动文旅潮涌不息。从龙门石窟的千年石刻到洛邑古城的汉...从机甲量产到AI适配 人形机器... 载人变形机甲量产落地,人形机器人接入AI智能体,机器人动作大模型面世……近期,我国人形机器人领域迎来...鑫宏业获得实用新型专利授权:“... 证券之星消息,根据天眼查APP数据显示鑫宏业(301310)新获得一项实用新型专利授权,专利名为“抗...客运航司上市有望破冰!长龙航空... 【大河财立方消息】 时隔8年,A股或再迎来一家客运航空公司。近日,证监会官网显示,浙江长龙航空股份有...湖南省拟发行34.12亿元地方... 【大河财立方消息】 5月19日,湖南省财政厅发布通知,决定发行2026年湖南省政府专项债券(十至十一...中央生态环保督察公布辽宁、吉林... 第三轮第六批中央生态环境保护督察今天(5月19日)集中公布辽宁、吉林、黑龙江和广西四省区典型案例。辽...2026年成都市科技活动周即将... 记者从成都市科技局获悉,5月23日晚,2026年四川省科技活动周暨蓉城科学之夜启动仪式将在成都天府艺...河南制造,“小满时刻” 【大河财立方 记者 王磊彬 文图】立夏之后,小满将至。中原沃野之上,千万亩小麦正进入籽粒灌浆、日渐充...败诉后,马斯克表示“不服” 就美国企业家埃隆·马斯克针对开放人工智能研究中心(OpenAI)的诉讼,加利福尼亚州奥克兰市一家联邦...