最近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
为什么要离线升级呢,很多时候网络都是很不好,或者直接没网,所以离线升级是十分有必要的存在。

  1. 下载好了 *.deb-bundle.tar 包,进行解压,如果你是升级,那这个解压包里的不是全部都要使用,同时也要删除之前那版本的一些东西。
  2. 具体删除哪些,懒猫也是通过在线升级执行 apt-get install mysql-server 时,看执行的代码显示,Remove 和 Preparing 查看哪些需要删除,哪些需要安装。
  3. 删除需要先进行,然后安装也要根据顺序进行,否则会安装不了,具体安装顺序如下,当然如果你也是看在线代码显示按照显示的顺序即可。
1
2
3
4
5
6
7
8
9
10
11
12
#装MySQL Server
#接下来,你需要按照依赖关系顺序安装解压出的.deb文件。由于这些文件之间存在依赖关系,你需要按照特定的顺序来安装它们。通常,安装顺序如下:
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
  1. 然后根据在线版本升级的提示,提取 *.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 如果如远端访问,可以进行一下操作:

  1. 找到mysql配置文件 修改mysql.cnf 文件
    注释掉

#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1

  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
avatar
懒觉猫先生
欢迎你们的到来!
关注我吧
最新文章
最新评论
正在加载中...
网站资讯
文章数目 :
176
已运行时间 :
本站总字数 :
119.7k
本站访客数 :
本站总访问量 :
最后更新时间 :