当前位置: 移动技术网 > IT编程>数据库>Mysql > 使用mysql_upgrade升级mysql5.1至5.6的数据库的实施方案

使用mysql_upgrade升级mysql5.1至5.6的数据库的实施方案

2018年03月10日  | 移动技术网IT编程  | 我要评论
本方案是因为在工作中遇到的一个mysql主从功能配置的问题所引起的。有一个处在从位置上的mysql是5.1版本的,从5.1到5.6的mysql各种系统管理功能,像系统表表结构、日志

本方案是因为在工作中遇到的一个mysql主从功能配置的问题所引起的。有一个处在从位置上的mysql是5.1版本的,从5.1到5.6的mysql各种系统管理功能,像系统表表结构、日志文件格式等等均不一致。这时直接以5.1版本去作为一个5.6版本mysql的从时,会发现连binlog日志都解析失败了。于是评估各种利弊后,决定升级5.1的数据库版本至5.6.26 。

拿mysql5.1作为5.6的从时,报错如下:[html] view plain copy

Master_SSL_Verify_Server_Cert:NoLast_IO_Errno:0

Last_IO_Error:Last_SQL_Errno:1594

Last_SQL_Error:Relaylogreadfailure:Couldnotparserelaylogevententry.Thepossiblereasonsare:themaster'sbinarylogiscorrupted(youcancheckthisbyrunning'mysqlbinlog'onthebinarylog),theslave'srelaylogiscorrupted(you这并不是一件轻松的事,尤其是需要升级的这个mysql5.1数据库还是一个线上运行且负载较重的业务数据库的时候。该数据库的数据目录中各种业务表加起来近500GB之大。

一、准备工作1、在DB主机上编译安装mysql5.6mysql5.6.26源码放在/usr/local/src下。编译与安装:[html] view plain copy

cmake\-DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.6\

-DMYSQL_DATADIR=/data/mysql5.6\-DSYSCONFDIR=/etc/mysql5.6\

-DWITH_MYISAM_STORAGE_ENGINE=1\-DWITH_INNOBASE_STORAGE_ENGINE=1\

-DWITH_MEMORY_STORAGE_ENGINE=1\-DWITH_ARCHIVE_STORAGE_ENGINE=1\

-DWITH_PARTITION_STORAGE_ENGINE=1\-DWITH_BLACKHOLE_STORAGE_ENGINE=1\

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1\-DENABLE_DOWNLOADS=1\

-DENABLED_LOCAL_INFILE=1\-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql5.6.sock\

-DMYSQL_TCP_PORT=4306\-DEXTRA_CHARSETS=all\

-DDEFAULT_CHARSET=utf8\-DDEFAULT_COLLATION=utf8_general_ci\

-DWITH_SSL=yes\

makemakeinstall

2、环境配置[html] view plain copy

chown-Rmysql:mysql/usr/local/mysql5.6chown-Rmysql.mysql/data/mysql5.6

cd/usr/local/mysql5.6

cp./my.cnf/etc/mysql5.6/my.cnf--暂时将my.cnf中的端口改为4306,将sock文件都加上一个5.6的后缀,因为要和mysql5.1同时运行。cp./support-files/mysql.server/etc/rc.d/init.d/mysqld5.6--暂时命名为mysqld5.6

3、初始化数据库[html] view plain copy

cd/usr/local/mysql5.6./scripts/mysql_install_db--defaults-file=/etc/mysql5.6/my.cnf--basedir=/usr/local/mysql5.6--datadir=/data/mysql5.6--user=mysql

在4306端口上启动mysql5.6的数据库:[html] view plain copy

/etc/init.d/mysqld5.6start

重置root密码:[html] view plain copy

mysqladmin--port=4306--socket=/var/lib/mysql/mysql5.6.sock-uroot-hlocalhostpassword'XXXXXXXXXXXX'

登录以验证服务可用性:[html] view plain copy

mysql--port=4306--socket=/var/lib/mysql/mysql5.6.sock-uroot-p以上步骤,在线上实施业务库升级前均要实施完成。

二、线上实施工作1、切换线上业务至备用DB,停DB主机的mysql5.1的数据库(1)备份数据库主机上5.1数据库中的"mysql"库[html] view plain copy

mysqldump-uroot-p--databasesmysql>mysql.database.sql备份该元数据库,以防后面升级失败时用于回撤。

(2)停db主机上原3306端口的5.1数据库[html] view plain copy

servicemysqldstop

移走原mysql5.1使用的配置文件和服务启动脚本:[html] view plain copy

mkdir-p/data/backup/20161027mv/etc/my.cnf/data/backup/20161027

mv/etc/init.d/mysqld/data/backup/20161027

2、使用mysql_upgrade升级数据库5.6版本这里采用的是in place升级方式,主要特点是直接把原5.1数据库的数据目录交给新编译安装的mysql5.6使用,但这需要处理一些兼容性问题。详细介绍参见以下链接:https://dev.mysql.com/doc/refman/5.6/en/upgrading.html#upgrade-procedure-inplace

(1)登录db主机关闭5.1的数据库[html] view plain copy

servicemysqldstop

如果5.6的库仍然在4306端口运行着,此时同样也要关闭。[html] view plain copy

/etc/init.d/mysqld5.6stop

(2)修改/etc/my.cnf注释掉table_cache = 1500 这一行参数,因为高版本的mysql会因不支持该参数而启动失败。

删除/etc/mysql5.6/my.cnf目录,该目录及配置文件是之前基于4306端口运行mysql5.6时所使用的。

(3)修改mysql服务管理脚本mysqld[html] view plain copy

mv/etc/init.d/mysqld5.6/etc/init.d/mysqldvi/etc/init.d/mysqld

首先将以下两行参数,第一行设为/etc/my.cnf,第二行直接把--defaults-file部分删除。

[html] view plain copy

conf=/etc/mysql5.6/my.cnf$bindir/mysqld_safe--defaults-file="/etc/mysql5.6/my.cnf"--datadir="$datadir"

在该文件中找到以下两个参数,设置如下,其中datadir直接复用原mysql5.1的数据目录:[html] view plain copy

basedir=/usr/local/mysql5.6datadir=/data/mysql

找到以下段落,设置datadir为正确的值:[html] view plain copy

iftest-z"$basedir"then

basedir=/usr/local/mysql5.6bindir=/usr/local/mysql5.6/bin

iftest-z"$datadir"then

datadir=/data/mysqlfi

sbindir=/usr/local/mysql5.6/binlibexecdir=/usr/local/mysql5.6/bin

(4)启动mysql5.6先清空之前的错误日志,便于观察:echo "" > /var/log/mysqld.log启动数据库:/etc/init.d/mysqld start观察错误日志输出信息,会看到因为数据目录中不存在5.6版本的管理信息而产生的报错,但不会影响数据库启动。

(5)执行mysql_upgrade升级数据库版本[html] view plain copy

/usr/local/mysql5.6/bin/mysql_upgrade-uroot-p

执行后会显示mysql对全部库表执行了一次检查和修复、升级,升级正常则不会有报错信息。

重启数据库以使上面的升级结果生效:[html] view plain copy

/etc/init.d/mysqldstop/etc/init.d/mysqldstart

按以下步骤检查:登录mysql检查下是否增加了一个performance_schema的库;进入名为mysql的库,检查是否新增了innodb_index_stats,innodb_table_stats,proxies_priv,slave_master_info,slave_relay_log_info,slave_worker_info 这6张表;检查mysql.user表,是否新增了Create_tablespace_priv,plugin,authentication_string,password_expired这4个字段;检查业务上使用的数据库表、数据是否正常;再观察mysql的错误日志输出信息;

mysql_upgrade命令做了些什么工作:mysql_upgrade examines all tables in all databases for incompatibilities with the current version of MySQL.mysql_upgrade also upgrades themysql system database so that you can take advantage of new privileges or capabilities.

(6)配置环境变量编辑/etc/profile文件,在PATH变量中增加以下信息:[html] view plain copy

PATH=/usr/local/mysql5.6/bin:$PATHexportPATH

source /etc/profile运行mysql -V看显示的版本信息是不是5.6 。登录下数据库看是否正常。

至此,版本升级工作全部结束。业务应用在使用升级后的数据库时,未发现存在读写或其它问题。基于新升级后的数据库,成功得配置了与mysql master的主从复制关系。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网