千家信息网

MySQL 'In Place' 升级实践,从5.1到5.7

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,接上篇翻译的文章:使用'In place' 方法直接从5.0升级至5.7,在此记录我实践的过程。1、环境准备数据库A版本:5.1字符集:latin1引擎:MyISAM数据库量:约220G表数据量:约6
千家信息网最后更新 2025年11月07日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安全错误 数据库的锁怎样保障安全 门头沟区共享轮椅软件开发 软件开发外包给个人能开票吗 accp软件开发培训班 求生之路怎么才能进入正常服务器 荣耀20手机老是服务器连接不上 怀旧服新服务器改造 数据库诊断书及病历实体集 讯梦网络技术 大型软件开发需用什么电脑开发 为了提高企业内部服务器的安全性 组态王数据库 R语言如何调用数据库 南通网站服务器哪个厂家质量好 大数据多少有效数据库 开开服务器 大庆汇泊软件开发有限公司 c语言可以调用什么数据库 网络技术应急处理中心 图书馆管理系统代码含数据库 泸州软件开发企业 软件开发 交接文档 广东佰搜网络技术有限公司 计算机网络技术专业未来职业 后来的我们票房数据库最新 企业服务器多大合适 恰恰瓜子网络安全招标 用友系统生成数据库 阿里云服务器怎么调出来 网络安全风险管理程序包括哪些 sdn是网络技术吗
0