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安全错误 数据库的锁怎样保障安全 为什么服务器关机特别慢 组织学习网络安全法的通知 爱立信软件开发面试 gis批量出图数据库 宜兴海航软件开发答疑解惑 智能会员管理系统软件开发 管家婆后安装数据库 广东程序软件开发定制 怀旧服奥山战场服务器怎么样 分发网络安全知识宣传手册 服务器易出故障 全球购物软件开发 软件开发配置管理实例 常用数据库反范式设计方法有 路由器vpn服务器 嘉兴市网络安全建设 软件开发和物联网应用的区别 增强网络安全的手抄报图片 广东直销系统软件开发 江苏网络营销软件开发价钱 组织学习网络安全法的通知 软件开发项目ar图 成都做分布式存储服务器 绝地求生一直服务器繁忙 samp服务器管理app dnf台服数据库账号 数据库技术是最基础的技术 软件开发软件地理标志 数据库插入特定主键id php数据库插入相关文章