搜了一下,网上大部分都是MYSQL5.7升级到 8.0的,直接到8.4的,还不多,这里权当一个补充吧。
另外,5.7不能直接升级到8.4,需要先升级到8.0.X,然后再升级到8.4.X
下面是具体的安装及升级流程:
目录
1、5.7.42 安装
1.1 检查GLIBC版本
1.2 上传软件包
1.3 解压软件
1.4 创建mysql用户及组
1.5 安装依赖包
1.6 创建存放数据库的目录
1.7 给目录授权
1.8 MYSQL初始化
1.9 编辑MYSQL配置文件
1.10启动数据库
1.11修改root密码
1.12 设置远程连接
1.13 开机自启动
1.14 创建测试库
2、升级到MYSQL8.0.36
2.1 检查兼容性
2.2 备份5.7.42数据库
2.3 备份5.7.42参数文件
2.4 停数据库
2.5 备份5.7安装文件
2.6 冷备份5.7.42数据库
2.7 删除basedir文件
2.8 备份5.7.42启动文件
2.9 上传8.0.36安装包
2.10 解压安装包
2.11 拷贝文件到BASEDIR
2.12 修改权限
2.13 拷贝8.0.36 mysql.server到/etc/init.d/
2.14 注释 用于红帽的锁目录
2.15 升级
2.16 验证
2.17 把MYSQL加入PATH环境变量
3、升级8.0.36到8.4.2
3.1 升级前准备
3.1.1 备份8.0.36 数据库
3.1.2 干净的关闭数据库
3.1.3 冷备份8.0.36数据目录
3.1.4 备份8.0.36安装目录
3.1.5 备份8.0.36配置文件
3.2 8.0.36升级到8.4.2
3.2.1 解压8.4.2安装文件
3.2.2 删除8.0.36 的安装文件
3.2.3 拷贝8.4.2安装文件
3.2.4 修改权限
3.2.5 调整参数
3.2.6 拷贝 mysql.server 到/etc/init.d/mysql, 并注释用于红帽的锁目录
3.2.7 升级到8.4.2
验证
1、5.7.42 安装
1.1 检查GLIBC版本
[root@sztech home]# ldd --version
ldd (GNU libc) 2.17
1.2 上传软件包
sftp> cd /data/setup/mysql
sftp> lcd C:\soft\mysql
sftp> put mysql-5.7.42-el7-x86_64.tar.gz
Uploading mysql-5.7.42-el7-x86_64.tar.gz to /data/setup/mysql/ mysql-5.7.42-el7-x86_64.tar.gz
100% 696203KB 139240KB/s 00:00:05
sftp>
1.3 解压软件
[root@sztech setup]# cp mysql-5.7.42-el7-x86_64.tar.gz /usr/local/mysql
[root@sztech mysql]# ll
[root@sztech setup]# cd /usr/local/mysql
[root@sztech mysql]# tar -zxvf mysql-5.7.42-el7-x86_64.tar.gz
重命名一下改为
[root@sztech mysql]# ll
total 728568
drwxr-xr-x. 9 root root 129 Sep 1 22:02 mysql-5.7.42-el7-x86_64
-rw-r--r--. 1 root root 746050963 Sep 1 22:00 mysql-5.7.42-el7-x86_64.tar.gz
[root@sztech mysql]# mv mysql-5.7.42-el7-x86_64 mysql-5.7.42
[root@sztech mysql]# ll
total 728568
drwxr-xr-x. 9 root root 129 Sep 1 22:02 mysql-5.7.42
-rw-r--r--. 1 root root 746050963 Sep 1 22:00 mysql-5.7.42-el7-x86_64.tar.gz
[root@sztech mysql]#
1.4 创建mysql用户及组
#创建mysql用户组
[root@sztech mysql] groupadd mysql
#创建mysql用户并加入到mysql组
[root@sztech mysql] useradd -r -g mysql mysql
[root@sztech mysql]#echo “mysql” | passwd --stdin mysql
1.5 安装依赖包
如果没有,就安装。
yum install libaio
1.6 创建存放数据库的目录
mkdir -p /data/mysql
1.7 给目录授权
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
chown -R mysql:mysql /data/mysql
chmod -R 775 /data/mysql
1.8 MYSQL初始化
[root@sztech mysql-5.7.42]# pwd
/usr/local/mysql/mysql-5.7.42
[root@sztech mysql-5.7.42]#
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/
--datadir=/data/mysql
1.9 编辑MYSQL配置文件
vi /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
character_set_server=utf8
[mysql]
socket=/tmp/mysql.sock
lower_case_table_names:是否区分大小写,1表示存储时表名为小写,操作时不区分大小写;0表示区分大小写;不能动态设置,修改后,必须重启才能生效。
character_set_server:设置数据库默认字符集,如果不设置默认为latin1
innodb_file_per_table:是否将每个表的数据单独存储,1表示单独存储;0表示关闭独立表空间,可以通过查看数据目录,查看文件结构的区别。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个配置表示启用了两种特定的 SQL 模式:其中,no_engine_substitution表示禁止自动替换存储引擎,strict_trans_tables表示启用严格的事务表模式。
1.10启动数据库
[root@sztech ~]# cd /usr/local/mysql/support-files/
[root@sztech support-files]# ll
total 24
-rwxr-xr-x. 1 mysql mysql 773 Dec 10 2020 magic
-rwxr-xr-x. 1 mysql mysql 1061 Dec 10 2020 mysqld_multi.server
-rwxr-xr-x. 1 mysql mysql 894 Dec 10 2020 mysql-log-rotate
-rwxr-xr-x. 1 mysql mysql 10576 Dec 10 2020 mysql.server
[root@sztech support-files]# ./mysql.server start
Starting MySQL. SUCCESS!
1.11修改root密码
[root@sztech support-files]# cd /usr/local/mysql/bin
[root@sztech bin]# ./mysql -uroot -p
mysql>
mysql> set password for root@localhost = password('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
1.12 设置远程连接
mysql -u root -p
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
1.13 开机自启动
将服务文件拷贝到init.d下,并重命名为mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
#赋予可执行权限
chmod +x /etc/init.d/mysql
#添加服务
chkconfig --add mysql
#显示服务列表
chkconfig --list
附上服务相关命令
[root@sztech bin]# service mysql status
SUCCESS! MySQL running (87175)
查看状态:service mysql status
重启:service mysql restart
启动:service mysql start
停止:service mysql stop
1.14 创建测试库
CREATE DATABASE IF NOT EXISTS example_db;
USE example_db;
CREATE TABLE IF NOT EXISTS users (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> INSERT INTO users (name, email) VALUES
-> ('张三', 'zhangsan@example.com'),
-> ('李四', 'lisi@example.com'),
-> ('王五', 'wangwu@example.com');
Select * from users;
2、升级到MYSQL8.0.36
2.1 检查兼容性
2.1.1 安装MYSQL-SHELL
sftp> put mysql-shell-8.0.36-1.el7.x86_64.rpm
[root@sztech setup]# rpm -Uvh mysql-shell-8.0.36-1.el7.x86_64.rpm --force --nodeps
[root@sztech setup]#
[root@sztech setup]# mysqlsh --version
mysqlsh Ver 8.0.36 for Linux on x86_64 - for MySQL 8.0.36 (MySQL Community Server (GPL))
[root@sztech setup]#
2.1.2 检查该版本是否可以升级到MySQL 8.0.36
[root@sztech setup]# mysqlsh -uroot -p -S /tmp/mysql.sock -e "util.checkForServerUpgrade()"
2.2 备份5.7.42数据库
[root@sztech ~]# mysqldump -uhjroot -p --socket=/tmp/mysql.sock --all-databases > /data/upgrade_bak/all_databases_backup_5742.sql
2.3 备份5.7.42参数文件
[root@sztech etc]# cp /etc/my.cnf /data/upgrade_bak/my.cnf_5742
2.4 停数据库
[root@sztech setup]# service mysql status
SUCCESS! MySQL running (87175)
[root@sztech setup]# service mysql stop
Shutting down MySQL.. SUCCESS!
2.5 备份5.7安装文件
[root@sztech mysql]# mkdir /data/upgrade_bak/
[root@sztech mysql]# tar -cvzf /data/upgrade_bak/5742_base.tar.gz /usr/local/mysql
2.6 冷备份5.7.42数据库
[root@sztech mysql]# tar -cvzf /data/upgrade_bak/5742_data.tar.gz /data/mysql
2.7 删除basedir文件
[root@sztech mysql-5.7.42] cd /usr/local/mysql
[root@sztech mysql-5.7.42]# rm -rf bin
[root@sztech mysql-5.7.42]# rm -rf docs
[root@sztech mysql-5.7.42]# rm -rf include
[root@sztech mysql-5.7.42]# rm -rf lib
[root@sztech mysql-5.7.42]# rm -rf README
[root@sztech mysql-5.7.42]# rm -rf man
[root@sztech mysql-5.7.42]# rm -rf share
[root@sztech mysql-5.7.42]# rm -rf support-files
2.8 备份5.7.42启动文件
[root@sztech init.d]# cp /etc/init.d/mysql /data/upgrade_bak/mysql_5.7.42
2.9 上传8.0.36安装包
/data/setup/mysql/mysql-8.0.36-linux-glibc2.17-x86_64.tar
2.10 解压安装包
[root@sztech setup]# tar -xvf mysql-8.0.36-linux-glibc2.17-x86_64.tar
2.11 拷贝文件到BASEDIR
[root@sztech]# cp -av /data/setup/mysql/mysql-8.0.36-linux-glibc2.17-x86_64/* /usr/local/mysql/.
2.12 修改权限
[root@sztech mysql]# chown -R mysql:mysql /usr/local/mysql
[root@sztech mysql]# ll
total 296
drwxr-xr-x. 2 mysql mysql 4096 Dec 13 2023 bin
drwxr-xr-x. 6 mysql mysql 4096 Sep 3 09:51 data
drwxr-xr-x. 2 mysql mysql 38 Dec 13 2023 docs
drwxr-xr-x. 3 mysql mysql 4096 Dec 13 2023 include
drwxr-xr-x. 6 mysql mysql 201 Dec 13 2023 lib
-rw-r--r--. 1 mysql mysql 279356 Dec 13 2023 LICENSE
drwxr-xr-x. 4 mysql mysql 30 Dec 13 2023 man
-rw-r--r--. 1 mysql mysql 666 Dec 13 2023 README
drwxr-xr-x. 28 mysql mysql 4096 Dec 13 2023 share
drwxr-xr-x. 2 mysql mysql 77 Dec 13 2023 support-files
2.13 拷贝8.0.36 mysql.server到/etc/init.d/
[root@sztech support-files]# cp mysql.server /etc/init.d/mysql
2.14 注释 用于红帽的锁目录
修改/etc/init.d/mysql
2.15 升级
[root@sztech init.d]# cd /usr/local/mysql/bin
[root@sztech bin]# ./mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE
2.16 验证
[root@sztech bin]# ./mysql -uhjroot -p
Enter password:
mysql> show databases;
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.36 |
+-----------+
1 row in set (0.00 sec)
2.17 把MYSQL加入PATH环境变量
[root@sztech bin]# source /etc/profile
。。。
export PATH=/usr/local/mysql/bin:%PATH
source /etc/profile
[root@sztech bin]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
3、升级8.0.36到8.4.2
3.1 升级前准备
3.1.1 备份8.0.36 数据库
[root@sztech bin]# mysqldump -uroot -p --socket=/tmp/mysql.sock --all-databases > /data/upgrade_bak/all_databases_backup_8036.sql
3.1.2 干净的关闭数据库
[root@sztech bin]# ./mysql -uroot -p
Enter password:
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.01 sec)
mysql> shutdown;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
--确认已经没有进程
[root@sztech bin]# ps -ef | grep mysqld
root 113227 111745 0 13:23 pts/0 00:00:00 grep --color=auto mysqld
3.1.3 冷备份8.0.36数据目录
# tar -cvzf /data/upgrade_bak/8.0.36_data.tar.gz /data/mysql/
3.1.4 备份8.0.36安装目录
# tar -cvzf /data/upgrade_bak/8.0.36_base.tar.gz /usr/local/mysql
3.1.5 备份8.0.36配置文件
# cp /etc/my.cnf /data/upgrade_bak/8.0.36_my.cnf
3.2 8.0.36升级到8.4.2
3.2.1 解压8.4.2安装文件
tar -xvf mysql-test-8.4.2-linux-glibc2.17-x86_64.tar.xz
3.2.2 删除8.0.36 的安装文件
rm -fr /usr/local/mysql/*
3.2.3 拷贝8.4.2安装文件
# cp -av /data/setup/mysql/mysql-8.4.2-linux-glibc2.17-x86_64/* /usr/local/mysql/.
3.2.4 修改权限
# chown -R mysql: /usr/local/mysql
3.2.5 调整参数
8.4.2 部分参数已经去掉,默认情况下不再启用已弃用的 mysql_native_password 身份验证插件
vim /etc/my.cnf
…
mysql_native_password=on
…
3.2.6 拷贝 mysql.server 到/etc/init.d/mysql, 并注释用于红帽的锁目录
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql
…
# lockdir=
# lock_file_path=
…
3.2.7 升级到8.4.2
root@sztech bin]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE
验证
[root@sztech bin]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.2 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.4.2 |
+-----------+
1 row in set (0.01 sec)
4.联系我们
如果你还想和我交流,可以按如下方式找到我们。
----------------------------------------------------------------------
微信群:水煮数据库
主要交流日常运维中用到的数据库相关问题,包含但不限于:ORACLE,PG,MYSQL,SQLSERVER,OB,TIDB,达梦,TDSQL,OPENGAUSS,人大金仓,GBASE等等,
加我微信:zq24803366,备注:水煮数据库, 我拉你入群。
----------------------------------------------------------------------