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

发布时间:2020-05-25 08:12:09 作者:Amnesiasun
来源:网络 阅读:1719

接上篇翻译的文章:使用'In place' 方法直接从5.0升级至5.7,在此记录我实践的过程。

1、环境准备

    数据库A

    版本:5.1

    字符集:latin1

    引擎:MyISAM

    数据库量:约220G

    表数据量:约600

    服务器:centos6.5

2、升级过程

已经搭建好5.1版本数据的从库,等主从同步之后,开始升级从库

         我们在升级前,首先检查并修复表(MyISAM引擎)。     

 ./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -r  -A
stop slave;
show slave status;

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

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

          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'<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'

       

cd  /usr/local/mysql57
./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=.  
--port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
./bin/mysql_upgrade -uroot --socket=/var/lib/mysql.sock
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 &

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

./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p  -A

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

          检查主从是否正常开启。

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

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

stop slave;start slave;

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

                                                      

推荐阅读:
  1. 为什么MySQL 5.7主库崩溃切备库
  2. MySQL中help命令怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

升级 mysql in

上一篇:PHP 蚂蚁芝麻信用分接口

下一篇:敏捷项目管理-用户画像

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》