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<HOST> -P<PORT> -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‘<PASSWORD>‘ shutdown

我注释掉了以下几项:

<InnoDB相关,注释掉undo有关的配置,因为undo文件只能在初始化时创建,
也可将innodb_undo_tablespaces设置为0,为了方便,将会有问题的配置注释,使用默认配置>
#innodb_data_file_path          = ibdata1:1024M:autoextend
#innodb_file_per_table          = 1 
#innodb_undo_directory          = <DATADIR>
#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=<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 `<DB>`.`<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<HOST> -P<PORT> -p  shutdown
./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=.  
--port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &

  • 再次检查
./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p  -A

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

检查主从是否正常开启。

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

stop slave;start slave;

这时主从已经恢复正常了,查找网上的解决方法是reset slave,如果重启不管用的话只能重搭了,还好升级前记录了位置点。

  • 现在数据库已经能够提供使用了,整个过程中  check 消耗大约1小时,upgrade 消耗了4小时左右。之后将与‘dump’升级方式进行对比。后面还需要一些数据检查的工作,由于对数据内容不了解,就没有继续进行。

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

时间: 2024-10-29 19:10:18

MySQL 'In Place' 升级实践,从5.1到5.7的相关文章

日请求亿级的QQ会员AMS平台PHP7升级实践

QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0(2008年的技术).尤其从去年开始,随着AMS业务随着QQ会员增值业务的快速增长,性能压力日益变大. 于是,自2015年5月,我们就开始规划PHP底层升级,最终的目标是升级到PHP7.那时,PHP7尚处于

mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次【原创】

mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次 1.[备份指定数据库]不要用逗号mydb hellodb [[email protected] ~]# mysqldump -uroot -p  --databases mydb hellodb  > /tmp/all.sql [修改ENGINE=MyISAM 为 ENGINE=InnoDB] [[email protected] home]# cp hellodb.sql hellodb.sql.bak

QQ会员AMS平台PHP7升级实践

作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0.尤其从去年开始,随着AMS业务随

日请求亿级的 QQ 会员 AMS 平台 PHP7 升级实践

QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0(2008年的技术).尤其从去年开始,随着AMS业务随着QQ会员增值业务的快速增长,性能压力日益变大. 于是,自2015年5月,我们就开始规划PHP底层升级,最终的目标是升级到PHP7.那时,PHP7尚处于

微信后台异步消息队列的优化升级实践分享

1.引言 MQ 异步消息队列是微信后台自研的重要组件,广泛应用在各种业务场景中,为业务提供解耦.缓冲.异步化等能力.本文分享了该组件2.0版本的功能特点及优化实践,希望能为类似业务(比如移动端IM系统等)的消息队列设计提供一定的参考. 2.关于分享者 廖文鑫,2013年加入腾讯,从事微信后台基础功能及架构的开发和运营,先后参与了消息通知推送系统.任务队列组件.春晚摇红包活动等项目,在海量分布式高性能系统方面有丰富的经验. 3.背景介绍 微信后台给件 MQ 1.0 发布之初,基本满足了一般业务场景

从Oracle到MySQL,余额宝云实践分享

原文链接:http://www.csdn.net/article/2013-11-/2817426-interview-financial-case-yuerbao-aliyun07 余额宝.百度百发.腾讯财付通谋划的互联网理财工具,吹响了互联网对金融行业的进军节奏.而后,网易.和讯.京东商城.苏宁云商等二线实力企业纷纷涉水.另一边,一众金融精英也在频频转换思路,不仅银行网络中心从副行长牵头的服务部门一跃成为行长主抓的业务部门,而且高调发布互联网金融理财产品与携手互联网企业并行,力图实现金融互联

将MySQL 5.1升级到MySQL 5.5的步骤

mysql基本信息 1.安装目录/usr/local/mysql 2.数据目录 /home/mydb 3.配置目录 /etc/my.cnf 4.启动脚本/etc/init.d/mysql 升级前操作 1.停止线上业务,备份数据 备份:mysqldump -uroot -p –all-databases >/home/mysql/meng/databk_20150207.sql 停止:/etc/init.d/mysql stop #备份数据目录:mkdir /home/mydb5.1 #cp /h

Mycat(4):消息表mysql数据库分表实践

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 未经博主允许不得转载. 1,业务需求 比如一个社交软件,比如像腾讯的qq.可以进行群聊天(gid),也可以单人聊天. 这里面使用到了数据库中间件mycat,和mysql数据表分区. 关于mycat分区参考: [ 数据库垂直拆分,水平拆分利器,cobar升级版mycat] http://blog.csdn.net/freewebsys/article/details

Redhat 6.6 mysql 5.1升级到5.6步骤

注:从mysql 5.1无法通过rpm -U 升级安装到mysql 5.6,需先卸掉mysql-libs,然后再rpm -i安装 需先卸载mysql-libs,不然会报错:file /usr/share/man/man1/my_print_defaults.1.gz from install of MySQL-server-5.6.24-1.el6.x86_64 conflicts with file from package mysql-5.1.73-3.el6_5.x86_64 # yum