暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL升级小结和mysql_upgrade的用途

科学家的炼丹房 2016-01-23
365

MySQL升级

1.升级方式

分为In-place和out-of-place,前者直接覆盖当前版本,后者在新路径安装然后加载数据库;

升级不可跳级,即5.1要想升级成5.6,必须先升级到5.5;

注:oracle的out-of-place upgrade采用新binary直接加载原数据文件,而mysql需要导出--导入数据;

 

 

2.大致步骤

(1)备份

(2)升级

(3)mysql_upgrade检查不兼容的表,更新grant表;


生产中5.5升级5.6步骤:

(1) 备份  mysqldump –all-databases –routines - events

(2)升级前,检查表和索引是否兼容http://dev.mysql.com/doc/refman/5.6/en/checking-table-incompatibilities.html

(3)升级后调用mysql_upgrade,

注:对于大数据库,in-place upgrade可能要花费很长时间进行数据转换,对此可以创建一个dummy实例:包含mysql数据库和其他数据库的结构(不含数据),升级dummy并查看可能遇到的问题;

5.6很多参数的默认值都做了调整,详细可参考http://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html

 

3.mysql_upgrade

本质上为一个封装了mysqlcheck命令的脚本,流程如下:

1 mysqlcheck --no-defaults --databases --fix-db-names --fix-table-names mysql
复制
2 mysqlcheck --no-defaults --check-upgrade --databases --auto-repair mysql
复制
3 mysql < fix_priv_tables
复制
4 mysqlcheck --no-defaults --all-databases --skip-database=mysql --fix-db-names --fix-table-names
复制
5 mysqlcheck --no-defaults --check-upgrade --all-databases --skip-database=mysql --auto-repair
复制

执行完毕后在数据目录生成mysql_upgrade_info文件,记录检查过的表,下次再调用时可以跳过; 

执行步骤:

1)检查所有数据表同当前binary的兼容性,若不兼容则尝试修复,修复失败则必须手工执行;

手工修复:mysqldump重新加载或者null alternation(alter table t engine=innodb);

如果仅仅是修改表的collation,则可调用ALTER TABLE xxx CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

2)升级mysql系统表;

调用mysql_upgrade后,需要重启mysql才能让系统表更新生效;

如果单机运行了多个mysql实例,则指定连接参数

shell>mysql_upgrade --protocol=tcp -P 3306 [other_options]
复制
shell>mysql_upgrade --protocol=tcp -P 3307 [other_options]
复制

输出结果

Table upgrade required.

Please do "REPAIR TABLE `tbl_name`" or dump/reload to fix it!

 

4.Tip

(1)可备份old mysqld,如果new mysqld运行出错可迅速切换;

(2)对于GA(general availability)版本间的升级,同一架构下的系统可以在两个版本间copy  mysql format file和数据文件;

(3)不要使用old my.cnf,mysqld –print-defaults检查;

(4)重新安装perl DBD::mysql,以及PHP和Python相应的驱动包;

 

升级replication

同oracle一样,mysql支持low master – high slave复制模式(部分sql可能会出现错误),顺序颠倒过来则可能遭遇一系列错误(比如binlog不兼容/),因此升级master前须先升级slave;

对于需要重建表或索引的操作(collation变化需要重建index),最安全的办法是各自在master/slave单独执行期间(禁用replication);

(1)关闭slave并升级,以—skip-slave-start选项启动,执行重建

(2)master禁用binlog执行重建

(3)恢复原来设置,slave正常连接master

注:GTID=on会导致更新mysql系统表(myisam)失败,http://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html


文章转载自科学家的炼丹房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论