MySQL从5.1升级到5.7.12

题记:出来混,欠的总要还的,技术债也是债,拖的越久越难还。
2013年时给XX台项目做的部署,当时考虑不周,MySQL用的版本为5.1。
最近客户做安全扫描发现了高危漏洞-必须修补,MySQL升级到5.7.12漏洞才能补上。
而现在MySQL版本太低,跨大版本升级,风险非常高,花了两三天时间,边测试边写方案,分享给大家做参考。

  1. 目标
    一:将mysql从5.1升级到mysql5.7.12
    二:不停业务
    三:回滚安全、快速
  2. 方案
    方案一:新MySQL替换老MySQL
    方案二:新老MySQL并行切换


    MySQL升级方案比较.jpg

    从升级容易程度和维护程度来讲,方案一的MySQL替换方案 优。
    从升级安全和回滚快速来讲,方案二 新老MySQL并行 优。

  3. 技术分析和难点验证
    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. 风险及应对措施
    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并行,基于对自己可控,易于回滚。
如果是他人操作,我建议选方案一,方案一在升级过程中不容易出错,对个人的要求没那么高,前期把准备工作做好,写好脚本,基本不会跳坑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容