MySQL5.6.26升级到MySQL5.7.9实战方案

转自

MySQL5.6.26升级到MySQL5.7.9实战方案 - 其他网络技术 - 红黑联盟
http://www.2cto.com/net/201512/453682.html

参考

Mysql5.5升级到5.6步骤详解 - T9Team的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/i_team/article/details/9935693

前言

某大公司升级方案,由于公司经常安全扫描,每个版本都有自身的BUG,为了安全到一定时间都会升级到新的版本。本案例采用单机环境升级方案,在单机中搭建主从方案。

1.单机环境

IP:172.16.0.111

系统:SUSE 11

MySQL旧版本:5.6.26

MySQL新版本:5.7.9

2.升级前准备

注意:升级之前查看磁盘空间充足,能在本机搭建从库。

3.安装新版本

旧版本目录

软件目录: /app/mysql5.6/

数据目录:/data/mysql3306/

配置文件:/app/mysql5.6/my.cnf

[client]

socket=/app/mysql5.6/mysql.sock

default-character-set=utf8

#innodb_buffer_pool_size

port=3306

[mysql]

prompt=\\u@\\d \\r:\\m:\\s>

no-auto-rehash

[mysqld_safe]

pid-file=/app/mysql5.6/mysqld.pid

[mysqld]

socket=/app/mysql5.6/mysql.sock

port=3306

character-set-server=utf8

transaction-isolation=READ-COMMITTED

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp=TRUE

lower_case_table_names=1

local-infile=1

skip-name-resolve

table_definition_cache=500

table_open_cache=500

max_connections=1024

max_user_connections=1000

max_connect_errors=65536

max_allowed_packet=16M

query_cache_type=0

basedir=/app/mysql5.6

datadir=/data/mysql3306

slow_query_log=1

long_query_time=1

log-queries-not-using-indexes

#############

event_scheduler=ON

#innodb_buffer_pool_size=20G

innodb_flush_log_at_trx_commit=2

innodb_strict_mode=1

innodb_flush_method=O_DIRECT

innodb_log_files_in_group=3

innodb_file_per_table

log-bin=mysql-bin

binlog-format=ROW

server_id=111

log-slave-updates=1

skip-slave-start

#read_only=1

expire_logs_days=7

sync_binlog=1

新版本目录

软件目录:/app/mysql5.7/

数据目录:/data/mysqldata/

配置文件:/app/mysql5.7/my.cnf

3.1.解压文件

mysql01:~# tar zxvf mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz

3.2.移动解压文件

mysql01:~ # mvmysql-5.7.9-linux-glibc2.5-x86_64 /app/mysql5.7

mysql01:~ # chown -R mysql:app/app/mysql5.7

3.3.创建数据目录

mysql01:~ # mkdir /data/mysqldata

mysql01:~ # chown -R mysql:app/data/mysqldata

3.4.初始化数据

注意:初始化和之前版本不一样了,初始化时有初始化密码的

mysql01:/data/mysqldata# /app/mysql5.7/bin/mysqld--initialize --user=mysql --basedir=/app/mysql5.7--datadir=/data/mysqldata

2015-12-03T23:34:12.688857Z0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use--explicit_defaults_for_timestamp server option (see documentation for moredetails).

2015-12-03T23:34:12.927838Z0 [Warning] InnoDB: New log files created, LSN=45790

2015-12-03T23:34:12.968656Z0 [Warning] InnoDB: Creating foreign key constraint system tables.

2015-12-03T23:34:13.025810Z0 [Warning] No existing UUID has been found, so we assume that this is thefirst time that this server has been started. Generating a new UUID:5c20785f-9a16-11e5-a525-000c294cec8f.

2015-12-03T23:34:13.027457Z0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed'cannot be opened.

2015-12-03T23:34:13.028709Z1 [Note] A temporary password is generated for root@localhost: O-FxRJjl_1Yi #初始化密码

3.5.修改配置文件

mysql01:~ # cp /app/mysql5.6/my.cnf /app/mysql5.7/my.cnf

mysql01:/data/mysqldata # vi /app/mysql5.7/my.cnf

[client]

socket=/app/mysql5.7/mysql.sock

default-character-set=utf8

port=3307

[mysql]

prompt=\\u@\\d \\r:\\m:\\s>

no-auto-rehash

[mysqld_safe]

pid-file=/app/mysql5.7/mysqld.pid

[mysqld]

socket=/app/mysql5.7/mysql.sock

port=3307

character-set-server=utf8

transaction-isolation=READ-COMMITTED

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp=TRUE

lower_case_table_names=1

local-infile=1

skip-name-resolve

table_definition_cache=500

table_open_cache=500

max_connections=1024

max_user_connections=1000

max_connect_errors=65536

max_allowed_packet=16M

query_cache_type=0

basedir=/app/mysql5.7

datadir=/data/mysqldata

slow_query_log=1

long_query_time=1

log-queries-not-using-indexes

###################

#############

event_scheduler=ON

#innodb_buffer_pool_size=20G

innodb_flush_log_at_trx_commit=2

innodb_strict_mode=1

innodb_flush_method=O_DIRECT

innodb_log_files_in_group=3

innodb_file_per_table

log-bin=mysql-bin

binlog-format=ROW

server_id=112

log-slave-updates=1

skip-slave-start

#read_only=1

expire_logs_days=7

sync_binlog=1

3.6修改启动脚本

mysql01:/data/mysqldata # cp/app/mysql5.7/support-files/mysql.server /etc/init.d/mysql3307

mysql01:/data/mysqldata # vi/etc/init.d/mysql3307

修改之处

basedir=/app/mysql5.7

datadir=/data/mysqldata

mysql01:/data/mysqldata # chmod +x/etc/init.d/mysql3307

启动新版本MYSQL

mysql01:/data/mysqldata # /etc/init.d/mysql3307 start

Starting MySQL..done

进入MYSQL

mysql01:/data/mysqldata #/app/mysql5.7/bin/mysql-uroot -pO-FxRJjl_1Yi -P3307 --socket=/app/mysql5.7/mysql.sock

4.导出与导入数据

导出数据

mysql@mysql01 ~ $mysqldump -uroot -p --default-character-set=utf8 --all-databases--single-transaction --routines --triggers --events --master-data=2 --socket=/app/mysql5.6/mysql.sock >mysql20151211.sql

注解:

--all-databases 导出所有数据库

--single-transaction

该选项在导出数据之前提交一个BEGINSQL语句,BEGIN不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables选项是互斥的,因为LOCKTABLES会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick选项。

--routines,-R

导出存储过程以及自定义函数。

--triggers

导出触发器。该选项默认启用,用--skip-triggers禁用它。

--events,-E

导出事件。

--master-data

该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGEMASTER命令;如果为2,输出的CHANGEMASTER命令前添加注释信息。该选项将打开--lock-all-tables选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

mysql@mysql01 ~ $more mysql20151211.sql

-- MySQL dump 10.13 Distrib 5.6.26, for linux-glibc2.5 (x86_64)

--

-- Host: localhost Database:

-- ------------------------------------------------------

-- Server version 5.6.26-log

/*!40101 SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0

*/;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES,SQL_NOTES=0 */;

--

-- Position to start replication orpoint-in-time recovery from

--

-- CHANGE MASTER TOMASTER_LOG_FILE='mysql-bin.000049', MASTER_LOG_POS=120;

#主从搭建时需要的

把备份数据导入新版本

mysql@mysql01 ~ $/app/mysql5.7/bin/mysql-uroot -pO-FxRJjl_1Yi -P3307 --socket=/app/mysql5.7/mysql.sock < mysql20151211.sql

查看导入成功

mysql@mysql01 ~ $/app/mysql5.7/bin/mysql-uroot -pO-FxRJjl_1Yi -P3307 --socket=/app/mysql5.7/mysql.sock

mysql: [Warning] Using a password on thecommand line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.9-log MySQL CommunityServer (GPL)

Copyright (c) 2000, 2015, Oracle and/or itsaffiliates. All rights reserved.

Oracle is a registered trademark of OracleCorporation and/or its

affiliates. Other names may be trademarksof their respective

owners.

Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.

root@(none) 07:51:16>show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| dataaudit |

| fanrenjie |

| huizhe |

| mysql |

| performance_schema |

| sys |

| test |

| test02 |

| test08 |

+--------------------+

10 rows in set (0.00 sec)

root@(none) 07:51:20>

5.主从搭建

在Master上增加一个用于复制的账号:

root@(none) 07:52:47>GRANT REPLICATIONSLAVE ON *.* TO 'repl'@'172.16.0.%' IDENTIFIED BY '123456';

Query OK, 0 rows affected (1.01 sec)

在SLAVE上执行如下命令

mysql@mysql01 ~ $/app/mysql5.7/bin/mysql-uroot -pO-FxRJjl_1Yi -P3307 --socket=/app/mysql5.7/mysql.sock

mysql: [Warning] Using a password on thecommand line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.9-log MySQL CommunityServer (GPL)

Copyright (c) 2000, 2015, Oracle and/or itsaffiliates. All rights reserved.

Oracle is a registered trademark of OracleCorporation and/or its

affiliates. Other names may be trademarksof their respective

owners.

Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.

root@(none) 07:51:20>CHANGE MASTER TOMASTER_HOST='172.16.0.111',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000049',MASTER_LOG_POS=120;

#注意MASTER_LOG_FILE='mysql-bin.000049',MASTER_LOG_POS=120;与备份数据里的要一样,为了保证数据一致性

Query OK, 0 rows affected, 2 warnings (0.01sec)

root@(none) 08:00:17>start slave; #开启主从

Query OK, 0 rows affected (0.00 sec)

root@(none) 08:03:42>show slavestatus\G; #查看复制

*************************** 1. row***************************

Slave_IO_State: Waiting formaster to send event

Master_Host: 172.16.0.111

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000049

Read_Master_Log_Pos: 327

Relay_Log_File:mysql01-relay-bin.000002

Relay_Log_Pos: 524

Relay_Master_Log_File: mysql-bin.000049

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 327

Relay_Log_Space: 733

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 111

Master_UUID:279f439b-5d2f-11e5-ad29-000c294cec8f

Master_Info_File: /data/mysqldata/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for moreupdates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

1 row in set (0.00 sec)

ERROR:

No query specified

root@(none) 08:03:55>

6.执行mysql_upgrade命令

官方提到执行这命令可以让原数据启用到新版本的特性,注意:GTID复制不要开启

mysql@mysql01 ~$/app/mysql5.7/bin/mysql_upgrade -uroot-p123456 -P3307 --socket=/app/mysql5.7/mysql.sock

mysql_upgrade: [Warning] Using a passwordon the command line interface can be insecure.

Checking if update is needed.

Checking server version.

Running queries to upgrade MySQL server.

Checking system database.

mysql.columns_priv OK

mysql.db OK

mysql.engine_cost OK

mysql.event OK

mysql.func OK

mysql.general_log OK

mysql.gtid_executed OK

mysql.help_category OK

mysql.help_keyword OK

mysql.help_relation OK

mysql.help_topic OK

mysql.innodb_index_stats OK

mysql.innodb_table_stats OK

mysql.ndb_binlog_index OK

mysql.plugin OK

mysql.proc OK

mysql.procs_priv OK

mysql.proxies_priv OK

mysql.server_cost OK

mysql.servers OK

mysql.slave_master_info OK

mysql.slave_relay_log_info OK

mysql.slave_worker_info OK

mysql.slow_log OK

mysql.tables_priv OK

mysql.time_zone OK

mysql.time_zone_leap_second OK

mysql.time_zone_name OK

mysql.time_zone_transition OK

mysql.time_zone_transition_type OK

mysql.user OK

The sys schema is already up to date(version 1.5.0).

Found 0 sys functions, but expected 21.Re-installing the sys schema.

Upgrading the sys schema.

Checking databases.

dataaudit.t_dataaudit_amount_7 OK

fanrenjie.hz_admin OK

fanrenjie.hz_advertisement OK

fanrenjie.hz_car OK

fanrenjie.hz_education OK

fanrenjie.hz_entertainment OK

fanrenjie.hz_food OK

fanrenjie.hz_health OK

fanrenjie.hz_house OK

fanrenjie.hz_it OK

fanrenjie.hz_literature OK

fanrenjie.hz_manager_menu OK

fanrenjie.hz_message OK

fanrenjie.hz_news OK

fanrenjie.hz_sports OK

fanrenjie.hz_subclass_menu OK

fanrenjie.hz_travel OK

huizhe.auth_urllink OK

huizhe.auth_user OK

huizhe.data_baoyou OK

huizhe.data_huazhuangpin OK

huizhe.data_muying OK

huizhe.data_nanzhuang OK

huizhe.data_nvzhuang OK

huizhe.data_products OK

huizhe.data_shipin OK

huizhe.data_tour OK

huizhe.data_tuan OK

huizhe.data_xiebao OK

sys.sys_config OK

Upgrade process completed successfully.

Checking if update is needed.

7.升级切换。

把主库停止,把从库停止后,端口修改成3306,因为为了对生产库没有影响。在停止时必须和应用联系。

停止主库

mysql01:/data/mysqldata #/etc/init.d/mysqld stop

Shutting down MySQL....done

停止从库

mysql01:/data/mysqldata #/etc/init.d/mysql3307 stop

Shutting down MySQL....done

修改启动

mysql01:/data/mysqldata # cd /etc/init.d/

mysql01:/etc/init.d # mv mysqld mysqlold

mysql01:/etc/init.d # mv mysql3307 mysqld

修改配置文件

mysql01:/etc/init.d # vi/app/mysql5.7/my.cnf

[client]

….

port=3306

[mysqld]

…………

port=3306

……

最后启动新版本

mysql01:/etc/init.d # /etc/init.d/mysqldstart

Starting MySQL. Done

清除同步

mysql> resetslave all;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

Empty set (0.00 sec)

ERROR:

No query specified

把环境变量修改如下

mysql@mysql01 ~ $vi .profile

export MYSQL_HOME=/app/mysql5.7

export MY_BASEDIR_VERSION=/app/mysql5.7

export PATH=/app/mysql5.7/bin:$PATH

export LD_LIBRARY_PATH=/app/mysql5.7/lib

export PS1='\u@\H \w \$'

让环境变量生效

mysql@mysql01 ~ $source .profile

注:过几天如果应用一切正常。

最后清理旧版本的数据与软件

MySQL5.6.26升级到MySQL5.7.9实战方案【转】的更多相关文章

  1. mysql5.5.x升级到mysql5.6.x

    大概步骤是: 把配置文件添加:skip-grant-tables参数,把basedir升级成新版本,启动mysql,执行命令:mysql_upgrade升级一下字典信息,然后flush privile ...

  2. windows下卸载mysql5.5,升级为mysql5.7.25

    0. 停止mysql的服务 1. 卸载mysql5.5 1.1 使用360或者控制面板卸载mysql,为求干净,我使用的360,结果也需要手动清理 1.2 卸载完成之后到mysql的安装目录删掉该目录 ...

  3. mysql5.6升级为mysql5.7部署jboss/wildfly应用项目

    一.部署mysql5.7二进制版 解压tar -xvf mv mysql-5.7  /usr/local/mysql5.7  或者其他文件夹 cd  /usr/local/mysql.57 usera ...

  4. MySQL5.7.26二进制安装

    1.安装系统版本 2.解压更换路径 tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.26-linux-glibc2.12- ...

  5. 安装MySQL5.7.26教程图解

    安装MySQL5.7.26教程图解 1.安装mysql所需的yum源 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf ...

  6. Ubuntu14.04编译安装mysql5.6.26

    Ubuntu14.04编译安装mysql5.6.26 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libncurses5-d ...

  7. CentOS 6.5 源码安装MySQL5.6.26

    1:下载安装cmake (mysql5.5以后是通过cmake来编译的) 2:创建mysql的安装目录及数据库存放目录 #mkdir /usr/mysql                 //安装my ...

  8. 利用JDBC连接Eclipse和mySQL5.1.26数据库

    初学JDBC,看了看书,自己动手的时候还是有很多地方有问题,最终终于解决了实现了数据库的连接.现将整个步骤描述如下: 环境:mySQL5.1.26(win 32bit), Eclipse JavaEE ...

  9. Windows 10 将MySQL5.5升级为MySQL5.7

    最近想学习一下java.找到一个开源项目需要mysql5.7.11+ 升级 电脑上装的是MySQL 5.5,准备直接升级到最新版本的5.7,对于MySQL好像并没有直接升级到最新版本的功能,下载了Wi ...

随机推荐

  1. BZOJ 1565 植物大战僵尸(拓扑排序+最大权闭合子图)

    图中的保护关系就类似于最大权闭合子图.即你想杀x,你就一定要杀掉保护x的点,那么把x向保护它的点连边.那么题目就转化成了最大权闭合子图的问题. 但是这个图有点特殊啊... 考虑有环的情况,显然这个环以 ...

  2. element-ui中单独引入Message组件的问题

    import Message from './src/main.js'; export default Message; 由于Message组件并没有install 方法供Vue来操作的,是直接返回的 ...

  3. 题解 P1567 【统计天数】

    天哪!竟然没人用优先队列! 小金羊又来水题了... 优先队列中的大根堆帮助我们把时间复杂度降到O(n+logn) 首先我们先了解一下大根堆... 大根堆的性质:根节点比子节点大, 这意味着最上面的节点 ...

  4. Day21-Cookie

    1. Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).例如在某个网站上保存了用户名和密码,3个月内 ...

  5. pycharm中新建并且运行django

    1.对于Bottle框架其本身未实现类似于Tornado自己基于socket实现Web服务,所以必须依赖WSGI,默认Bottle已经实现并且支持的WSGI有: 帮助我们写socket的server. ...

  6. CentOS 7下安装pptp服务端手记 ok

    主要配置步骤 1. 安装前检查系统支持 2. 安装必要包 3. 修改相关配置文件 4. 设置开机自动启动 pptpd, iptables 5. iptables配置网络 6. 阿里云ECS可能还需要几 ...

  7. 【BZOJ2756】奇怪的游戏(二分,网络流)

    [BZOJ2756]奇怪的游戏(二分,网络流) 题面 BZOJ Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blink ...

  8. Linux内核分析4

    周子轩原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用库函数API和C代码 ...

  9. 升级系统后maxvim不能用,重新下载编译个

    1. 获取macvim源代码git clone https://github.com/b4winckler/macvim.git 2 配置及编译 编译选项 ./configure --with-fea ...

  10. scala(三)

    一.面向对象编程——类 1.定义一个简单的类 class HelloWorld { private var name = "leo" def sayHello() { print( ...