MySQL 'In Place' 升级实践,从5.1到5.7
admin
2023-05-23 14:42:30
0

接上篇翻译的文章:使用'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;

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

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

  • 关闭5.1版本数据库

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

/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 &

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

  • 再次检查        

./bin/mysqlcheck -uroot -h -P -p  -A

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

          检查主从是否正常开启。

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

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

stop slave;start slave;

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

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

                                                      

相关内容

热门资讯

乘客投诉绕路遭出租车司机持铁棍... 8月4日晚,太原市公安局小店分局官方微博通报:7月20日凌晨2时许,我局接到群众报警,小店区体育路许...
中国登山者在巴基斯坦雪崩中遇难... 7月30日,一支10人国际登山队在攀登布洛阿特峰(Broad Peak)时遭遇雪崩失踪。据巴基斯坦高...
阿里字节腾讯同步对内开刀,AI... 文 | 独角兽观察 结束赛马,收拢兵力。最近,阿里字节腾讯三大巨头不约而同地“跳”进同一条河。 7...
“达标蛙”应付抽检,“超标蛙”... 近日,某些地方牛蛙产品被检出抗生素超标或存在禁用兽药成分引发关注。一些涉事企业甚至还搞起“阴阳蛙”分...
“退票可以,但无法退款”?机票... 近日,“1.5万元机票退票仅退400多元”事件引发热议。消费者林先生在携程旅行花费15217元订购了...
Nextorage正式发售UH... IT之家 8 月 4 日消息,Nextorage 日本当地时间今日宣布,其今年 2 月公布的 NX-...
第二十八届中国科协年会成果发布 7月31日上午,中国科协召开第二十八届中国科协年会新闻通气会,介绍了第二十八届中国科协年会成果并回答...
OPPO A7 Pro Max... (图片来源:雷科技摄制) 价格方面: 8+128GB版本:2199元(国补到手价1869.15元) ...
原创 马... 在多数人的印象里,马斯克的名字往往与特斯拉、SpaceX、Optimus机器人、火星移民这些光鲜标签...
安志普智能取得防拆卸RFID电... 国家知识产权局信息显示,江苏安志普智能科技有限公司取得一项名为“一种防拆卸RFID电子标签”的专利,...