更新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详细步骤