mysql5.7就地升级到mysql8.0版本

2,225 阅读2分钟

将官网上下载下来的包上传到/usr/local下,本次升级一共三个包。 [本文中用到的软件包已经上传到百度网盘](链接:pan.baidu.com/s/1HDy8Aw5L… 提取码:13b4)

安装mysql5.7

设置主机名
[root@localhost ~]# hostnamectl set-hostname db01

编写/etc/hosts文件
[root@localhost ~]# vim /etc/hosts
把设置的主机名加上去

创建数据库管理用户
[root@localhost ~]# useradd mysql

创建数据和日志目录
[root@db01 ~ ]# mkdir -p /data/mysql/data_3306
[root@db01 ~ ]# mkdir -p /data/mysql/binlog_3306

解压mysql5.7软件
[root@db01 ~]# cd /usr/local/
[root@db01 local]# tar -xf  mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

制作软链接
[root@db01 local]# ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql57

环境变量设置
在文件末尾加上以下环境变量
Vim /etc/profile
export PATH=/usr/local/mysql57/bin:$PATH 
保存退出
使用[root@db01 local]# source /etc/profile使环境变量生效

执行mysql -V查看版本情况

权限设置
[root@db01 local]# chown -R mysql.mysql /data /usr/local/mysql*

初始化
[root@db01 local]# yum install -y libaio-devel 
[root@db01 local]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306

如果初始化遇到以下报错的话,就去安装yum -y install libaio libaio-devel这两个包,这是一个异步io的包,因为mysql大部分和磁盘的交互都是异步的。就是为了提高将来的性能,所以调度系统层面的一个异步io的方法。

启动数据库

在编辑/etc/my.cnf文件之前,要先卸载maridb,在centos7.3之后默认都会有maridb的配置文件存在于系统之中。
[root@db01 local]# yum remove -y mariadb-libs
(1) 配置文件
cat > /etc/my.cnf <<EOF 
[mysqld]
user=mysql
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
socket=/tmp/mysql.sock
server_id=6   #大多是在进行主从复制会用到的
log_bin=/data/mysql/binlog_3306
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF

(2)准备启动文件
[root@db01 local]# cd /usr/local/mysql57/support-files/
[root@db01 support-files]# ll
total 24
-rw-r--r--. 1 mysql mysql   773 Apr 13  2019 magic
-rwxr-xr-x. 1 mysql mysql  1061 Apr 13  2019 mysqld_multi.server
-rwxr-xr-x. 1 mysql mysql   894 Apr 13  2019 mysql-log-rotate
-rwxr-xr-x. 1 mysql mysql 10576 Apr 13  2019 mysql.server

[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 support-files]# chkconfig --add mysqld
[root@db01 support-files]# systemctl start mysqld

至此mysql5.7安装成功

升级到8.0版本

下载目标版本的mysqlsh,并解压创建软链接
[root@db01 local]# tar xf mysql-shell-8.0.18-linux-glibc2.12-x86-64bit.tar.gz
[root@db01 local]# ln -s mysql-shell-8.0.18-linux-glibc2.12-x86-64bit mysql-sh

修改环境变量
[root@db01 local]# vim /etc/profile
将刚才mysql5.7的环境变量修改为
#export PATH=/usr/local/mysql57/bin:/usr/local/mysql-sh/bin:$PATH
[root@db01 local]# source /etc/profile

使用mysqlsh检查原版本兼容情况 

(1) 在5.7 数据库授权用户
mysql> grant all on *.* to root@'192.168.59.%' identified by '123';

(2) 检查并处理不兼容的事项
[root@db01 local]# mysqlsh root:123@192.168.59.129:3306  -e "util.checkForServerUpgrade()" > /tmp/upgrade.log
至此就可以通过查看文件清楚有哪些不利于升级的条件。

(3)开始解压安装包准备升级
#cd /usr/local/
# tar xf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
#ln -s mysql-8.0.18-linux-glibc2.12-x86_64 mysql8
8017之后,是用高本版的软件去读取低版本的数据来完成升级
-- 1. 修改配置文件 
vim /etc/my.cnf
[mysqld]
user=mysql
#basedir=/usr/local/mysql57
basedir=/usr/local/mysql8
datadir=/data/mysql/data_3306
socket=/tmp/mysql.sock
server_id=6
log_bin=/data/mysql/binlog_3306
port=3306
[mysql]
socket=/tmp/mysql.sock

-- 2. 改环境变量 
vim /etc/profile
#export PATH=/usr/local/mysql57/bin:/usr/local/mysql-sh/bin:$PATH
export PATH=/usr/local/mysql8/bin:/usr/local/mysql-sh/bin:$PATH

source /etc/profile

(4)停止原来的数据库
#systemctl stop mysqld

(5)拷贝程序文件
# cd /usr/local/mysql8/support-files/
#cp mysql.server /etc/init.d/mysqld

(6)启动程序
#/etc/init.d/mysqld start

至此升级完成

注:在生产环境下请注意使用此方法,因为mysql8.17版本后默认是回退不了mysql5.7及之前的版本。生产环境下升级前要做好备份工作,默认采用的是数据迁移的操作。就地升级请慎重。