热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多提宝贵地意见,我们一起提升,守住自己的饭碗。
一、前言
数据库版本 | 操作系统版本 |
---|---|
5.7.35 | CentOS Linux release 7.9.2009 |
8.0.37 | CentOS Linux release 7.9.2009 |
二、升级方法
三、升级前准备
使用MySQL Shell工具检查兼容性
[root@localhost ~]# tar -xf mysql-shell-8.0.37-linux-glibc2.12-x86-64bit.tar.gz
[root@localhost ~]# cd mysql-shell-8.0.37-linux-glibc2.12-x86-64bit/bin
[root@localhost bin]# ./mysqlsh -uroot -p -S tmp/mysql.sock -e "util.checkForServerUpgrade()" > util.checkForServerUpgrade.log复制
[root@localhost bin]# cat util.checkForServerUpgrade.log
复制
备份mysql数据
[root@localhost bin]# usr/local/mysql/bin/mysqldump -uroot -p --routines --set-gtid-purged=OFF -A > root/all-database-20241017.sql
复制
停止数据库
mysql>select version();
mysql>show variables like 'innodb_fast_shutdown';
mysql>set global innodb_fast_shutdown=0; # 确保数据都刷到硬盘上,更改成0InnoDB关闭模式。如果值为0,InnoDB会在关闭前进行缓慢关闭、完全清除和更改缓冲区合并。如果值为1(默认值),InnoDB会在关闭时跳过这些操作,这个过程称为快速关闭。如果值为2,InnoDB刷新其日志并冷关机,就好像MySQL崩溃了;没有提交的事务丢失,但崩溃恢复操作使下一次启动需要更长的时间。在仍然缓冲大量数据的极端情况下,缓慢关闭可能需要几分钟甚至几小时。
mysql>shutdown;
mysql>exit
[root@localhost ~]# ps -ef|grep mysql复制
备份相关的数据目录
[root@localhost ~]# cp -r data/mysql data/mysql_bak_`date +%F`
[root@localhost ~]# cp -r usr/local/mysql/ usr/local/mysql_bak_`date +%F`
[root@localhost ~]# cp etc/my.cnf etc/my.cnf_`date +%F`复制
下载MySQL8并上传解压
[root@localhost local]# tar -xvf mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz
[root@localhost local]# mv mysql-8.0.37-linux-glibc2.12-x86_64 mysql8
[root@localhost local]# chown -Rf mysql:mysql usr/local/mysql8复制
四、升级
修改my.cnf 配置文件
[root@localhost local]# vi etc/my.cnf
新增以下内容:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
basedir=/usr/local/mysql8
default_authentication_plugin=mysql_native_password
default-storage-engine=INNODB复制
执行升级程序(核心步骤)
[root@localhost local]# usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE #会一直卡住
复制
[root@localhost data]# tail -100f data/mysql/mysql.err
复制
重新登录验证
[root@localhost ~]# mysql -uroot -p123456
mysql> select version();
mysql> show databases;复制
修改mysql环境变量
[root@localhost bin]# vi etc/profile
添加以下内容:
export PATH=$PATH:/usr/local/mysql8/bin:/usr/local/mysql8/lib
[root@localhost bin]# source etc/profile复制
[root@localhost ~]# which mysql
[root@localhost ~]# mysql -V复制
验证数据
mysql> show databases;
mysql> use test;
mysql> show tables;
mysql> select count(*) from users;复制
[root@localhost ~]# vi etc/my.cnf
修改为MySQL8的默认编码,注释5.7的。
character-set-server=utf8mb4
collation-server = utf8mb4_unicode_ci复制
新增数据,进行测试
mysql> create database zhh;
mysql> use zhh;
mysql> CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
email VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
mysql>DELIMITER
CREATE PROCEDURE InsertMockData()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 1000 DO -- 假设需要插入1000条数据
INSERT INTO Users (username, email)
VALUES (CONCAT('user', i), CONCAT('user', i, '@example.com'));
SET i = i + 1;
END WHILE;
END
DELIMITER ;
mysql> CALL InsertMockData();
mysql> select * from Users;复制
五、问题及经验总结
问题一
问题二
问题三
[mysqld]
新增以下内容:
innodb_force_recovery = N
复制
MySQL部分历史文章合计:
文中的概念来源于互联网,如有侵权,请联系我删除。
欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。
文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2034次阅读
2025-04-09 15:33:27
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
1634次阅读
2025-04-25 18:53:11
2025年3月国产数据库大事记
墨天轮编辑部
910次阅读
2025-04-03 15:21:16
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
858次阅读
2025-04-27 16:53:22
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
623次阅读
2025-04-25 15:30:58
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
623次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
515次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
502次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
486次阅读
2025-04-14 09:40:20
墨天轮个人数说知识点合集
JiekeXu
462次阅读
2025-04-01 15:56:03