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

本文详细介绍了如何将mysql5.1数据库升级到5.6,包括编译安装、环境配置、在线升级过程以及使用mysql_upgrade工具进行数据库版本升级。在升级过程中解决了binlog日志解析失败的问题,确保了业务的连续性和数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本方案是由于在工做中遇到的一个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之大。

8137b7a95641efa0023649eb6c0ed367.png

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

二、环境配置

chown -R mysql:mysql /usr/local/mysql5.6

chown -R mysql.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

三、初始化数据库

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

以上步骤,在线上实施业务库升级前均要实施完成。

2、线上实施工做

一、切换线上业务至备用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/20161027

mv /etc/my.cnf /data/backup/20161027

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

二、使用mysql_upgrade升级数据库5.6版本

这里采用的是

in place升级方式,主要特色是直接把原5.1数据库的数据目录交给新编译安装的mysql5.6使用,但这须要处理一些兼容性问题。

详细介绍参见如下连接:

(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/mysqld

vi /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.6

datadir=/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:$PATH

export PATH

source /etc/profile

运行mysql -V看显示的版本信息是否是5.6 。登陆下数据库看是否正常。

至此,版本升级工做所有结束。

业务应用在使用升级后的数据库时,未发现存在读写或其它问题。

基于新升级后的数据库,成功得配置了与mysql master的主从复制关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值