MySQL升级5.7.28到5.7.44以及8.0.22到8.0.35

MYSQL 的升级

MySQL升级5.7.22-5.7.44

属于MySQL的小版本升级

升级前检查

  1. 检查mysql的启动方式
ps -ef|grep mysqld
  1. 检查MySQL的安装路径以及数据文件路径
whereis mysql
 mysql> show variables like '%dir%';
+-----------------------------------------+----------------------------+
| Variable_name                           | Value                      |
+-----------------------------------------+----------------------------+
| basedir                                 | /usr/                      |
| binlog_direct_non_transactional_updates | OFF                        |
| character_sets_dir                      | /usr/share/mysql/charsets/ |
| datadir                                 | /appdata/mysql/            |
| ignore_db_dirs                          |                            |
| innodb_data_home_dir                    |                            |
| innodb_log_group_home_dir               | ./                         |
| innodb_max_dirty_pages_pct              | 75.000000                  |
| innodb_max_dirty_pages_pct_lwm          | 0.000000                   |
| innodb_tmpdir                           |                            |
| innodb_undo_directory                   | ./                         |
| lc_messages_dir                         | /usr/share/mysql/          |
| plugin_dir                              | /usr/lib64/mysql/plugin/   |
| slave_load_tmpdir                       | /tmp   
  1. 检查使用的my.cnf文件以及路径
# : find / -name my.cnf
#datadir=/var/lib/mysql
datadir=/appdata/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/appdata/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#wait_timeout=31536000

升级步骤

1、关闭当前mysql

systemctl stop mysqld
或者
service stop mysql

2、下载软件包并解压替换(下载包之前检查版本不要下错)

rpm -qa|grep glibc
[root@CNDCKIBANA ~]# rpm -qa|grep glibc
glibc-headers-2.17-326.el7_9.x86_64
glibc-2.17-326.el7_9.x86_64
glibc-common-2.17-326.el7_9.x86_64
glibc-2.17-326.el7_9.i686

下载版本:mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

这里注意:
有时候下载的压缩包为:*.tar.xz
此时需要使用tar -xvJf *.tar.xz去解压

   tar -xzvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /tmp/ --解压到tmp目录下,用root用户解压
   mv /tmp/mysql-5.7.43-linux-glibc2.12-x86_64 /tmp/mysql_server --更改名称
   cp /data/mysql_server/my.cnf查到 /tmp/mysql_server	--将使用的my.cnf转移,有时候使用的是默认目录下的,需要视情况而定,默认情况下在/etc/my.cnf
   mv /data/mysql_server /data/mysql_server_32 --将原来的mysql更名放置
   mv /tmp/mysql_server /data/ --把最新的MySQL放置
   (这里也需要将数据data备份,以防万一)

这里也可以使用在my.cnf中指定新的mysql可执行文件目录即可,不用替换到原来的位置,灵活使用。
注意:data目录一定是mysql:mysql的权限,否则没办法使用

3、使用新的mysql可执行文件目录启动MySQL

 mysqld_safe --user=mysql --socket=/data/mysql_log/mysql.sock --skip-grant-tables --datadir=/data/mysql_data  --basedir=/data/ &

4、检查所有表是否与当前版本兼容,并更新系统库

 mysql_upgrade -uroot -p -S /data/mysql_log/mysql.sock

最后如果输出Upgrade process completed successfully那么就表示升级成功了

mysql8.0.16版本之后不再使用mysql_upgrade,
在 mysqld 额外添加了一个新的选项 --upgrade。可选值为 NONE,AUTO,MINIMAL,FORCE。
姿势是这样的:
/usr/local/mysql/bin/mysqld --upgrade=NONE
新的选项都代表什么?
NONE:不尝试进行升级
AUTO:默认选项,MySQL 进行数据字典升级和服务升级
MINIMAL:仅升级数据字典
FORCE:强制升级,类似旧的 mysql_upgrade –force
mysql8.0.16之后的升级步骤说明

5、重启,确保对系统表所做的变更得以生效

  mysqladmin -u root -p -S /data/mysql_log/mysql.sock shutdown
  systemctl start mysqld

6、查看mysql版本

sql>show variables like '%version%'

出现的问题:

1、误转移了/usr/bin文件,之后使用不了linux的命令,当时将bin转移到了另一个目录下/mysql

ls /mysql/bin/  --查看了这个bin下的所有命令
/mysql/bin/cp /mysql/bin  /usr/  --将命令cp回去即可

2、使用mysqld_safe命令升级之后,并upgrade成功,但是版本号依旧没有改变,还是原来的版本号

[root@CNDCGITLABP01 mysql]# ls /lib/systemd/system/mysqld
mysqld.service   mysqld@.service

[root@CNDCGITLABP01 mysql]# pwd
/usr/mysql-5.7.44/mysql
[root@CNDCGITLABP01 support-files]# cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service_backup
[root@CNDCGITLABP01 support-files]# vim /lib/systemd/system/mysqld.service

找到【service】部分,修改ExecStart 指向你的mysql服务器可执行文件的实际路径


[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS----更改这个位置的路径,更改为最新的mysql路径

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

之后执行

sudo systemctl daemon-reload
sudo systemctl restart mysqld

再查看MySQL的版本即可正确!!!

后续还可改进!

这段代码是一个 `docker-compose.yml` 文件,用于定义一个多容器的 Docker 应用程序。主要分为三个部分,分别是版本信息、网络信息和服务信息,下面是详细的翻译: ``` version: '3' # 版本号 networks: # 网络配置 likeadmin: # 网络名 driver: bridge # 网络类型 services: # 服务配置 nginx: # nginx服务 container_name: likeadmin-nginx # 容器名 image: nginx:1.23.1 # 容器镜像 restart: always # 容器停止后自动重启 depends_on: # 依赖关系 - "php" # 依赖于php服务 volumes: # 挂载卷 - ../server:/docker_php/server - ./config/nginx/conf.d:/etc/nginx/conf.d - ./log/nginx/logs:/logs networks: # 网络 - likeadmin ports: # 端口绑定 - "80:80" php: # php服务 container_name: likeadmin-php image: likeshop/php:8.0.22-fpm restart: always working_dir: /docker_php/server volumes: - ../server:/docker_php/server networks: - likeadmin ports: - "9000:9000" user: "1000:1000" mysql: # mysql服务 container_name: likeadmin-mysql image: mysql:5.7.29 #X86架构 #image: amd64/mysql:5.7.29 #arm架构 restart: always environment: # 环境变量 MYSQL_ROOT_PASSWORD: root volumes: # 挂载卷 - ./data/mysql5.7.29/lib:/var/lib/mysql - ./config/mysql/mysqld.cnf:/etc/mysql/my.cnf networks: # 网络 - likeadmin ports: # 端口绑定 - "3306:3306" redis: # redis服务 container_name: likeadmin-redis image: redis:7.0.4 restart: always volumes: # 挂载卷 - ./data/redis:/data networks: # 网络 - likeadmin ports: # 端口绑定 - "6379:6379" node: # node服务 container_name: likeadmin-node image: node:14.18.1 restart: always volumes: # 挂载卷 - ../admin:/likeadmin_php/admin networks: # 网络 - likeadmin tty: true working_dir: /likeadmin_php/admin ports: # 端口绑定 - "5173:5173" ``` 这个 `docker-compose.yml` 文件定义了5个服务,分别是 `nginx`、`php`、`mysql`、`redis` 和 `node`,并且它们都在同一个网络 `likeadmin` 中。每个服务都有自己的 `container_name`、`image`、`restart`、`volumes`、`networks` 和 `ports` 等配置信息,其中 `depends_on` 用于定义服务之间的依赖关系。 希望这个翻译能够帮助你更好地理解这个 `docker-compose.yml` 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值