使用mysql_upgrade升级mysql5.1至5.6的数据库升级实施方案
来源:互联网 发布:电玩巴士官方淘宝店 编辑:程序博客网 时间:2024/05/18 04:34
本方案是因为在工作中遇到的一个mysql主从功能配置的问题所引起的。有一个处在从位置上的mysql是5.1版本的,从5.1到5.6的mysql各种系统管理功能,像系统表表结构、日志文件格式等等均不一致。这时直接以5.1版本去作为一个5.6版本mysql的从时,会发现连binlog日志都解析失败了。于是评估各种利弊后,决定升级5.1的数据库版本至5.6.26 。
拿mysql5.1作为5.6的从时,报错如下:
Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1594 Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you
这并不是一件轻松的事,尤其是需要升级的这个mysql5.1数据库还是一个线上运行且负载较重的业务数据库的时候。该数据库的数据目录中各种业务表加起来近500GB之大。
一、准备工作
1、在DB主机上编译安装mysql5.6
mysql5.6.26源码放在/usr/local/src下。
编译与安装:
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 \make make install
2、环境配置
chown -R mysql:mysql /usr/local/mysql5.6chown -R mysql.mysql /data/mysql5.6cd /usr/local/mysql5.6cp ./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、初始化数据库
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的数据库:
/etc/init.d/mysqld5.6 start
重置root密码:
mysqladmin --port=4306 --socket=/var/lib/mysql/mysql5.6.sock -uroot -hlocalhost password 'XXXXXXXXXXXX'
登录以验证服务可用性:
mysql --port=4306 --socket=/var/lib/mysql/mysql5.6.sock -uroot -p
以上步骤,在线上实施业务库升级前均要实施完成。
二、线上实施工作
1、切换线上业务至备用DB,停DB主机的mysql5.1的数据库
(1)备份数据库主机上5.1数据库中的"mysql"库
mysqldump -uroot -p --databases mysql > mysql.database.sql
备份该元数据库,以防后面升级失败时用于回撤。
(2)停db主机上原3306端口的5.1数据库
service mysqld stop
移走原mysql5.1使用的配置文件和服务启动脚本:
mkdir -p /data/backup/20161027mv /etc/my.cnf /data/backup/20161027mv /etc/init.d/mysqld /data/backup/20161027
2、使用mysql_upgrade升级数据库5.6版本
这里采用的是in place升级方式,主要特点是直接把原5.1数据库的数据目录交给新编译安装的mysql5.6使用,但这需要处理一些兼容性问题。
详细介绍参见以下链接:
http://dev.mysql.com/doc/refman/5.6/en/upgrading.html#upgrade-procedure-inplace
(1)登录db主机关闭5.1的数据库
service mysqld stop
如果5.6的库仍然在4306端口运行着,此时同样也要关闭。
/etc/init.d/mysqld5.6 stop
(2)修改/etc/my.cnf
注释掉table_cache = 1500 这一行参数,因为高版本的mysql会因不支持该参数而启动失败。
删除/etc/mysql5.6/my.cnf目录,该目录及配置文件是之前基于4306端口运行mysql5.6时所使用的。
(3)修改mysql服务管理脚本mysqld
mv /etc/init.d/mysqld5.6 /etc/init.d/mysqldvi /etc/init.d/mysqld
首先将以下两行参数,第一行设为/etc/my.cnf,第二行直接把--defaults-file部分删除。
conf=/etc/mysql5.6/my.cnf$bindir/mysqld_safe --defaults-file="/etc/mysql5.6/my.cnf" --datadir="$datadir"
在该文件中找到以下两个参数,设置如下,其中datadir直接复用原mysql5.1的数据目录:
basedir=/usr/local/mysql5.6datadir=/data/mysql
找到以下段落,设置datadir为正确的值:
if test -z "$basedir"then basedir=/usr/local/mysql5.6 bindir=/usr/local/mysql5.6/bin if test -z "$datadir" then datadir=/data/mysql fi sbindir=/usr/local/mysql5.6/bin libexecdir=/usr/local/mysql5.6/bin
(4)启动mysql5.6
先清空之前的错误日志,便于观察:echo "" > /var/log/mysqld.log
启动数据库: /etc/init.d/mysqld start
观察错误日志输出信息,会看到因为数据目录中不存在5.6版本的管理信息而产生的报错,但不会影响数据库启动。
(5)执行mysql_upgrade升级数据库版本
/usr/local/mysql5.6/bin/mysql_upgrade -u root -p
执行后会显示mysql对全部库表执行了一次检查和修复、升级,升级正常则不会有报错信息。
重启数据库以使上面的升级结果生效:
/etc/init.d/mysqld stop/etc/init.d/mysqld start
按以下步骤检查:
- 登录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 the
mysql
system database so that you can take advantage of new privileges or capabilities.(6)配置环境变量
编辑/etc/profile文件,在PATH变量中增加以下信息:
PATH=/usr/local/mysql5.6/bin:$PATHexport PATH
source /etc/profile
运行mysql -V看显示的版本信息是不是5.6 。登录下数据库看是否正常。
至此,版本升级工作全部结束。
业务应用在使用升级后的数据库时,未发现存在读写或其它问题。
基于新升级后的数据库,成功得配置了与mysql master的主从复制关系。
1 0
- 使用mysql_upgrade升级mysql5.1至5.6的数据库升级实施方案
- mysql5.1数据库升级
- mysql升级小结和mysql_upgrade的用途
- 升级mysql_upgrade 提示错误FATAL ERROR: Upgrade failed的原因
- 一次机房升级实施方案
- 升级 mysql5.1 -> 5.5
- 数据库升级到mysql5.6遇到的数据表ENGINE问题
- mysql5.5升级到5.6
- Mysql5.5升级到5.6
- MySQL5.1升级到MySQL5.5
- 线上数据库mysql5.5升级到5.7
- centos6.5环境通达OA数据库mysql5.0.67升级至mysql5.5.48方案
- mysql5.1升级5.6步骤以及出现问题解决方法
- PostgreSQL数据库的升级
- android数据库的升级
- MySQL5.6.25升级MySQL5.7.15
- MySQL5.6.25升级MySQL5.7.15
- NSNotification的升级使用的升级使用
- 如何向eclipse里面导入jar包
- JQuery基础之选择器的基本用法
- 4-复合类型-指针
- 安卓7.1 新特性Shortcut
- codevs 1065 01字符串 题解报告
- 使用mysql_upgrade升级mysql5.1至5.6的数据库升级实施方案
- hdu 1041 Computer Transformation(递推+大整数模板*)
- 基于php+mysql实现分页技术
- 查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数: (1)该数的十进制表示中有且仅有两个相同的数字位; (2)该数是素数
- python学习笔记三 模块
- 《Linux操作系统》笔记
- MyProgramLife(01) ---- 表单验证
- Spannable的使用(文本样式设置)
- 模式识别作业3