mysql结构
mysql分为server层和存储引擎层
- 连接器: mysql客户端有很多, 管理与客户端的连接, 密码校验
- 缓存: 查询条件一模一样才能使用到缓存, 但是如果对表数据有更新,缓存就会失效, 很难被利用, mysql8.0版本废弃
- 分析器: 进行语法分析, 解析sql中的各种关键字,空格,形成一个语法树
- 优化器: 对sql优化, 例如去掉重复条件, 执行索引计划, 选择合适的索引, 调整适合索引的顺序
- 执行器: 调用存储引擎的接口, 去磁盘读写数据
InnoDB执行过程
undo log:
1.事务回滚用
2.可重复读级别保证数据一致性
redo log:
1. mysql宕机时, 数据恢复用
2. 磁盘顺序写, 提高性能
bin log:
1. 操作系统断电时, 数据恢复用
2. 主从同步
数据恢复
前提:
1. 数据定期备份
2. 开启bin log, 日志保存天数需在备份日期之前
用系统自带工具mysqlbinlog
1. 查看binlog文件
mysqlbinlog --no-defaults -v --base64-output=decode-rows E:/mysql-5.7.25/data/mysql-binlog.000001
2. 查binlog带日期条件
mysqlbinlog --no-defaults -v --base64-output=decode-rows E:/mysql-5.7.25/data/mysql-binlog.000002 start-datetime="2023-09-19 00:00:00" stop-datetime="2023-09-20 00:00:00" start-position="2000" stop-position="20000"
1. 根据坐标恢复
mysqlbinlog --no-defaults --start-position=500 --stop-position=900 --database=test E:/mysql-5.7.25/data/mysql-binlog.000002
2. 根据日期恢复
mysqlbinlog --no-defaults --start-datetime="2023-09-19 23:15:00" --stop-datetime="2023-09-19 23:20:00" --database=kk E:/mysql-5.7.25/data/mysql-binlog.000002
日志查询
1. 查看错误日志
show variables like '%log_error%';
2. 查客户端连接/关闭日志, sql执行日志
SET GLOBAL general_log=on;
show variables like '%general_log%';