MYSQL 体系结构和基础管理
3.1 工作模型(C/S)
MySQL 客户端/服务器

类比ssh连接工作原理:

MYSQL 体系结构和基础管理 - 图1

一,本地socket连接方式: (已经封装了IP+端口:用于本地服务的连接)
前提:
需要提前创建xxx@’localhost’ 本地用户
[root@db01 ~]# cat /etc/my.cnf | grep socket #socket=/tmp/mysql.sock[root@db01 ~]# mysql -S /tmp/mysql.sock #socket登录方式
ps: 本地登录:只能在本地使用,不依赖于IP和端口

二, 远程TCPIP链接方式
前提:
需要提前创建remote@’10.0.0.%’ 远程用户
[root@db01 ~]# mysql -uroot -p123456 -h 10.0.0.51 -p 3306

MYSQL 体系结构和基础管理 - 图2
3.2 服务器端: 实例
mysql实例:指mysqld + 工作线程(main thread+多个线程) + 预分配的内存结构
—->>>
公司:boss+经理+员工+办公室

三:实例图解:

MYSQL 体系结构和基础管理 - 图3

/xxx/xxx/mysql/bin/mysqld———->>启动——->>实例启动
??3.**3 msqld程序执行过**程

MYSQL 体系结构和基础管理 - 图4

MYSQL 体系结构和基础管理 - 图5

面试:经常被问道的体系结构原理,mysql语句执行流程:
口述: 1.mysql 物理存储结构认识 宏观: 库——> 对应着系统中: 目录 #8.0之前版本在mysql数据目录下mkdir 一个目录 —-> 表中可以查看到 8.0后规范了,不允许展示非数据库创建的目录。表——> 对应系统中: xxx.idb 微观: 彩蛋:1. 磁盘建目录,5.6和5.7可以直接识别为一个库.2. 8.0 之前,mysql下很多表是MyiSAM引擎. user.frm —->表结构 user.MYD —->数据行 user.MYI —->索引 3. 8.0之前 InnoDB表 t1.frm —> 表结构 t1.ibd —> 数据行+索引
Ps: 语义检查:语义类型有ddl,dcl,dml,dtl不同类型
3.4 MySQL的逻辑结构(操作对象)
逻辑—>抽象

MySQL Linux
库: 库名 +属性 目录: 文件名 + 属性
表: 文件名 + 表属性 + 表内容 + 列 文件: 文件名 + 文件属性 + 文件内容


mysql简单命令对比Linux系统:
mysql> show databases; ls /
mysql> use mysql; cd
mysql> show tables; ls ./
mysql> desc user; 看列定义

*3.5 MySQL的物理存储结构

MYSQL 体系结构和基础管理 - 图6

口述:

段:一个表就是一个段,可以由1个或多个区构成
区:一个区(蔟),默认1M连续的64个page组成
页:一个页,默认16K,连续的4个OS block组成,最小的IO单元

3.6 MySQL基础管理
3.5.1 用户的作用

Linux用户作用: MySQL用户作用 :
登录Linux 登录MySQL数据库
管理Linux对象:文件 管理MySQL对象:表


3.2.12 用户定义
Linux用户:
MySQl用户: 用户名@’白名单’

白名单包括: 地址列表,允许白名单登录的IP登录MySQL,管理MySQL
例: oldhou@’localhost’ :oldhou用户能够通过本地登录MySQL(socket)
oldhou@’10.0.0.10 或 .%’ :oldhou用户能够通过10.0.0.10或10.0.0.0/24 网段远程登录
oldhou@’10.0.0.5%’ : 10.0.0.50-59
oldhou@’10.0.0.0/255.255.254.0’ # 网段只支持完整的子网掩码写法
oldhou@’%’ # %: 排除本地的所有网段可以登录。
oldhou@’web01’
oldhou@’web01.oldguo.com’

3.2.3 用户的管理
查看用户:
记不住?—-> mysql> select * from mysql.usr; ——> 选择你要的参数 (不能用户查业务表—> cat 大文件一样危险 )
MYSQL 体系结构和基础管理 - 图7
mysql> desc mysql.user;

MySQL用户操作 SQL语句
查: mysql> select user,host from mysql.user;
mysql> select user,host ,authentication_string from mysql.user ;
增: mysql> create user oldguo@’localhost’;
mysql> create user oldboy@’10.0.0.%’ identified by ‘123’;
改: mysql> alter user oldguo@’localhost’ identified by ‘123’;
#用于添加和修改密码
删 (尽量精简用户) mysql> drop user oldguo@’localhost’ ;
mysql> drop user oldboy@’10.0.0.%’;
#会删除用户的权限。


注意: 8.0版本以前是可以通过grant命令,建立用户 + 授权 (8.0, 必须先建立用户,后授权)
mysql升级8.0 后连接不上数据库?
——> 是因为升级了sha2加密插件—-> 调整
为mysql_native_password 加密插件可解决,
好习惯:命令行尽量使用mysql -uroot -p 隐藏登录
Linux 权限——> 对象:文件
mysql权限——> 对象:

3.7 权限管理

3.7.1 权限作用
linux中权限表现方式: RWX
MySQL的权限变更方式:增删改查,具体的 命令
mysql> show privileges; #查询权限
mysql> show privileges;

3.7.2 授权操作
语法: grant 权限 on 对象 to 用户 identified by ‘ 密码 ‘; 8.0+ : create user 用于 identified by ‘ 密码 ‘ ; grant 权限1,权限2,权限3,… on 对象 to 用户 identified by ‘ 密码 ‘; 权限: ALL :管理员 grant option : 给别的用户授权 对象范围: 库 , 表 linux权限存放于 inode中 mysql 中权限存放与 授权表中 -user 存放全局范围内的权限-db 存放单库级别-columnspriv : 单列-tables_priv : 存放单表级别-procs priv-proxies_ priv . : ——————> chmod -R 755 / 管理员 oldhou.* : ——————> chmod -R 755 /oldhou 普通用户 oldguo.t1 : ——————> chmod -R 755 /oldhou/t1 单表
ALL 所有权限
(不包括 Crant option. —-> 拥有此权限可以给其他用户授权 )
应用用户一般具备以下权限即可
select , update , delete ,insert

3.7.3 授权案例
案例1:创建一个管理员用户oldguo, 能够通过10.0.0.% 网段登录,并管理数据库:
#创建用户并授权mysql> grant all on . to oldguo@’10.0.0.%’ identified by ‘123’ with grant option; Query OK, 0 rows affected, 1 warning (0.00 sec) ###查询:mysql> show grants for oldguo@’10.0.0.%’ ;+———————————————————————————————————+| Grants for oldguo@10.0.0.% |+———————————————————————————————————+| GRANT ALL PRIVILEGES ON . TO ‘oldguo’@’10.0.0.%’ WITH GRANT OPTION |+———————————————————————————————————+1 row in set (0.00 sec) ###查看用户权限:mysql> select from mysql.user\G (\G : 列显示) … ** 4. row * Host: 10.0.0.% User: oldguo …

案例2: 创建并授权一个aap@’10.0.0.%’业务用户,能对app库下所有的对象进行create,select,update,delete,insert操作
#创建用户并授权mysql> grant create,update,select,insert on app.
to app@’10.0.0.%’ identified by ‘123’; Query OK, 0 rows affected, 1 warning (0.00 sec) #查看用户权限mysql> show grants for app@’10.0.0.%’;+——————————————————————————————————-+| Grants for app@10.0.0.% |+——————————————————————————————————-+| GRANT USAGE ON . TO ‘app’@’10.0.0.%’ | | GRANT SELECT, INSERT, UPDATE, CREATE ON app. TO ‘app’@’10.0.0.%’ |+——————————————————————————————————-+2 rows in set (0.00 sec) mysql> select user,host from mysql.user ;+———————-+—————-+| user | host |+———————-+—————-+| app | 10.0.0.% | | oldguo | 10.0.0.% | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost |+———————-+—————-+5 rows in set (0.01 sec) #其他方式查看权限—-查看基于库级别的权限Ps: 通过修授权表的内容,也可以达到修改权限的目录,但是不建议 mysql> select from db\G * 3. row * Host: 10.0.0.% Db: app User: app Select_priv: Y ….

3.7.4 回收权限
Linux中:chmod -R 644 /oldhou ——> chmod -R 755 /oldhou
Msql中:不能通过重复授权的方式,修改权限(测试无效)只能通过收回权限的方式进行权限的授权

mysql> show grants for app@’10.0.0.%’ ;+——————————————————————————————————-+| Grants for app@10.0.0.% |+——————————————————————————————————-+| GRANT USAGE ON . TO ‘app’@’10.0.0.%’ | | GRANT SELECT, INSERT, UPDATE, CREATE ON app. TO ‘app’@’10.0.0.%’ |+——————————————————————————————————-+2 rows in set (0.00 sec) #收回权限mysql> revoke create on app. from app@’10.0.0.%’; Query OK, 0 rows affected (0.00 sec) mysql> show grants for app@’10.0.0.%’;+——————————————————————————————-+| Grants for app@10.0.0.% |+——————————————————————————————-+| GRANT USAGE ON . TO ‘app’@’10.0.0.%’ | | GRANT SELECT, INSERT, UPDATE ON app.* TO ‘app’@’10.0.0.%’ |+——————————————————————————————-+2 rows in set (0.00 sec)

oracle 删除了用户,会删除库和表
mysql 中删除用户,不会影响库和表,但是会影响业务,删除类的操作都要谨慎

3.7.5 找回密码
思路:进入mysql维护模式,修改密码
—skip-grant-tables :跳过授权表
—skip-network : 跳过TCP/IP连接
#启动mysql_safe
[root@db01 ~]# mysqld_safe —skip-grant-tables &
[1] 2496
[root@db01 ~]# Logging to ‘/data/mysql/data/db01.err’.
2020-09-24T09:27:44.696751Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data

(1)关闭数据库:[root@db01 ~]# systemctl stop mysqld#(2)使用安全模式启动:[root@db01 ~]# mysqld_safe —skip-grant-tables —skip-networking & #只允许本地无密码登录[1] 4004[root@db01 ~]# 2020-09-24T09:45:25.485161Z mysqld_safe Logging to ‘/data/mysql/data/db01.err’.2020-09-24T09:45:25.521325Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data#或者service mysqld start -skip-grant-tables —skip-networking#(3)修改密码:mysql> flush privileges; #手工加载授权表Query OK, 0 rows affected (0.00 sec) mysql> alter user root@’localhost’ identified by ‘123456’ ; #修改密码Query OK, 0 rows affected (0.00 sec) #(4)重启数据库到正常模式[root@db01 ~]# systemctl restart mysqld.service

3.8 连接管理

三种连接方式:

MYSQL 体系结构和基础管理 - 图8

3.8.1 MySQL自带客户端

(1) mysql参数列表:
-u 用户名
-p 密码
-s 本地socket文件位置
-h 数据库IP地址
-p 数据库端口号,默认3306
-e 免交互进行数据库命令(写脚本时用)
mysql -uroot -p123 -e “select @@innodb_flush_log_at_trx_commit;”

< 导入数据库
mysql -uroot -p123 </root/world.sql

socket :
前提:数据库中必须实现授权oldguo@’localhost’ 用户
socket 常见登录方式:
mysql -uoldguo -p123 -S /tmp/mysql.sock (默认位置)
mysql -uoldguo -p -S /tmp/mysql.sock #推荐方式
mysql -p123 -S /tmp/mysql.sock
mysql
mysql -uroot -p123

mysqldump
mysqladmin
TCP/IP:
前提: 必须前提创建好,可以远程连接的用户(ex: oldhou@’10.0.0.%’)
mysql -uoldhou -p123 -h 10.0.0.51 -p 3306
mysql -uoldhou -p123 -h 10.0.0.51
mysql -uoldhou -p -h 10.0.0.51 -p 3306

练习:授权一个oldboy管理用户,可以通过本地socket登录
mysql> grant all on . to oldboy@’localhost’ identified by ‘123’
[root@db01 ~]# mysql -uoldboy -p123 -S /tmp/mysql.sock

如何查看链接是本地还是远程
有连接层会对每个连接有一个连接线程—->使用命令: show processlist; 查看

Ps: 查看连接用户:
mysql> show processlist;+——+————————-+——————+———+————-+———+————————————+—————————+| Id | User | Host | db | Command | Time | State | Info |+——+————————-+——————+———+————-+———+————————————+—————————+| 5 | event_scheduler | localhost | NULL | Daemon | 8206 | Waiting on empty queue | NULL | | 8 | root | localhost | NULL | Sleep | 101 | | NULL | | 9 | oldguo | localhost | NULL | Query | 0 | starting | show processlist | | 10 | remote | db01:43552 | NULL | Sleep | 68 | | NULL |+——+————————-+——————+———+————-+———+————————————+—————————+4 rows in set (0.00 sec)
3.8.2 MySQL远程客户端
开发工具
前提:必须提前创建好,可以远程连接的用户,(例如:oldguo@”10.0.0.%”)
mysqldump 备份工具
mysqladmin 管理工具

3.8.3 程序连接
yum install -y php-mysql
pip3 install pymysql

3.9 初始化配置
###方式源码安装———>> 编译过程中设置初始化参数 配置文件———>>数据库启动之前,设定配置文件参数 /etc/my.cnf 启动脚本命令 ——->>mysql_safe —skip-grant-tables —skip-networking & 配置文件应用 —————a. 5.6,5.7初始化区别5.6 : scripts/mysql_install_db —-5.7以前使用5.7 : mysqld —initialize-insecure —-5.7以后使用mysqld —initialize-insecure和—initialize —-初始化参数说明—initialize: 给root@’localhost’一个临时密码.四种复杂度12位密码.只能用户登录,需改密码,不能执行sql语句

配置文件个书写格式:
(1)配置文件读取顺序: mysqld —help —verbose | grep my.cnf-默认读取位置: /etc/my.cnf ——>> /etc/mysql/my.cnf ——>> ~/usr/local/mysql/etc/my.cnf ——>> ~/.my.cnf -手工定制配置文件位置点: /opt/my.cnf /data/3306/my.cnf /data/3307/my.cnf /data/3307/my.cnf 启动时: mysql —defaults-file=/opt/my.cnf & mysql_safe —defaults-file=/opt/my.cnf & [标签] 标签是什么? #分类不同程序的参数———————————————————-[服务器端] : 负责数据库服务端运行参数设定: [mysqld] [mysqld_safe] [server] #涵盖管理所有服务端标签 [客户端]: 影响客户端连接,不影响远程客户端 [mysql] [mysqldump] [client] #涵盖管理所有客户端标签

基础配置文件模板介绍说明:
[root@db01 ~]# cat /etc/my.cnf[mysqld] ## 服务端标签user=mysql # 负责数据库管理用户basedir=/application/mysql # 软件的安装位置datadir=/data/mysql/data # 数据的存放为位置socket=/tmp/mysql.sock # 套接字文件server_id=6 # 标识节点的唯一编号(主从复制有用)port=3306 # 端口号 [mysql] ## 客户端标签socket=/tmp/mysql.sock # 读取socket文件的位置点(如何创建本地多实例,就不要写,要不然默认读取配置文件的路径)
ps: 生产中,初始化数据库,需要加载配置文件。 (默认文件位置 /etc/my.cnf)
配置文件不在默认路径时:
mysqld —initialize-insecure —defaults-file=/opt/my.cnf

*3.10 启动和关闭
启动方式:
MYSQL 体系结构和基础管理 - 图9
[root@db01 ~]# ll -d /application/mysql/bin/mysqld_safe 该文件提供定了制方式

3.11 多实例(测试,学习)
测试环境-大型架构常会用到多实例
3.11.1 同版本的多实例

规划:软件1份 数据目录 3份 /data/330{7..9} 配置文件 3份 /data/330{7..9}/my.cnf 日志目录 3份 /binlog/330{7..9} socket 3份 /tmp/mysql330{7..9}.socket 端口 3份 port=3307,3308,3309 server_id 3份 7,8,9

2.3 同版本 2.3.1 准备目录 [root@db01 ~]# mkdir -p /data/330{7..9}/data[root@db01 ~]# chown -R mysql. /data2.3.2 配置文件 cat >/data/3307/my.cnf </data/3308/my.cnf </data/3309/my.cnf <<EOF [mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/data/3309/datasocket=/tmp/mysql3309.sockport=3309[mysql]socket=/tmp/mysql3309.sock EOF 2.2.3 初始化三份数据 mysqld —defaults-file=/data/3307/my.cnf —initialize-insecure —user=mysql —basedir=/usr/local/mysql —datadir=/data/3307/data mysqld —defaults-file=/data/3308/my.cnf —initialize-insecure —user=mysql —basedir=/usr/local/mysql —datadir=/data/3308/data mysqld —defaults-file=/data/3309/my.cnf —initialize-insecure 2.2.4 启动测试 mysqld_safe —defaults-file=/data/3307/my.cnf & mysqld_safe —defaults-file=/data/3308/my.cnf & mysqld_safe —defaults-file=/data/3309/my.cnf & mysql -S /tmp/mysql3307.sock mysql -S /tmp/mysql3308.sock mysql -S /tmp/mysql3309.sock 2.2.5 准备启动脚本: systemd管理多实例cd /etc/systemd/systemcp mysqld.service mysqld3307.servicecp mysqld.service mysqld3308.servicecp mysqld.service mysqld3309.service ######################################cd /etc/systemd/system [root@VM system]# cat mysqld.service [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target [Install]WantedBy=multi-user.target [Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld —defaults-file=/etc/my.cnf LimitNOFILE = 5000#######################################依次修改:sed -i ‘s#ExecStart=/application/mysql/bin/mysqld —defaults-.$#ExecStart=/application/mysql/bin/mysqld —defaults-file=/data/3307/my.cnf#g’ mysqld3307.service sed -i ‘s#ExecStart=/application/mysql/bin/mysqld —defaults-.$#ExecStart=/application/mysql/bin/mysqld —defaults-file=/data/3308/my.cnf#g’ mysqld3308.service sed -i ‘s#ExecStart=/application/mysql/bin/mysqld —defaults-.$#ExecStart=/application/mysql/bin/mysqld —defaults-file=/data/3309/my.cnf#g’ mysqld3309.service 5 授权chown -R mysql. /data/————- 6. 启动 systemctl start mysqld3307.service systemctl start mysqld3308.service systemctl start mysqld3309.service 7. 验证多实例 netstat -lnp|grep 330mysql -S /data/3307/mysql.sock -e “select @@server_id”mysql -S /data/3308/mysql.sock -e “select @@server_id”mysql -S /data/3309/mysql.sock -e “select @@server_id”

报错提示:初始化失败 报错原因: data目录因为有数据或文件,所以不会初始化 报错处理: 多创建一层目录,用于存放mysql运行时的应用数据 1.新增目录 [root@db01 ~]# mkdir -p /data/330{7..9}/data2.配置文件修改cat >/data/3307/my.cnf <<EOF [mysqld]basedir=/application/mysql/datadir=/data/3307/datasocket=/tmp/mysql3307.socketport=3307EOF

3.11.2 不同版本多实例
测试环境使用较多不通版本的实例
0.#准备不同版本,并解压#连接不通版本,修改环境变量(升级——>替换软链接)ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql56ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57 #重名配置文件[root@db01 ~]# mv /etc/my.cnf /etc/my.cnf.bak #注释环境变量vim /etc/profile#export PATH=/usr/local/mysql/bin:$PATH#检验:开以个新窗口[root@db01 ~]# mysql -V-bash: mysql: command not found —-> ok 1. 准备不同目录 [root@db01 ~]# rm -fr /data/331{7..9}/data/[root@db01 ~]# mkdir -p /data/331{7..9}/data/ 2.准备配置文件cat >/data/3356/my.cnf </data/3357/my.cnf </etc/systemd/system/mysqld3356.service </etc/systemd/system/mysqld3357.service <<EOF [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target [Install]WantedBy=multi-user.target [Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql57/bin/mysqld —defaults-file=/data/3357/my.cnf LimitNOFILE = 5000EOF 5. 启动&测试 [root@db01 ~]# systemctl start mysqld3317.service[root@db01 ~]# systemctl start mysqld3318.service[root@db01 ~]# netstat -lntp | grep 331tcp6 0 0 :::3317 ::: LISTEN 9529/mysqld tcp6 0 0 :::3318 ::: LISTEN 9557/mysqld 6. 连接 /usr/local/mysql56/bin/mysql -S /tmp/mysql3356.sock /usr/local/mysql57/bin/mysql -S /tmp/mysql3357.sock 或直接: mysql -uroot -p -S /tmp/mysql3356.sock mysql -uroot -p -S /tmp/mysql3357.sock 解决: (-bash: mysql: command not found) [root@db01 ~]# vim /etc/profileexport PATH=/usr/local/mysql/bin:$PATH[root@db01 ~]# source /etc/profile [root@db01 ~]# mysql -Vmysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL) ps : 对于客户端服务端不是同一版本,可以通用连接。 客户端V: mysql Ver 14.14 Distrib 5.7.31 服务端V: Server version: 8.0.18 MySQL Community Server - GPL

5.6的客户端连接8.0的服务端,报错? 8.0验证方式不一样,建议把环境变量设为5.7/8.0的版本,调用相应客户端连接。
[root@db01 ~]# /application/mysql56/bin/mysql -S /tmp/mysql3318.sock
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql3318.sock’ (2)

3.11.3 升级
1.测试5.6.46 升级到5.7.30
5.6——-> 5.7
a. 优雅(干净)的关闭5.6 /usr/local/mysql56/bin/mysql -S /tmp/mysql3356.sock mysql> set global innodb_fast_shutdown=0; [root@db01 data]# /usr/local/mysql56/bin/mysqladmin -S /tmp/mysql3356.sock shutdown b. 高版本挂低版本数据启动 [root@db01 data]# vim /data/3356/my.cnf [mysqld]user=mysqlbasedir=/usr/local/mysql57datadir=/data/3356/datasocket=/tmp/mysql3356.sockport=3356[mysql]socket=/tmp/mysql3356.sock [root@db01 ~]# /usr/local/mysql57/bin/mysqld_safe —defaults-file=/data/3356/my.cnf —skip-grant-tables —skip-networking & c. 升级 [root@db01 ~]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3356.sock —forceChecking server version. Running queries to upgrade MySQL server. Checking system database. mysql.columns_priv OK mysql.db OK mysql.engine_cost OK mysql.event OK mysql.func OK mysql.general_log OK mysql.gtid_executed OK … … Upgrading the sys schema. Checking databases. sys.sys_config OK Upgrade process completed successfully. Checking if update is needed. c. 正常重启数据库 [root@db01 data]# /usr/local/mysql57/bin/mysqladmin -S /tmp/mysql3356.sock shutdown [root@db01 data]# /usr/local/mysql57/bin/mysqld_safe —defaults-file=/data/3356/my.cnf &

2.Mysql 5.7.30 Inplace升级到MySQL 8.0.20
5.7——-> 8.0
3.1 Mysql 5.7.30 Inplace升级到MySQL 8.0.20 7.5.1 升级之前的预检查 a. 安装mysqlsh [root@db01 opt]# tar xf mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz [root@db01 opt]# ln -s /opt/mysql-shell-8.0.20-linux-glibc2.12-x86-64bit /usr/local/mysqlsh[root@db01 opt]# cd /usr/local/mysqlsh/[root@db01 bin]# vim /etc/profileexport PATH=/usr/local/mysqlsh/bin:$PATH[root@db01 bin]# source /etc/profile[root@db01 bin]# mysqlsh —versionmysqlsh Ver 8.0.20 for Linux on x86_64 - for MySQL 8.0.20 (MySQL Community Server (GPL)) b. 在3357数据库中root@root@10.0.0.%创建链接用户 [root@db01 bin]# mysql -S /tmp/mysql3357.sock -uroot -p123mysql> create user root@’10.0.0.%’ identified with mysql_native_password by ‘123’; mysql> grant all on . to root@’10.0.0.%’; c. *升级前检测 [root@db01 ~]# mysqlsh root:123@10.0.0.51:3357 -e “util.checkForServerUpgrade()” >>/tmp/up.log 7.5.2 正式升级 a. 安装 新版本软件 8.0.20 ok。 b. 停原库 # 1. 快速关库功能关闭(优雅关闭) 连接到数据库中(5.7.30),执行以下语句。 mysql> set global innodb_fast_shutdown=0 ; mysql> select @@innodb_fast_shutdown; mysql> shutdown ; c. 使用高版本软件(8.0.20)挂低版本(5.7.30)数据启动 [root@db01 opt]# vim /data/3357/my.cnf [mysqld]user=mysqlbasedir=/usr/local/mysqldatadir=/data/3357/datasocket=/tmp/mysql3357.sockport=3357default_authentication_plugin=mysql_native_password [mysql]socket=/tmp/mysql3357.sock [root@db01 data]# /usr/local/mysql/bin/mysqld_safe —defaults-file=/data/3357/my.cnf —skip-grant-tables —skip-networking & #启动 并 升级Ps: 升级时添加参数的意义:1. 跳过网络连接: 不让用户登入操作数据库 2.跳过授权表: 升级时可能升级系统表,尽可能不要占用 d. 重启数据库到正常状态 [root@db01 data]# mysqladmin -S /tmp/mysql3357.sock shutdown[root@db01 data]# /usr/local/mysql/bin/mysqld_safe —defaults-file=/data/3357/my.cnf &