最近mysql被漏洞检测,很多漏洞补丁要补,想了想那就直接升级到没有补丁版本,最新版本,也就没有那么多操作了。 早期都没做过mysql升级处理, 都是docker换个版本的mysql直接用,现在容器内直接把mysql升级了,做一个不深不浅的笔记,可能写的有些小白了点。
在线升级 升级过程 mysql 在乌班图环境下 通过apt 安装,所以懒猫也用apt去升级。 去官网下载 apt更新deb文件。 下载的文件 mysql-apt-config_0.8.32-1_all.deb
通过执行 dpkg -i mysql-apt-config_0.8.32-1_all.deb
能选择更新的mysql版本源。
mysqld --defaults-file=/xxxxx/mysql/etc/mysql.cnf --user=mysql --datadir=/xxxx/mysql/data &
解释:
mysqld
:这是MySQL数据库服务器的守护进程(daemon)程序,用于启动和管理MySQL服务器。
--defaults-file=/xxxxx/mysql/etc/mysql.cnf
:这个选项指定了MySQL服务器启动时要使用的配置文件的位置。通常,MySQL服务器会默认寻找/etc/my.cnf、/etc/mysql/my.cnf、或者~/.my.cnf(用户主目录下的配置文件)等位置,但如果使用–defaults-file选项,则会覆盖这些默认位置,直接使用指定的配置文件。这里的/xxxxx/mysql/etc/mysql.cnf需要替换为你自己的配置文件实际路径。
--user=mysql
:这个选项指定了MySQL服务器运行时的用户身份。出于安全考虑,MySQL服务器通常以非root用户身份运行,这里指定的mysql用户是MySQL安装过程中通常会创建的一个专用用户,用于运行MySQL服务。
--datadir=/xxxx/mysql/data
:这个选项指定了MySQL数据库文件的存储目录。默认情况下,MySQL会将数据库文件存储在/var/lib/mysql(或类似路径)下,但你可以通过–datadir选项来指定一个不同的位置。这里的/xxxx/mysql/data需要替换为你的实际数据目录路径。
&
:在命令的最后加上&符号,意味着将该命令放入后台执行。这样,你就可以在同一终端会话中继续执行其他命令,而MySQL服务器会在后台继续运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 docker cp mysql-apt-config_0.8.32-1_all.deb 对应的容器内:/ # 进入到容器内 docker exec -it paperless-container bash # 更新mysql源,需按顺序分别输入 1 - 1 - 3 三个数字 dpkg -i mysql-apt-config_0.8.32-1_all.deb # MySQL APT 存储库更新软件包信息 apt-get update # 从 MySQL APT 存储库安装 MySQL: y 回车 - 2 apt-get install mysql-server ./mysqlinit.sh
mysqlinit.sh
把安装的升级sql,相关配置,用户配置,数据更新到对应之前目录内。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 mysqld --defaults-file=/xxxxx/mysql/etc/mysql.cnf --user=mysql --datadir=/xxxx/mysql/data & password=$(awk '/password/{if(NR>=1 && NR<=5)print $3}' /etc/mysql/debian.cnf) mysql -u debian-sys-maint -p$password <<EOF use mysql; update user set host = '127.0.0.1' where user = 'root'; update user set plugin='mysql_native_password' where user='root'; flush privileges; alter user 'root'@'127.0.0.1' IDENTIFIED BY '要更新的密码'; flush privileges; alter user 'root'@'127.0.0.1' IDENTIFIED BY '要更新的密码'; update user set plugin='mysql_native_password' where user='root'; flush privileges; grant all privileges on *.* to 'root'@'127.0.0.1'; quit EOF sleep 5 /etc/init.d/mysql stop sleep 2 mysqld --defaults-file=/xxxxx/mysql/etc/mysql.cnf --user=mysql --datadir=/xxxx/mysql/data &
离线升级 mysql 在乌班图环境下 通过apt 安装,所以懒猫也用apt去升级。 去官网下载 下载对应版本DEB Bundle 升级包。 懒猫下载的就是 mysql-server_8.0.39-1ubuntu22.04_amd64.deb-bundle.tar
为什么要离线升级呢,很多时候网络都是很不好,或者直接没网,所以离线升级是十分有必要的存在。
下载好了 *.deb-bundle.tar
包,进行解压,如果你是升级,那这个解压包里的不是全部都要使用,同时也要删除之前那版本的一些东西。
具体删除哪些,懒猫也是通过在线升级执行 apt-get install mysql-server
时,看执行的代码显示,Remove 和 Preparing 查看哪些需要删除,哪些需要安装。
删除需要先进行,然后安装也要根据顺序进行,否则会安装不了,具体安装顺序如下,当然如果你也是看在线代码显示按照显示的顺序即可。
1 2 3 4 5 6 7 8 9 10 11 12 mysql-common mysql-community-client-plugins mysql-community-client-core mysql-community-client libmysqlclient21(注意:版本号可能因版本而异) libmysqlclient-dev mysql-client mysql-community-server-core mysql-community-server mysql-server
然后根据在线版本升级的提示,提取 *.deb-bundle.tar
包内对应的文件,然后编写一个shell脚本,好一键执行。以下是懒猫自己写的shell脚本,只做参考,不要直接照搬哦。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 # !/bin/bash # 卸载之前版本 apt-get remove -y mysql-server-8.0 apt-get remove -y mysql-client-8.0 apt-get remove -y mysql-client-core-8.0 apt-get remove -y mysql-server-core-8.0 sleep 2 # 必须以该顺序进行安装 dpkg -i mysql-common_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-community-client-plugins_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-community-client-core_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-community-client_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-client_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-community-server-core_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-community-server_8.0.39-1ubuntu22.04_amd64.deb dpkg -i mysql-server_8.0.39-1ubuntu22.04_amd64.deb # mysql-server8.0.39升级成功, 要换回原来配置 mysqld --defaults-file=/xxxxx/mysql/etc/mysql.cnf --user=mysql --datadir=/xxxx/mysql/data & password=$(awk '/password/{if(NR>=1 && NR<=5)print $3}' /etc/mysql/debian.cnf) mysql -u debian-sys-maint -p$password <<EOF use mysql; update user set host = '127.0.0.1' where user = 'root'; update user set plugin='mysql_native_password' where user='root'; flush privileges; alter user 'root'@'127.0.0.1' IDENTIFIED BY '要更新的密码'; flush privileges; alter user 'root'@'127.0.0.1' IDENTIFIED BY '要更新的密码'; update user set plugin='mysql_native_password' where user='root'; flush privileges; grant all privileges on *.* to 'root'@'127.0.0.1'; quit EOF sleep 5 /etc/init.d/mysql stop sleep 2 # 再次执行一次,怕没执行到 mysqld --defaults-file=/xxxxx/mysql/etc/mysql.cnf --user=mysql --datadir=/xxxx/mysql/data &
运行远端访问 刚刚安装的 mysql 如果如远端访问,可以进行一下操作:
找到mysql配置文件 修改mysql.cnf 文件 注释掉
#bind-address = 127.0.0.1 #mysqlx-bind-address = 127.0.0.1
进入mysql内 执行 use mysql; update user set host = ‘%’ where user = ‘root’; FLUSH PRIVILEGES;
备注: 如果未配置密码或忘记密码 可以通过 /etc/mysql/debian.cnf 执行脚本命令 进入mysql内
1 2 password=$(awk '/password/{if(NR>=1 && NR<=5)print $3}' /etc/mysql/debian.cnf) mysql -u debian-sys-maint -p$password