mysql inplace_MySQL 'In Place' 升级实践,从5.1到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;

记录下当前的位置点,并在配置文件中配置主从不随数据库启动

23dd9c581b134c0b6867d95084cb4161.png关闭5.1版本数据库

1276fe6c11de679f45bf7a5dd244d4a3.png/etc/init.d/mysqld stop or

cd /usr/local/mysql51

./bin/mysqladmin -uroot --socket=/var/lib/mysql.sock -p'' shutdown

我注释掉了以下几项:

也可将innodb_undo_tablespaces设置为0,为了方便,将会有问题的配置注释,使用默认配置>

#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

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= --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 ``.`

由于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= --socket=/var/lib/mysql.sock --skip-grant-tables &

fa021a3a39bc46da730815ce60235908.png再次检查./bin/mysqlcheck -uroot -h -P -p  -A

使用的数据库未使用触发器,存储过程等,因为在这步就没有报错了。如果有使用,可以根据提示信息,决定是修复还是重建

检查主从是否正常开启。

386f93883a2c4bac25dc2361e3e3e612.png

根据报错信息,应该为relay log记录的问题,我们重启下主从。stop slave;start slave;

这时主从已经恢复正常了,查找网上的解决方法是reset slave,如果重启不管用的话只能重搭了,还好升级前记录了位置点。现在数据库已经能够提供使用了,整个过程中  check 消耗大约1小时,upgrade 消耗了4小时左右。之后将与‘dump’升级方式进行对比。后面还需要一些数据检查的工作,由于对数据内容不了解,就没有继续进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值