MySQL5.7升级至MySQL8.0详细步骤

更新Nextcoud版本时,后台提示“Nextcloud 21将不再支持这个版本,需要 MySQL 8 或更高版本”,在确认Wordpress也是支持Mysql8的之后,好吧,又开始折腾了。

安装前的准备工作

查看当前已安装的版本:

yum list installed | grep mysql
# MySQL5
mysql --help | grep -i distrip
# MySQL8
mysql -V
mysql --version

方法一 在线安装方案

配置MySQL8的yum源,访问MySQL网站,选择对应的版本下载至/etc/yum.repos.d/,或者编辑/etc/yum.repos.d/mysql-community.repo

[mysql80-community]
name=MySQL 8.0 Community Server
# Redhat7/CentOS7的yum源
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

方法二 离线安装方案

如果主机与MySQL连接速度不那么美好,访问MySQL网站,选择对应的rpm包并下载,推荐“RPM Bundle”打包版,或者参考Linux离线安装MySQL5.7及基本优化

RPM Bundle 包含以下文件:

  • mysql-community-client-8.0.25-1.el8.x86_64.rpm
  • mysql-community-libs-8.0.25-1.el8.x86_64.rpm
  • mysql-community-client-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-libs-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-client-plugins-8.0.25-1.el8.x86_64.rpm
  • mysql-community-server-8.0.25-1.el8.x86_64.rpm
  • mysql-community-client-plugins-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-server-debug-8.0.25-1.el8.x86_64.rpm
  • mysql-community-common-8.0.25-1.el8.x86_64.rpm
  • mysql-community-server-debug-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-server-debuginfo-8.0.25-1.el8.x86_64.rpm
  • mysql-community-debugsource-8.0.25-1.el8.x86_64.rpm
  • mysql-community-test-8.0.25-1.el8.x86_64.rpm
  • mysql-community-devel-8.0.25-1.el8.x86_64.rpm
  • mysql-community-test-debuginfo-8.0.25-1.el8.x86_64.rpm

0x01 备份数据库

停应用,停数据库,并开始备份。

# 停应用服务器上的nginx
systemctl stop nginx
# 备份mysql配置文件
cp /etc/my.cnf /opt/backup/my57.cnf
# 备份mysql数据目录
cd /var/lib
tar cvzf /opt/backup/mysql.tar.gz mysql

MySQL8默认字符集是utf8mb4,而MySQL5是utf8,所以导出的数据需要指定为新的字符集。

# 导出mysql表结构
mysqldump -uroot -p --no-data --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases db_name > /opt/backup/db_name.sql
# 导出mysql数据
mysqldump -uroot -p --no-create-info --master-data=2 --flush-logs --routines --events --triggers --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases db_name > /opt/backup/db_name_data.sql
# 备份并修改数据库文件
cp db_name.sql db_name_utf8mb4.sql
vim db_name_utf8mb4.sql
# 执行底部命令行替换字符集,如果已经是utf8mb4就千万别再重复操作了
:%s/utf8/utf8mb4/g

0x02 卸载MySQL5.7

执行以下命令删除数据库服务器上旧版MySQL:

# 停止mysql服务
systemctl stop mysqld
# 卸载旧版mysql
yum -y remove mysql-community-*
# 删除mysql目录
rm -rf /var/lib/mysql/

0x03 安装MySQL8.0

方法一 在线安装

yum clean all
yum makecache
yum install mysql-community-server

方法二 离线安装

# 解压 RPM Bundle 包
tar -xvf mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar
# 开始安装
yum install mysql-community-{common,client-plugins,libs,client,server}-8*

0x04 配置MySQL8.0

修改配置/etc/my.cnf

# 连接建立时执行设置的语句,对root用户无效
init_connect='SET NAMES utf8mb4'
# 设置服务端校验规则,若字符串需要区分大小写则为utf8mb4_bin
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 忽略应用连接自己设置的字符编码,保持与全局设置一致
skip-character-set-client-handshake

初始化数据库

systemctl start mysqld
# 在日志中找到默认密码
grep "temporary password" /var/log/mysqld.log
# 初始化数据库
mysql_secure_installation
# 登录数据库
mysql -uroot -p

检查字符集等

执行以下SQL语句检查当前字符集:

show variables like '%char%set%';
show variables like '%collation%';
show variables like '%log_bin%';

0x05 恢复数据

创建数据库

MySQL8开始,授权操作和用户操作必须分开,即创建用户的时候不能授权:

CREATE DATABASE db_name;
CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123';
# 修改密码时使用
# ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123';
GRANT ALL PRIVILEGES ON db_name.* TO 'user_name'@'localhost';
FLUSH PRIVILEGES;
EXIT

导入表结构和数据

mysql -uroot -p db_name < /opt/backup/db_name_utf8mb4.sql
mysql -uroot -p db_name < /opt/backup/db_name_data.sql

0x06 恢复应用

回到应用服务器,启动nginx:

systemctl start nginx

附加知识:常见问题说明

1、通过rpm安装,不能指定basedir。

2、初始化mysql时如果报错,再次初始化前要删除datadir中的文件。

3、自MySQL8开始,移除了以下配置选项:

  • innodb_file_format
  • innodb_file_format_check
  • innodb_file_format_max
  • innodb_large_prefix

原创文章禁止转载:技术学堂 » MySQL5.7升级至MySQL8.0详细步骤

精彩评论

9+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏