mysql 常用命令(二)

一、 MysQL 8.0 企业实施规范
1. 确认版本
2. 软件命名规则
3. 获取 MySQL 软件
官网:
https://www.mysql.com/support/supportedplatforms/database.html
https://www.mysql.com/support/eol-notice.html
准备安装 MySQL 时,请确定要使用哪个版本和发行格式(二进制或源码)。
首先,决定要安装开发版本还是通用版本( GA )。开发版本具有最新功能,但不建议用于生产环境。
GA 版本(也称为生产版本或稳定版本)是供生产使用的。
MySQL 8.0 中的命名方案使用的发行版名称由三个数字和一个可选的后缀组成(例如, **mysql-
8.0.1-dmr** )。版本名称中的数字解释如下:
- 第一个数字( **8** )是主版本号。
- 第二个数字( **0** )是次要版本号。总而言之,主要和次要数字构成发行版本号。序列号描述了稳定
的功能集。
- 第三个数字( **1** )是发行系列中的版本号。对于每个新的错误修正版本,此值均递增。在大多数情
况下,系列中的最新版本是最佳选择。
版本名称也可以包含一个后缀,以指示版本的稳定性。在一系列发行中,发布会通过一组后缀来指示稳定
性水平如何提高。可能的后缀是:
- **dmr** 指示开发里程碑版本( DMR )。 MySQL 开发使用里程碑模型,其中每个里程碑都引入了一小部
分经过全面测试的功能。从一个里程碑到下一个里程碑,基于尝试这些正常发布的社区成员提供的反馈,功能
界面可能会更改,甚至功能可能会被删除。里程碑版本中的功能可能被视为具有预生产质量。
- **rc** 表示发布候选( RC )。通过了 MySQL 的所有内部测试后,发布候选版本被认为是稳定的。 RC
本中可能仍会引入新功能,但是重点将转移到修复错误上,以稳定本系列中较早引入的功能。
- 没有后缀表示具有一般可用性( GA )或正式版。 GA 版本稳定,已成功通过了较早的发行阶段,并且被认
为是可靠的,没有严重的错误并且适合在生产系统中使用。
https://downloads.mysql.com/archives/community/ Directory
Contents of Directory
bin
mysqld server, client and utility programs
docs
MySQL manual in Info format
man
Unix manual pages
include
Include (header) files
lib
Libraries
share
Error messages, dictionary, and SQL for database installation
support - files
5Miscellaneous support files
4.MD5 验证软件包
5.MySQL 8.0.x 安装过程
5.1 安装准备
通用 Unix / Linux 二进制软件包的 MySQL 安装布局
5.2 开始部署
二、 安装后的基本配置启动
md5sum mysql-xxx.tar.gz
aaab65abbec64d5e907dcd41b8699945 mysql-xxx.tar.gz
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar xvf /path/to/mysql-VERSION-OS.tar.xz
shell> xz -dc /path/to/mysql-VERSION-OS.tar.xz | tar x
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> export PATH=$PATH:/usr/local/mysql/bin
shell> yum install libaio # install library
shell> cd mysql
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files
shell>bin/mysqld --initialize --user=mysql
--basedir=/usr/local/mysql
--datadir=/data/mysql/data_3306
shell> bin/mysql_ssl_rsa_setup
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server
三、安装后登陆
shell> bin/mysqld_safe --user=mysql &
[root@db01 support-files]# mysqlsh root:123@10.0.0.11:3307 -e
"util.checkForServerUpgrade()"
shell> mysql
1. MySQL 8.0 体系结构介绍
2. MySQL 8.0 Server 层(逻辑层)结构 新姿势
2.1 客户端 / 服务端模型
2.1.1 Connectors
2.1.2 MySQL Server
2.1.3 MySQL 8.0 " 新姿势 "
2.2 实例结构
2.2.1MySQL 的内存结构
2.2.2 MySQL 中的线程
2.3 MySQL 语句处理逻辑及源码结构
3. MySQL 8.0 存储引擎结构 新姿势
3.1 文件结构
3.2 存储引擎微观存储结构
4. MySQL 8.0 用户及安全管理
4.1 用户的介绍
4.1.1 用户的功能
4.1.2 用户的组成
4.2 用户的管理
4.2.1 创建用户
4.2.2 查询用户
4.2.3 删除用户 ( 不代表生产操作 )
4.2.4 修改用户
4.2.5 密码加密插件导致的坑
4.2.6 用户资源管理
4.3 权限的介绍
4.4 权限级别
4.5 角色介绍
4.6 授权管理
4.6.0 权限列表
4.5.1 授权
4.5.2 查看权限
4.5.3 回收
5. MySQL 多种连接方式介绍
5.1 Socket
5.2 TCP/IP
5.3 客户端工具
5.4 基于 SSL 的安全连接
6. MySQL 8.0 初始化配置方式
6.1 初始化配置方式
6.2 初始化配置文件应用
7. MySQL 8.0 启动和关闭流程
7.1 启动方式介绍
7.2 多种启动方式应用
8. MySQL 8.0 多实例的配置应用
8.1 配置文件准备
8.2 数据初始化
8.3 启动脚本准备
9.MySQL 8.0 的日志配置管理
9.1 错误日志
9.2 二进制日志( binlog
9.2.1 作用
9.2.2 配置方法
9.3 慢日志(
slow_log
9.3.1 作用
9.3.2 配置方法 10. MySQL 的升级及降级
10.1 升级方式介绍
10.1.1 INPLACE 就地
10.1.2 Mergeing(logical) 迁移
10.2 升级注意事项
10.3 INPLACE 升级过程原理 (生产思路)
10.4 5.6.46 ----> 5.7.30 Inplace 升级演练
10.4.1 安装 新版本软件
10.4.2 停原库 (
5.6.46
10.5 5.7 升级至 8.0
10.5.1 预检查
10.5.2 MySQL 5.7.30 升级至 8.0.20 版本演练
10.6 降级
10.6.1 限制
10.6.2 MySQL 5.7.30 TO 5.7.10 inplace downgrade 演练
10.6.3 MySQL 5.7.30 TO 5.6.46 logical downgrade 演练
1. MySQL 8.0 体系结构介绍
2. MySQL 8.0 Server 层(逻辑层)结构 新姿
2.1 客户端 / 服务端模型
2.1.1 Connectors
2.1.2 MySQL Server
2.1.3 MySQL 8.0 " 新姿势 "
MySQL Protocol
Socket (Unix Scoket)
TCP/IP
API
Native API
C PHP JDBC ODBC .NET Python Go...
Management Service && Utilties
Metadata (NEW!!)
Plugins(NEW!!)
Security (NEW!!)
Backup && Restore (NEW !!)
Replication (NEW!!)
Cluster(NEW!!)
Administration
Configuration
Migration
Connection Management
Authentication (NEW!!)
Thread Reuse
Connection Limit
Check Memory
SQL Interface
DDL(NEW!!)
DML
procedures
function NEW!!
view
triggers
JSON (NEW!!)
Parser
Query translation
Object privileges
Optimizer (NEW!!)
Explain Statistics
Cache && Buffers(NEW!!)
- Metadata 结构变化
- 5.7 版本问题
- 两套数据字典信息( Server frm InnoDB 数据字典)
- DDL 无原子化
- frm innodb 层会出现不一致
- 并发处理需要小心处理( MDL,dict_sys::mutex,dict_sys::rw_lock
- 崩溃无法恢复
2.2 实例结构
2.2.1MySQL 的内存结构
- 8.0 变化
- 支持事务性 DDL ,崩溃可以回滚,保证一致。
drop table a,c;
- 保留一份数据字典信息,取消 frm 数据字典。
- 数据字典存放至 InnoDB 表中
- 采用套锁机制,管理数据字典的并发访问( MDL
- 全新的 Plugin 支持
- 8.0.17+ 加入 Clone Plugin, 更好的支持 MGR InnoDB Cluster 的节点管理
- 安全加密方式改变
- 改变加密方式为 caching_sha2_password
- SSL 将支持到 TLSv1.3 版本。
- 用户管理及认证方式改变
- 改变授权管理方式
- 加入 role 角色管理
- 添加更多权限
- 原子性 DDL
- 支持原子性 DDL
- Cache && Buffer 的变化
- 取消 Query Cache
2.2.2 MySQL 中的线程
2.3 MySQL 语句处理逻辑及源码结构 3. MySQL 8.0 存储引擎结构 新姿势 3.1 文件结构 3.2 存储引擎微观存储结构 4. MySQL 8.0 用户及安全管理
4.1 用户的介绍
4.1.1 用户的功能
4.1.2 用户的组成
4.2 用户的管理
4.2.1 创建用户
4.2.2 查询用户
登录数据库
管理数据库对象
用户名 @' 白名单 '
白名单 ?
地址列表 :
%
10.0.0.10
10.0.0.%
10.0.0.5%
10.0.0.0/255.255.254.0
oldguo.com
db01
127.0.0.1
localhost ----> socket
create user oldguo@'10.0.0.%' identified by '123';
sha2 : 8.0 新的特性
native: 兼容老版本
create user oldboy@'10.0.0.%' identified with mysql_native_password by '123';
mysql> select user,host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| oldboy | 10.0.0.% | mysql_native_password |
| oldguo | 10.0.0.% | caching_sha2_password |
| root | 10.0.0.% | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)
mysql>
4.2.3 删除用户 ( 不代表生产操作 )
4.2.4 修改用户
4.2.5 密码加密插件导致的坑
4.2.6 用户资源管理
密码过期时间
密码重用
锁定用户
连接资源限制
4.3 权限的介绍
drop user oldguo@'10.0.0.%';
drop user oldboy@'10.0.0.%';
alter user oldguo@'10.0.0.%' identified with mysql_native_password by '123456';
主从 , 高可用 , 老版本开发工具
select @@default_password_lifetime;
SET PERSIST default_password_lifetime = 180;
SET PERSIST default_password_lifetime = 0;
CREATE USER 'oldguo'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'oldguo'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
CREATE USER 'oldguo'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'oldguo'@'localhost' PASSWORD EXPIRE NEVER;
password_history=6
password_reuse_interval=365
ALTER USER 'old_app_dev'@'localhost' ACCOUNT LOCK;
with
MAX_QUERIES_PER_HOUR count
MAX_UPDATES_PER_HOUR count
MAX_CONNECTIONS_PER_HOUR 2000;
MAX_USER_CONNECTIONS count
基础权限 , 命令
role , 基础权限集合
4.4 权限级别
4.5 角色介绍
4.6 授权管理
4.6.0 权限列表
db : 全库级别 *.* , 单库级别 oldboy.*
tables : 单表级别 oldboy.t1
columns: select(id,name)
权限的集合 .
show privileges;
Alter
Alter routine
Create
Create routine
Create role
Create temporary tables
Create view
Create user
Delete
Drop
Drop role
Event
Execute
File
Grant option
Index
Insert
Lock tables
Process
Proxy
References
Reload
Replication client
Replication slave
Select
Show databases
Show view
Shutdown
Super
Trigger
Create tablespace
Update 4.5.1 授权
普通权限授权
角色创建及授权
生产中用户类型规范
4.5.2 查看权限
4.5.3 回收
5. MySQL 多种连接方式介绍
5.1 Socket
5.2 TCP/IP
mysql> grant all on *.* to oldboy@'10.0.0.%' ;
mysql> grant select ,update ,delete ,insert on *.* to oldguo@'10.0.0.%' ;
mysql> grant select ,update ,delete ,insert on test.* to test@'10.0.0.%';
mysql> grant select(id) on oldboy.t1 to user1@'10.0.0.%';
mysql> create role dev@'10.0.0.%';
mysql> grant select on *.* to dev@'10.0.0.%';
mysql> grant dev to user2@'10.0.0.%';
mysql.role_edges;
information_schema.user_privileges;
管理员 : ALL
开发 : Create ,Create routine,Create temporary tables,Create view,Delete ,Event
,Execute,Insert ,References,Select,Show databases ,Show view ,Trigger,Update
监控 : select , replication slave , client supper
备份 : ALL
主从 : replication slave
业务 : insert , update , delete ,select
show grants for oldboy@'10.0.0.%' ;
mysql> revoke delete on *.* from oldguo@'10.0.0.%';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for oldguo@'10.0.0.%';
mysql> revoke select(id) on oldboy.t1 from user1@'10.0.0.%';
前提 : 必须创建和授权 localhost 相关用户
mysql> create user oldguo@'localhost' identified by '123';
mysql> grant all on *.* to oldguo@'localhost' with grant option;
[root@db01 ~ 17:54:55]# mysql -uoldguo -p123 -S /tmp/mysql.sock 5.3 客户端工具
注意一点 : mysql_native_password
5.4 基于 SSL 的安全连接
6. MySQL 8.0 初始化配置方式
6.1 初始化配置方式
6.2 初始化配置文件应用
前提 : 必须创建和授权远程网段相关用户
mysql> create user oldguo@'10.0.0.%' identified by '123';
mysql> grant all on *.* to oldguo@'10.0.0.%' with grant option;
[root@db01 ~ 17:59:15]# mysql -uoldguo -p123456 -h 10.0.0.51 -P3306
mysql> show variables like '%ssl%';
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| have_openssl | YES |
| have_ssl | YES |
| mysqlx_ssl_ca | |
| mysqlx_ssl_capath | |
| mysqlx_ssl_cert | |
| mysqlx_ssl_cipher | |
| mysqlx_ssl_crl | |
| mysqlx_ssl_crlpath | |
| mysqlx_ssl_key | |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_fips_mode | OFF |
| ssl_key | server-key.pem |
+--------------------+-----------------+
17 rows in set (0.01 sec)
[root@db01 data]# mysql_ssl_rsa_setup
mysql -uroot -p123 -h10.0.0.51 --ssl-cert=/data/mysql/data_3306/client-cert.pem -
-ssl-key=/data/mysql/data_3306/client-key.pem
[ 标签 ]
配置 =xxx
配置 =xxx
配置 =xxx
[ 标签 ]
...
标签 : 7. MySQL 8.0 启动和关闭流程
7.1 启动方式介绍
7.2 多种启动方式应用
server:
[server]
[mysqld]
[mysqld_safe]
client( 不影响远程 ):
[client]
[mysql]
[mysqldump]
配置示例 :
[root@db01 ~ 18:29:04]# cat /etc/my.cnf
[mysqld]
user=mysql # 管理用户
#basedir=/usr/local/mysql57
basedir=/usr/local/mysql8 # 软件路径
datadir=/data/mysql/data_3306 # 数据路径
socket=/tmp/mysql.sock #socket 文件位置
server_id=6 # 服务器 ID, 主从时标识不同主机
log_bin=/data/mysql/binlog_3306 # 二进制日志
port=3306 # 端口
#skip_name_resolve
ssl
[mysql]
socket=/tmp/mysql.sock
调用非默认路径配置文件方法 :
mysqld_safe --defaults-file=/opt/oldguo.cnf &
systemd ---->/etc/init.d/mysqld ----->mysql.server-------> mysqld_safe & ---->
mysqld &
systemctl start mysqld
mysqld_safe -- 参数 &
mysqld -- 参数 &
mysql> shutdown ;
systemctl stop mysqld
service mysqld stop
mysqladmin -uroot -p123 shutdown
连接层:
1. 提供连接协议: socket tcpip
2. 提供用户验证:授权表 user
--skip-grant-tables
--skip-networking
(1) 停数据库
systemctl stop mysqld
(2) 启动安全模式
8. MySQL 8.0 多实例的配置应用
8.1 配置文件准备
8.2 数据初始化
[root@db01 ~ 10:20:55]# mysqld_safe --skip-grant-tables --skip-networking &
3 )改密码
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123456';
4 ) 重启数据库到正常模式
[root@db01 ~ 10:22:24]# /etc/init.d/mysqld restart
mkdir -p /data/330{7..9}/data
mkdir -p /data/mysql/binlog_330{7..9}
chown -R mysql.mysql /data/*
cat > /data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql8
datadir=/data/3307/data
socket=/tmp/mysql3307.sock
server_id=7
log_bin=/data/mysql/binlog_3307/mysql-bin
port=3307
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql8
datadir=/data/3308/data
socket=/tmp/mysql3308.sock
server_id=8
log_bin=/data/mysql/binlog_3308/mysql-bin
port=3308
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql8
datadir=/data/3309/data
socket=/tmp/mysql3309.sock
server_id=9
log_bin=/data/mysql/binlog_3309/mysql-bin
port=3309
EOF
8.3 启动脚本准备
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql8 --
datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql8 --
datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql8 --
datadir=/data/3309/data
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF
cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
9 .MySQL 8.0 的日志配置管理
9.1 错误日志
9.2 二进制日志( binlog
9.2.1 作用
9.2.2 配置方法
9.3 慢日志( slow_log
9.3.1 作用
9.3.2 配置方法
作用:
从启动开始,发生过的 error warning note 信息。
定位数据库问题:报错,异常(死锁)。
配置:
默认位置:
log_error=$DATDDIR/hostname.err
看日志: 主要关注 [ERROR],deadlock
数据恢复
复制
server_id = 大于 0 的值,如果是主从复制,需各节点不同 Server_id
log_bin= /data/mysql/binlog_3306/mysql-bin
注意: 日志和数据一定要分开存储
提前了解下
show variables like '%binlog%'
max_binlog_size
max_binlog_cache_size
binlog_expire_logs_seconds
binlog_format
sync_binlog
记录 MySQL 工作中,运行较慢的语句。用来定位 SQL 语句性能问题。
开关:
slow_query_log=1
slow_query_log_file=/data/mysql/data_3306/db01-slow.log
维度:
long_query_time=0.5
log_queries_not_using_indexes
min_examined_row_limit=100 ## 谨慎使用
10. MySQL 的升级及降级
10.1 升级方式介绍
10.1.1 INPLACE 就地
10.1.2 Mergeing(logical) 迁移
10.2 升级注意事项
10.3 INPLACE 升级过程原理 (生产思路)
10.4 5.6.46 ----> 5.7.30 Inplace 升级演练
在一台服务器上,原版本升级到新版本。
风险较大。
除非是主从环境。
**** 建议 : 不管哪种方式升级,都应该先做备份。方便失败回退。 ****
备份方式
主从方式
Upgrade is only supported between General Availability (GA) releases.
Upgrade from MySQL 5.6 to 5.7 is supported. Upgrading to the latest release is
recommended before upgrading to the next version. For example, upgrade to the
latest MySQL 5.6 release before upgrading to MySQL 5.7.
Upgrade that skips versions is not supported. For example, upgrading directly
from MySQL 5.5 to 5.7 is not supported.
Upgrade within a release series is supported. For example, upgrading from MySQL
5.7.x to 5.7.y is supported. Skipping a release is also supported. For example,
upgrading from MySQL 5.7.x to 5.7.z is supported.
a. 支持 GA 版本之间升级
b. 5.6--> 5.7 , 先将 5.6 升级至最新版,再升级到 5.7
c. 5.5 ---> 5.7 , 先将 5.5 升级至最新,再 5.5---> 5.6 最新,再 5.6--->5.7 最新
d. 回退方案要提前考虑好,最好升级前要备份 ( 特别是往 8.0 版本升级 )
e. 降低停机时间(停业务的时间) , 在业务不繁忙期间升级,做好足够的预演。
0. 备份原数据库数据
a. 安装新版本软件
b. 关闭原数据库业务(挂维护页)
c. 使用新版本软件 旧版本数据启动 (--skip-grant-tables ,--skip-networking)
d. 升级 : 只是升级系统表。升级时间和数据量无关的。
e. 正常重启数据库。
f. 验证各项功能是否正常。
g. 业务恢复。
建议: inpalce 升级最好是主从环境,先从库再主库。
10.4.1 安装 新版本软件
10.4.2 停原库 ( 5.6.46
10.5 5.7 升级至 8.0
10.5.1 预检查
略。参考多版本多实例配置。
# 1. 快速关库功能关闭 ( 优雅关闭、干净的关闭 )
vim /data/3317/my.cnf
## 添加以下配置
innodb_fast_shutdown=0
[root@db01 data]# systemctl stop mysqld3317
c. 使用高版本软件挂低版本数据启动
[root@db01 data]# vim /data/3317/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3317/data
socket=/tmp/mysql3317.sock
port=3317
server_id=17
innodb_fast_shutdown=0
[root@db01 data]# /usr/local/mysql/bin/mysqld_safe --defaults-
file=/data/3317/my.cnf --skip-grant-tables --skip-networking &
d. 升级 (升级到 8.0 可以省略)
[root@db01 data]# /usr/local/mysql/bin/mysql_upgrade -S /tmp/mysql3317.sock --
force
e. 重启数据库到正常状态
[root@db01 data]# /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3317.sock
shutdown
[root@db01 data]# vim /etc/systemd/system/mysqld3317.service
# 修改以下内容
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3317/my.cnf
# 启动数据库
[root@db01 data]# systemctl start mysqld3317
# 连接查看
[root@db01 data]# /usr/local/mysql/bin/mysql -S /tmp/mysql3317.sock
10.5.2 MySQL 5.7.30 升级至 8.0.20 版本演练
# 新特性:
1 mysql-shell 工具, 8.0 以后,可以调用这个命令,升级之前的预检查。
例子:
[root@db01 ~]# mysqlsh root:123@10.0.0.51:3306 -e "util.checkForServerUpgrade()"
2 、升级时不再需要手工 mysql_upgrade
3 、限制:升级前必须要备份。否则无法回退。
a. 下载 8.0.20 版本的 mysql-shell ,并安装 。
https://downloads.mysql.com/archives/
[root@db01 app]# yum install -y mysql-shell-8.0.20-1.el7.x86_64.rpm
b. 创建连接用户
[root@db01 data]# /usr/local/mysql/bin/mysql -S /tmp/mysql3317.sock
mysql> grant all on *.* to root@'10.0.0.%' identified by '123';
mysql> drop user root@'127.0.0.1';
mysql> drop user root@'db01';
mysql> drop user ''@'db01';
mysql> drop user ''@'localhost';
mysql> drop user root@'::1';
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | 10.0.0.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
c. 预 检查
[root@db01 data]# mysqlsh root:123@10.0.0.51:3317 -e
"util.checkForServerUpgrade()" >/tmp/up.log
d. 停原库( 5.7.30
vim /data/3317/my.cnf
## 添加以下配置
innodb_fast_shutdown=0
[root@db01 data]# systemctl stop mysqld3317
e. 使用高版本软件挂低版本数据启动
[root@db01 data]# vim /data/3317/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql80
datadir=/data/3317/data
socket=/tmp/mysql3317.sock
port=3317
server_id=17
innodb_fast_shutdown=0
[root@db01 data]# /usr/local/mysql80/bin/mysqld_safe --defaults-
file=/data/3317/my.cnf --skip-grant-tables --skip-networking &
1 0.6 降级
10.6.1 限制
10.6.2 MySQL 5.7.30 TO 5.7.10 inplace downgrade 演练
f. 重启数据库到正常状态
[root@db01 data]# /usr/local/mysql80/bin/mysqladmin -S /tmp/mysql3317.sock
shutdown
[root@db01 data]# vim /etc/systemd/system/mysqld3317.service
# 修改以下内容
ExecStart=/usr/local/mysql80/bin/mysqld --defaults-file=/data/3317/my.cnf
# 启动数据库
[root@db01 data]# systemctl start mysqld3317
# 连接查看
[root@db01 data]# /usr/local/mysql80/bin/mysql -S /tmp/mysql3317.sock
官方解释:
https://dev.mysql.com/doc/refman/5.7/en/downgrade-paths.html
Downgrade from MySQL 5.7 to 5.6 is supported using the logical downgrade method.
https://dev.mysql.com/doc/refman/5.7/en/downgrade-binary-package.html#downgrade-
procedure-inplace
In-place downgrade is supported for downgrades between GA releases within the
same release series(5.7.y ---> 5.7.x).
# 软件规划
原版本:
软件: 5.7.30 /usr/local/mysql + 数据: /data/3306/data
目标版本: 5.7.10 /usr/local/mysql5710
# 安装 5.7.10 (低) 二进制版本
[root@db01 app]# ln -s mysql-5.7.10-linux-glibc2.5-x86_64 mysql5710
# 针对 5728 版本(高)进行处理工作
https://dev.mysql.com/doc/refman/5.7/en/downgrading-to-previous-series.html
[root@db01 app]# cp /etc/my.cnf.bak /etc/my.cnf
[root@db01 app]# /etc/init.d/mysqld restart
[root@db01 app]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql.sock
set
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_
ENGINE_SUBSTITUTION' ;
set global
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_
ENGINE_SUBSTITUTION' ;
select @@sql_mode;
ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE
utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE
utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL
DEFAULT '';
10.6.3 MySQL 5.7.30 TO 5.6.46 logical downgrade 演练
ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL
DEFAULT '';
# 优雅的关闭 5.7.30 (高)。
[root@db01 app]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql.sock
set global innodb_fast_shutdown=0 ;
[root@db01 app]# /usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown
# 删除 ib_logfile*
[root@db01 mysql5710]# rm -rf /data/3306/data/ib_logfile*
# 替换配置文件(替换成低版本)
[root@db01 mysql5710]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql5710
#basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
# 低版本启动高版本数据库
/usr/local/mysql5710/bin/mysqld --skip-grant-tables --skip-networking &
# 执行 upgrade
[root@db01 ~]# /usr/local/mysql5710/bin/mysql_upgrade -uroot -p123456 --force
# 启动到正常模式
[root@db01 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
/usr/local/mysql5710/bin/mysql -uroot -p123456 -S /tmp/mysql.sock
# 恢复 5.7.30 环境
[root@db01 data]# pkill mysqld
[root@db01 data]# rm -rf /data/3306/data/*
# 恢复配置文件
[root@db01 data]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
# 恢复环境变量
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db01 data]# source /etc/profile [root@db01 data]# mysql -V
mysql Ver 14.14 Distrib 5.7.30, for linux-glibc2.12 (x86_64) using EditLine
wrapper
# 初始化数据
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --
datadir=/data/3306/data
# 启动数据库
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
SUCCESS!
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.30 |
+-----------+
1 row in set (0.00 sec)
# 安装 5.6.46 二进制版本软件
略。
# 处理 5.7.30 高版本数据
set
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_
ENGINE_SUBSTITUTION' ;
set global
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_
ENGINE_SUBSTITUTION' ;
select @@sql_mode;
ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE
utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE
utf8_bin NOT NULL DEFAULT '';
ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL
DEFAULT '';
ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL
DEFAULT '';
ALTER TABLE mysql.tables_priv MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.columns_priv MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.user MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.db MODIFY User char(16) NOT NULL default '';
ALTER TABLE mysql.procs_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;
ALTER TABLE mysql.user ADD Password char(41) character set latin1
collate latin1_bin NOT NULL default '' AFTER user;
UPDATE mysql.user SET password = authentication_string WHERE
LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
UPDATE mysql.user SET authentication_string = '' WHERE
LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
ALTER TABLE mysql.help_category ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_keyword ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_relation ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.help_topic ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_leap_second ENGINE='MyISAM'
STATS_PERSISTENT=DEFAULT; ALTER TABLE mysql.time_zone_name ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_transition ENGINE='MyISAM'
STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.time_zone_transition_type ENGINE='MyISAM'
STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.plugin ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.servers ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin
DEFAULT 'mysql_native_password';
DROP DATABASE sys;
# 逻辑全备 5.7.30 数据
[root@db01 ~]# mysqldump -A >/tmp/full.sql
# 初始化一套 5.6.46 的空环境
[root@db01 ~]# vim /etc/profile
export PATH=/usr/local/mysql56/bin:$PATH
[root@db01 ~]# source /etc/profile
[root@db01 ~]# mysql -V
mysql Ver 14.14 Distrib 5.6.46, for linux-glibc2.12 (x86_64) using EditLine
wrapper
[root@db01 ~]# mv /etc/my.cnf /etc/my.cnf.bak
mv: overwrite ‘/etc/my.cnf.bak’? y
[root@db01 data]# rm -rf /data/3317/data/*
[root@db01 data]# /usr/local/mysql56/scripts/mysql_install_db --user=mysql --
basedir=/usr/local/mysql56 --datadir=/data/3317/data
[root@db01 data]# vim /etc/systemd/system/mysqld3317.service
ExecStart=/usr/local/mysql56/bin/mysqld --defaults-file=/data/3317/my.cnf
[root@db01 data]# systemctl daemon-reload
[root@db01 data]# systemctl start mysqld3317
# 恢复备份数据到 5.6.46
[root@db01 data]# mysql -S /tmp/mysql3317.sock
mysql> source /tmp/full.sql
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值