搜了一下,网上大部分都是MYSQL5.7升级到 8.0的,直接到8.4的,还不多,这里权当一个补充吧。
另外,5.7不能直接升级到8.4,需要先升级到8.0.X,然后再升级到8.4.X
下面是具体的安装及升级流程:
目录
2.13 拷贝8.0.36 mysql.server到/etc/init.d/
3.2.6 拷贝 mysql.server 到/etc/init.d/mysql, 并注释用于红帽的锁目录
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,备注:水煮数据库, 我拉你入群。
----------------------------------------------------------------------
1512

被折叠的 条评论
为什么被折叠?



