MYSQL版本升级-8.0.21-8.0.30

   一直以来,MySQL版本升级依赖额外的工具 mysql_upgrade ,但是从 MySQL 8.0.16 开始,mysql_upgrade 工具将被废弃,取而代之的是MySQL 8.0 新的版本升级方式,升级功能集成到MySQL Server的进程mysqld中,不再依赖额外的外部工具。

1 升级流程

  1. 设置innodb_fast_shutodwn参数并备份数据库。
  2. 备份mysql数据
    mysqldump -uroot -p --add-drop-table --routines --events --all-databases --force >/home/4atb/data-for-upgrade.sql
  3. 关闭MySQL Server,
  4. 安装新版本二进制软件包
  5. 将新的HOME下support-files/mysql.server拷贝到 /etc/init.d/mysqld
  6. service mysqld status
  7. 使用新版本软件包启动MySQL Server,此时Server会自动升级 数据字典表。运行mysql_upgrade 工具,升级系统表和用户表。
  8. 重启MySQL Server,接受业务流量。

1 查看启动方式

首先确定mysql 是如何启动的.

我们发现 ps -ef|grep mysqld一般都是有两个进程的

1 MYSQL_HOME/bin/mysqld --defaults --basedir=................

2 MYSQL_HOME/bin/mysql_safe --defaults --basedir -- datadir...............................

1)、查看进程信息

[greatsql@greatsql-1 ~]$ ps axj |head -1;ps axj |grep 4306 |grep -v grep

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 1 15195 15195 15195 ? -1 Ss 986 0:00 /bin/sh /greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql4306.cnf

15195 16613 15195 15195 ? -1 Sl 986 0:06 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql4306.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/data4306/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --log-error=/greatsql/logs/error4306.log --open-files-limit=65535 --pid-file=/greatsql/dbdata/data4306/data/mysql.pid --socket=/greatsql/dbdata/data4306/data/mysql.sock --port=4306

mysqld_safe 是 mysqld 的父进程

  • mysqld_safe 进程和 mysqld 进程是父子进程关系
  • systemd 服务启动,kill 父进程 (会话首进程),会导致子进程也退出
  • mysqld_safe 命令启动,kill 父进程 (非会话首进程),不会导致子进程退出;重新启动父进程,报错子进程已存在
  • 可以使用 mysqld_safe 命令启动 + 改造 mysqld_safe 脚本,实现【启、停 mysqld_safe 进程,不会影响 mysqld 进程】。此时不要混合使用 systemd 启动数据库,需要维护这个特殊的 mysqld_safe

1 systemctl status mysqld

2 service mysqld restart

3 /bin/mysqld_safe --defaults-file=/conf/greatsql4306.cnf & mysql_safe启动

实际  

3  /etc/init.d/mysqld start 

2)#/usr/local/mysql/bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data & 启动mysql服务

#netstat -anpt | grep mysqld

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1180/mysqld

ps -ef | grep mysqld

root 906 19026 0 21:32 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data

mysql 1180 906 0 21:32 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/vm1.test.com.err --pid-file=/data/vm1.test.com.pid --socket=/tmp/mysql.sock --port=3306

2设置参数

登录到数据库设置innodb_fast_shutdown到0。可以使用SET GLOBAL进行动态更改,

设置为0:会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度也是最慢的,此时数据完整性能得到最大保障

设置为1:关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘

设置为2:不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘,但是会刷新到redo log里面,再下次启动mysql的时候恢复

mysql -uroot -p    # 登录数据库
SET GLOBAL innodb_fast_shutdown=0;    # 设置innodb_fast_shutdown
SHOW GLOBAL VARIABLES LIKE '%innodb_fast_shutdown%';    

# 查看innodb_fast_shutdown

3 对于小数据库 进行备份

2 升级总结

1 对于大部分的socket文件 pid文件,以及日志文件默认datadir目录中,于是方便basedir的更换升级。

2 把对应的basedir完全孤立,是非常明智的选择,对于数据库版本升级有很大的帮助,以前的版本可以更简化的进行删除。

3 在mysql数据库部署中前期规划时 mysql的 basedir与datadir最好进行分离,方便之后进程版本升级

默认条件下  pid文件,binglog文件,errlog文件 sock文件 slow log文件都默认在data的目录中  datadir

--pid-file

--log-error

--pid-file

--plugin-dir=MYSQL_HOME/lib/plugin/

4 记得将新软件的support-files/mysql.server 拷贝到/etc/init.d/mysqld文件 

service mysqld status

systemctl status mysqld.servic

#basedir/bin/mysqld_safe --user=root & 

[eoms@CaaS-node3 data]$ ps -ef|grep mysql
eoms      7002     1  0 16:03 pts/3    00:00:00 /bin/sh /data/cbg/mysql-8.0.30/bin/mysqld_safe --datadir=/data/cbg/mysql-8.0.28/data --pid-file=/data/cbg/mysql-8.0.28/data/mysqltest.pid
eoms      8515  7002 29 16:03 pts/3    00:00:49 /data/cbg/mysql-8.0.30/bin/mysqld --basedir=/data/cbg/mysql-8.0.30 --datadir=/data/cbg/mysql-8.0.28/data --plugin-dir=/data/cbg/mysql-8.0.30/lib/plugin --log-error=/data/cbg/mysql-
8.0.28/data/error.log --open-files-limit=65535 --pid-file=/data/cbg/mysql-8.0.28/data/mysqltest.pid --socket=/data/cbg/mysql-8.0.28/data/mysql.sock --port=22306

eoms      8996 23754  0 16:06 pts/3    00:00:00 grep --color=auto mysql
[eoms@CaaS-node3 data]$ 

1 用eoms用户安装的mysql,
2 用root用户 使用systemctl start mysqld 报错,使用service mysqld start可以启动
3 启动的mysql停止了服务,看错误日志显示有
2022-09-20T16:01:13.951030+08:00 0 [ERROR] [MY-000067] [Server] unknown variable 'myisam_repair_threads=1'.
2022-09-20T16:01:13.951122+08:00 0 [ERROR] [MY-010119] [Server] Aborting


将参数从配置文件删除以后就好了。

3 8.0升级的便利

这样的升级方式变更带来了哪些好处?

升级速度更快升级过程更简单升级过程更安全显著减少升级步骤,更容易自动化不需要重新启动MySQL Server即插即用8.0.16之前老的版本升级过程。

8.0.16 版本新的升级过程:

关闭MySQL Server,安装新版本二进制软件包使用新版本软件包启动MySQL Server,此时Server会自动检查并执行第一步升级操作,升级数据字典表。在第一步升级完成之后,Server分析系统表和用户表是否需要升级,如果指定了升级选项 upgrade (后面会详细介绍)为AUTO或者FORCE,Server将会执行第二步升级操作,对系统表和用户表进行升级,如果第二步不需要升级,Server将会跳过第二步。相比于之前的升级方式,整个过程由2步变成了1步,不需要额外的升级工具,降低了升级耗时。

新的Server选项, --upgrade

可能的取值为: NONE, AUTO, MINIMAL, FORCE,默认值为AUTO

NONE Server启动时不会执行任何的升级动作,如果发现版本不对,Server将会异常退出。这个选项只能在明确知道Server的版本与之前的版本一致时,才可以使用。AUTO 是默认选项,Server启动时会尝试升级数据字典表和用户表。如果发现不需要升级,会自动忽略升级过程。MINIMAL Server启动时仅仅尝试执行数据字典的升级,其他的系统表、用户表等,不会进行升级。这个选项和之前老的升级方式相同,必须再次使用mysql_upgrade 工具执行剩下的升级过程。然后需要再次重启Server。FORCE Server启动时强制执行升级过程,不管是否已经升级过。这个行为与之前 mysql_upgrade --force 相似。最后,如果用户对老的升级方式念念不忘,想要与之前的升级方式保持一致,只要在启动Server时,加选项 --upgrade=MINIMAL 就可以了。
-----------------------------------
©著作权归作者所有:来自51CTO博客作者wx5caecf2ed0645的原创作品,请联系作者获取转载授权,否则将追究法律责任
MySQL 8.0 新的版本升级方式
https://blog.51cto.com/u_14286115/3323742

mysql-8.0.21-el7-x86_64.tar.gz 是MySQL数据库的一个压缩包文件。其中的8.0.21代表MySQL的版本号,el7表示适用于CentOS/RHEL 7操作系统,x86_64表示适用于64位的x86架构。 MySQL是一种开源的关系型数据库管理系统,广泛用于Web应用的后端开发中。它具有高性能、稳定可靠以及灵活的特点。 通过下载mysql-8.0.21-el7-x86_64.tar.gz文件,可以在CentOS/RHEL 7操作系统上安装MySQL数据库。具体安装步骤如下: 1. 解压缩文件:可以使用命令 `tar -zxvf mysql-8.0.21-el7-x86_64.tar.gz` 解压缩文件。 2. 创建MySQL用户与用户组:可以使用 `groupadd mysql` 命令创建一个名为mysql的用户组,然后使用 `useradd -r -g mysql -s /bin/false mysql` 命令创建一个名为mysql的系统用户。 3. 移动文件:将解压得到的mysql-8.0.21-el7-x86_64文件夹移动到目标安装位置,例如 `/usr/local/mysql`。 4. 设置MySQL的用户与文件权限:可以使用 `chown -R mysql:mysql /usr/local/mysql` 设置MySQL文件夹的拥有者和用户组为mysql用户。 5. 初始化MySQL数据库:进入MySQL文件夹执行 `./bin/mysqld --initialize --user=mysql` 进行初始化操作。 6. 启动MySQL服务:执行 `./bin/mysqld_safe --user=mysql &` 启动MySQL服务。 7. 配置MySQL环境变量:将MySQL的bin目录路径添加至系统PATH环境变量中,以便可以直接在命令行中使用mysql命令。 通过以上步骤,就可以安装MySQL-8.0.21版本,并在CentOS/RHEL 7上使用MySQL进行数据库相关的操作与开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值