ubuntu版本:Ubuntu 18.04.5 LTS

MySQL版本:从8.0.25升级到8.0.30(2022年7月30号看,是最新版本)

升级目的:客户检测数据库服务器的mysql存在各种漏洞,虽然觉得应该把服务器外网访问关闭掉,这样就可以屏蔽这些漏洞带来的威胁,但是老板还是觉得要修复漏洞,mysql要修复漏洞也只好升级版本了

一、首先得备份数据

备份数据库结构和数据:
mysqldump -uroot -p123456 --all-databases > /opt/all.sql

备份存储过程:

mysqldump -uroot -p -n -t -d -R <dbname> > /opt/procedures.sql

二、备份原本的mysql数据目录和配置目录

cp -r /var/lib/mysql /var/lib/mysql_bak
cp -r /etc/mysql /etc/mysql_bak

三、ubuntu卸载原本的mysql

1)、自动卸载mysql(包括server和client)
sudo apt-get autoremove mysql* --purge
2)、首先在终端中查看MySQL的依赖项
dpkg --list|grep mysql
3)、apt-get remove mysql-common
4)、卸载,看你自己安装的什么版本在卸载
apt-get autoremove --purge mysql-server-8.0
5)、清除残留数据
dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P
6)、sudo apt-get autoremove --purge mysql-apt-config

四、下载新版的mysql 8.0.30

1)、进mysql官网下载页https://dev.mysql.com/downloads/
2)、选择MySQL Community Server
3)、选择旧版本Looking for previous GA versions?
4)、操作系统选:Ubuntu Linux
5)、下载套件:mysql-server_8.0.30-1ubuntu18.04_amd64.deb-bundle.tar

五、安装mysql

注意:安装之前要删除旧版本mysql的相关目录,比如/etc/mysql,/var/lib/mysql,/usr/local/mysql等

套件内包含test字样的deb文件可以删除不安装

安装各个deb文件:dpkg -i mysql-*.deb

查看安装情况:dpkg --list|grep mysql

安装过程中如果有什么error,可以再百度查询处理办法

六、初始化mysql

1)、安装完mysql server之后,还没初始化之前,先在配置文件里面加一行lower_case_table_names=1
2)、删除原本的mysql数据 rm -rf /var/lib/mysql
3)、创建数据目录 mkdir /var/lib/mysql
4)、权限设置(必须,不然无法启动mysql)
chown mysql:mysql -R /var/lib/mysql
chmod -R 777 /var/lib/mysql
5)、初始化mysql
mysqld --initialize --user=mysql --lower-case-table-names=1
或者
mysqld --initialize --user=mysql
6)、启动 MySQL
systemctl start mysql.service
7)、查找初始密码 grep "password" /var/log/mysql/error.log,如果找不到则使用安全模式进入设置
8)、设置root账号密码和权限:

mysql -uroot -p	
alter user 'root'@'localhost' identified by 'newpassword';	
grant all privileges on *.* to 'root'@'localhost';	
flush privileges;	

create user 'root'@'%' identified by 'newpassword';	
grant all privileges on *.* to 'root'@'%';	
flush privileges;


9)、启动如果启动不了,可以查看error.log的报错信息,

tail -f /var/log/mysql/error.log

七、导入数据

mysql -uroot -p
source  /opt/all.sql
source /opt/procedures.sql

八、过程中报错

1)、mysql 安装 failed to start_[mysql]错误解决之"Failed to start MySQL Server":
原因可能是旧版本mysql没有删除干净,所以安装之前要删除旧版本mysql的相关目录,
比如/etc/mysql,/var/lib/mysql,/usr/local/mysql等

2)、MySQL8.0想要大小写不敏感,必须在安装好MySQL后 修改mySQL配置文件设置为不敏感,一旦启动后,再设置是无效的,而且启动报错。如果已经晚了,那必须把MySQL数据库data目录下所有文件删除,修改配置文件再启动。数据库会重新加载。

九、mysql8常用配置

#lower_case_table_names表名大小写不敏感						
lower_case_table_names=1
#sql-mode支持日期为0000-00-00 00:00:00						
sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
port=3306
max_connections=1000
max_connect_errors=1000
character-set-server=utf8
default-storage-engine=INNODB
innodb_buffer_pool_size=4G
innodb_flush_log_at_trx_commit=1
interactive_timeout=3600
wait_timeout=3600

十、如果安装的mysql没有初始密码:
1)、systemctl stop mysql.service
2)、cd /usr/bin
3)、使用安全模式运行,此时可以免密登录root账号 ./mysqld_safe --skip-grant-tables
4)、不用登录直接修改,mysqladmin -uroot -p password 123;
5)、mysql -uroot -p,并输入密码123
6)、首先要授权,否则无法执行修改密码的命令,flush privileges; 
7)、修改默认密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 
8)、创建远程访问账号:

create user 'root'@'%' identified by 'new_password';
grant all privileges on *.* to 'root'@'%';
flush privileges;


9)、停止安全模式 mysqladmin shutdown,如果停止不了,ps -ef|grep mysqld,杀死相关进程

 

以上只是升级mysql的大概过程,仅供参考,可能每个人升级过程会有不同的情况,具体情况具体分析。个人感觉过程中最重要的是要把数据备份好,这样才不会造成不必要的损失。

至于升级过程中各种报错,以及项目对新版本mysql的兼容情况,这些也是影响最终升级结果的因素,这里就不展开讨论了。