mysql 5.1 升级,MySQL从5.1升级到5.7.12

题记:出来混,欠的总要还的,技术债也是债,拖的越久越难还。

2013年时给XX台项目做的部署,当时考虑不周,MySQL用的版本为5.1。

最近客户做安全扫描发现了高危漏洞-必须修补,MySQL升级到5.7.12漏洞才能补上。

而现在MySQL版本太低,跨大版本升级,风险非常高,花了两三天时间,边测试边写方案,分享给大家做参考。

目标

一:将mysql从5.1升级到mysql5.7.12

二:不停业务

三:回滚安全、快速

方案

方案一:新MySQL替换老MySQL

方案二:新老MySQL并行切换

de2275530fb0

MySQL升级方案比较.jpg

从升级容易程度和维护程度来讲,方案一的MySQL替换方案 优。

从升级安全和回滚快速来讲,方案二 新老MySQL并行 优。

技术分析和难点验证

3.1 新MySQL安装

主要确认rpm安装和源码安装各自所需步骤和消耗时间。

RPM安装

安装包:

mysql-community-devel-5.7.12-1.el6.x86_64.rpm

mysql-community-libs-5.7.12-1.el6.x86_64.rpm

mysql-community-test-5.7.12-1.el6.x86_64.rpm

mysql-community-client-5.7.12-1.el6.x86_64.rpm

mysql-community-embedded-5.7.12-1.el6.x86_64.rpm

mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm

mysql-community-common-5.7.12-1.el6.x86_64.rpm

mysql-community-embedded-devel-5.7.12-1.el6.x86_64.rpm

mysql-community-server-5.7.12-1.el6.x86_64.rpm

前期准备:预估5分钟

1)备份老mysql数据(备份可提前做-不计算时间)

2)停止老mysql

3)卸载老mysql(yum remove mysql mysql-*)

4)删除/var/lib/mysql目录

安装方式:预估5分钟

#rpm -ivh mysql-community-*.rpm

#mysqld --initialize (初始化表)

#mysqladmin -hlocalhost -uroot password "123456" -p's#:aA_AhJ19('

#mysql -uroot -p123456

可看到版本5.7.12

B. 源码安装

安装包: mysql-5.7.12.tar.gz

依赖包:cmake-3.5.2.tar.gz 和boost_1_59_0.tar.gz

前期准备:预估时间15分钟

# cd /opt/mysql/

# tar zxvf cmake-3.5.2.tar.gz

# cd cmake-3.5.2/

# ./bootstrap

CMake has bootstrapped. Now run gmake.

# make && make install

# cmake --version

cmake version 3.5.2

#tar -zxvf /opt/mysql/boost_1_59_0.tar.gz -C /usr/local

#cd /usr/local

#mv boost_1_59_0 boost

#cd boost/

#./bootstrap.sh

#./b2 install

安装步骤:预估时间3小时

mkdir -p /opt/mysql/data

mkdir -p /opt/mysql/logs

mkdir -p /opt/mysql/temp

#cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_UNIX_ADDR=/opt/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/opt/mysql/data -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3307 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

#make && make install (耗时长)

#chown -R mysql:mysql /opt/mysql

#bin/mysqld --initialize --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql --explicit_defaults_for_timestamp=true --old_passwords=0

备注:会使用默认的my.cnf,可以先重命名该文件,等初始化成功后再换回来,不影响之前的mysql使用

#bin/mysqld --defaults-file=/opt/mysql/my.cnf --user=root

#cp support-files/mysql.server /etc/init.d/mysql3307

#chkconfig mysql3307 on

#service mysql3307 start

#bin/mysqladmin -hlocalhost -uroot password "123456" -p's#:aA_AhJ19(' --socket=/opt/mysql/mysql.sock

#mysql -uroot -p123456

3.2 将数据从老MySQL迁移到新MySQL

当前选出三种备份方式,需评估各方式使用场景和消耗时间

A. mysqldump

适合不同版本间的mysql数据导入和导出。

mysqldump导出数据较快,导入数据慢。

相关配置

#innodb_flush_log_at_trx_commit=0

#innodb_buffer_pool_size=2G

#innodb_buffer_pool_instances=8

#innodb_log_file_size=512M

#innodb_log_buffer_size=16M

#innodb_log_files_in_group=2

#max_allowed_packet = 32M

B. 数据文件拷贝

适合同版本间的mysql数据备份和还原。

时间快。

C. 单表导入和导出

脚本分表导出和导入,避免数据库引擎改变而引起的问题。

时间和mysqldump差别不大。

3.3 新MySQL主从同步

主要验证MySQL5.7.12版本的主从同步配置和老MySQL配置是否有不同。

3.4 Xtrabackup

适合同版本间的mysql数据备份和还原。

可做增量备份-适合m/s结构的数据迁移。

主要验证导入和导出的操作方式和操作使用时间。

风险及应对措施

1)新MySQL无法安装成功

2)老MySQL数据导入到新MySQL数据库时间不可控

3)老MySQL数据到新MySQL数据库出错

4)应用连新MySQL数据库出错

5)新MySQL-M/S配置

6)Dcms往新MySQL下发数据出错

7)换新MySQL后部分互动数据丢失

8)回滚时原数据丢失

1-7 模拟相同环境,提前演练和测试,给出具体的操作步骤和时间估算。

8-做两个备份mysqldump一份、xtrabackup一份。

如果是我操作,我选方案二,新老MySQL并行,基于对自己可控,易于回滚。

如果是他人操作,我建议选方案一,方案一在升级过程中不容易出错,对个人的要求没那么高,前期把准备工作做好,写好脚本,基本不会跳坑。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值