MYSQL 的升级
MySQL升级5.7.22-5.7.44
属于MySQL的小版本升级
升级前检查
- 检查mysql的启动方式
ps -ef|grep mysqld
- 检查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
- 检查使用的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的版本即可正确!!!
后续还可改进!
还没有评论,来说两句吧...