MySQL-5.6.34版本二进制升级5.7.20版本
MySQL升级的实质:
对数据字典的升级
数据字典有:mysql、information_schema、performance_schema、sys schema。
MySQL升级的两种方式:
in-place upgrade:
适合小版本的升级。
即 关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade.
特点:不改变数据文件,升级速度快;但,不可以跨操作系统,不可以跨大版本(5.5—>5.7).
logical upgrade:
适合不同操作系统的MySQL升级,大版本之间的升级。
即:使用mysqldump 或 mydumper 导入导出数据,实现版本的升级。
特点:可以跨操作系统,跨大版本;但,升级速度慢,容易出现乱码等问题。
升级前的准备:
提前做好备份。
了解新版本变更的信息(哪些不再兼容,不再支持哪些功能)
在官方网站的general information—>what is new in mysql 5.7
升级的注意事项:
确认新版本是否有重大变更
注意 SQL mode 的变化,比如:在MySQL5.7中发生了SQL mode的变化,对不再支持的SQL mode,部分SQL会跑不通。此时可以清空SQL mode,跑完之后在设置SQL mode。
升级成功后,确认业务SQL是否可以跑通
程序层是否都正常,有时原使用的程序语言部分内容不被支持新版本数据库。比如,有一次在5.1时用的是PHP4.0,但升级5.6,PHP的某些函数不被支持。
在升级完成之后,一定要在测试时使用和线上版本相同的程序,测试是否存在问题。
注意字符集的乱码问题
接下来是,使用in-place upgrade方式,将MySQL5.6升级到MySQL5.7。
快速二进制安装5.6.34版本MySQL
[root@mysql-upgrade ~]# yum -y install autoconf libaio
[root@mysql-upgrade ~]# wget http://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz
或者
[root@mysql-manager tools]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@mysql-upgrade ~]# tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
[root@mysql-upgrade ~]# mv /usr/local/mysql-5.6.34-linux-glibc2.5-x86_64/ /usr/local/mysql-5.6.34
[root@mysql-upgrade ~]# useradd -s /sbin/nologin mysql -M
[root@mysql-upgrade ~]# chown -R mysql.mysql /usr/local/mysql-5.6.34
[root@mysql-upgrade ~]# ln -s /usr/local/mysql-5.6.34 /usr/local/mysql
[root@mysql-upgrade ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql -basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysql-upgrade ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
[root@mysql-upgrade ~]# source /etc/profile
添加systemd管理
[root@mysql-upgrade ~]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
修改配置文件并启动
[root@mysql-upgrade ~]# vim /etc/my.cnf
[mysqld]
user=mysql
bind-address=0.0.0.0
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=1
[mysql]
socket=/tmp/mysql.sock
[root@mysql-upgrade ~]# systemctl start mysqld
检查当前MySQL版本
创建一个olda库
[root@mysql-upgrade ~]# mysql -e "create database olda charset utf8mb4;"
[root@mysql-upgrade ~]# mysql -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| olda |
| performance_schema |
| test |
+--------------------+
升级MySQL版本
下载并解压新版本包
[root@mysql-upgrade ~]# wget https://downloads.mysql.com/archives/get/file/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@mysql-upgrade ~]# tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@mysql-upgrade ~]# mv /usr/local/mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.20
停止5.6版本MySQL服务
[root@mysql-upgrade ~]# systemctl stop mysqld
删除mysql-5.6.34软连接
# 注意:尾部不要加/号,否者就是删除源目录下的数据,并不是删除软连接了
[root@mysql-upgrade ~]# rm -rf /usr/local/mysql
对mysql-5.7.20添加软连接
[root@mysql-upgrade ~]# ln -s /usr/local/mysql-5.7.20 /usr/local/mysql
拷贝数据路径与授权
[root@mysql-upgrade ~]# cp -a /usr/local/mysql-5.6.34/data /usr/local/mysql-5.7.20/
[root@mysql-upgrade ~]# chown -R mysql.mysql /usr/local/mysql-5.7.20
[mark_e]systemd管理配置与my.cnf配置文件都是写的软连接的路径,并不需要修改路径问题[/mark_e]
启动MySQL并更新系统库
[root@mysql-upgrade ~]# systemctl start mysqld
[root@mysql-upgrade ~]# mysql_upgrade
重启MySQL服务
[root@mysql-upgrade ~]# systemctl restart mysqld
检查MySQL版本与olda库
[root@mysql-upgrade ~]# mysql -e "select @@version;"
[root@mysql-upgrade ~]# mysql -e "show databases"
当前系统已经成功升级了MySQL版本!!!
MySQL-5.6.34版本二进制升级5.7.20版本相关教程