linux mysql8升级
- 一、背景
- 二、数据备份
- 三、卸载
- 四、安装新版
- 五、数据恢复
- 六、其他附加问题
一、背景
本次操作为mysql8.0.19与8.0.20版本升级mysql8.0.23
操作背景为20及以下版本出现漏洞需修复
二、数据备份
命令行操作
备份:mysqldump -u root -p --all-databases >/data/20210413_all.sql
mysqldump -u root -p --all-databases >/data/20210413_all.sql
恢复:mysql -u root -p </data/20210413_all.sql
三、卸载
1.查找 rpm -qa | grep -i mysql
对应mysql-community全干掉
rpm -e --nodeps 名称
–nodeps 强力删除
四、安装新版
1.下载
官网下载地址:https://dev.mysql.com/downloads/mysql/
找准自己的版本和对应系统!!
2.上传解压
直接传到/usr/local位置
建议这个位置,data目录可以放在其他磁盘空间较大的地方解压:tar -Jxf mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz 并且重命名 mysql
3.创个mysql用户并设置密码(已有可忽略)
[root@service05 mysql]# groupadd mysql
[root@service05 mysql]# useradd -r -g mysql mysql
[root@service05 mysql]# passwd mysql
4.将解压的mysql改成mysql用户的文件
chown -R mysql:mysql ./mysql
5.修改mysql配置文件:
vim /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
user=mysql
socket=/tmp/mysql.sock
datadir=/home/mysql
log-bin=/home/mysql/mysql-bin.log
character-set-server = utf8mb4
lower_case_table_names=1
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
expire_logs_days=3
max_connections=500
wait_timeout = 600
interactive_timeout = 600
#default_authentication_plugin=mysql_native_password
socket的client和mysqld配置路径应相同可默认在/tmp
character-set-server = utf8mb4 标识字符集编码,最好设置为utf8mb4
lower_case_table_names=1 配置表名不区分大小写,其实是强制性小写
注意:此处datadir的配置/home/mysql,如下所示,网上默认位置建议是/usr/local/mysql/data,这里踩过几个坑,我们服务器 / 目录下的空间为50G,当被占满时会严重影响mysql使用,建议根据自己磁盘或挂载盘的位置调整data目录
6.初始数据库
./bin/mysqld --initialize --user=mysql --basedir=/home/mysql --datadir=/home/mysql --lower_case_table_names=1
注意:basedir为你自己my.cnf配置的路径,建议设置为/usr/local/mysql,data地址改成大存储目录即可
此处执行完成后会出现root的初始密码
root@localhost:********* 直接粘贴出来放记事本上
7.启动
./support-files/mysql.server start
启动和停止
8.登录改密码
./bin/mysql -uroot -p.
alter user ‘root’@‘localhost’ identified by ‘**********’;9.配置支持远程访问
CREATE USER ‘root’@‘%’ IDENTIFIED BY ‘**********’;
grant all privileges on . to ‘root’@‘%’ with grant option;
flush privileges;
注意:这里配置为所有都可连接,可根据自身需求自己更改指定ip或ip段。执行完成如下就可以了
10.启动和停止
[root@service05 mysql]# ./support-files/mysql.server start
Starting MySQL.. SUCCESS!
[root@service05 mysql]# ./support-files/mysql.server restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
[root@service05 mysql]# ./support-files/mysql.server stop
Shutting down MySQL.. SUCCESS!
五、数据恢复
mysql -u root -p </data/20210413_all.sql
根据刚才的备份文件恢复数据,数据量小的话基本上很快搞定。
六、其他附加问题
1.mysql查看数据库连接信息
1.1
查看当前连接到数据库的用户和Host :
SELECT DISTINCT USER,HOST FROM information_schema.PROCESSLIST P WHERE P.USER NOT IN(‘root’,‘repl’,‘system user’)
查看每个host的当前连接数和总连接数:
SELECT * FROM performance_schema.hosts;
按照登录用户+登录服务器查看登录信息:
SELECT
USER as login_user,
LEFT(HOST,POSITION(‘:’ IN HOST)-1) AS login_ip,
count(1) as login_count
FROM information_schema.PROCESSLIST P
WHERE P.USER NOT IN(‘root’,‘repl’,‘system user’)
GROUP BY USER,LEFT(HOST,POSITION(‘:’ IN HOST)-1)
ORDER BY COUNT(1) DESC;
按照登录用户+数据库+登录服务器查看登录信息:
SELECT
DB as database_name,
USER as login_user,
LEFT(HOST,POSITION(‘:’ IN HOST)-1) AS login_ip,
count(1) as login_count
FROM information_schema.PROCESSLIST P
WHERE P.USER NOT IN(‘root’,‘repl’,‘system user’)
GROUP BY DB,USER,LEFT(HOST,POSITION(‘:’ IN HOST)-1)
ORDER BY COUNT(1) DESC;
1.2连接刷新
flush hosts;
show variables like ‘%max_connect_errors%’;
2、数据库操作
2.1增加用户并授权
2.1.1进入命令行
use mysql;
2.1.2创建数据库并指定数据库格式
CREATE DATABASE IF NOT EXISTS plotting default charset utf8 COLLATE utf8_general_ci;
2.1.3创建用户
//允许所有ip连接(用通配符%表示)
create user ‘plotting’@‘%’ identified by ‘PqoAqx#77e$@’;
2.1.4用户增加plotting数据库所有权限
show grants for ‘plotting’;
grant all privileges on plotting.* to plotting@‘%’ ;
2.1.5刷新
FLUSH PRIVILEGES;
2.1.6删除用户
DROP USER username@localhost;
四、连接问题
出现1227 - Access denied;you need (atleast one of) the PROCESS …
出现如上问题报错,点击确认后不会对正常使用产生影响。
如果想要这个错误不出现,需要在root用户下,给对应用户赋予process权限。如下所示: