一、一条查询语句是如何执行的?
连接器判断有无mysql服务端执行权限,
分析器会分析这条查询语句有无语法错误和告诉mysql想干什么
优化器选择使用哪个索引,即告诉mysql该怎么做最好
执行器负责执行并返回结果
数据库引擎用于存储数据和读写
二、一条更新语句是如何执行的?
更新语句相比查询,在取出要更新的数据段并更新后会进行日志的写入
使用InnoDB引擎的数据库除了记录binlog日志外还会记录redolog日志
并且是先记录redolog再记录binlog,分两阶段提交。
innodb的每次写操作都是一次事务
两阶段体现在:
1.引擎在更新数据后,将这个更新操作记录到redolog里面,redolog进入prepare状态并告知执行器可以随时提交事务
2.执行器生成这个操作的binlog并写入磁盘,之后把刚刚写入的redolog状态更改为提交commit;
Redo log是物理记录这个页 “做了什么改动”。
binlog是逻辑日志,记录了mysql语句,并且是固定大小循环写的
三、如何备份mysql
1.利用binlog日志
先修改my.cnf
注意这里的log_bin为binlog日志的存放位置,我们需要将这个文件夹的权限设为mysql运行用户的权限,且我这里将binlog日志命名为binlog(可换成别的)。
再重启mysql服务
我们可以看到此时log_bin已经处于开启状态
因为binlog日志会有很多个
我们需要知道当前是在使用哪个binlog日志来记录
因为binlog文件是二进制的直接cat无法查看我们需要用mysqlbin工具
看着还是乱再输入命令
这下简洁多了
mysqlbinlog --no-defaults --base64-output='decode-rows' -v binlog日志文件
1.# at 5538
文件的偏移位置
2.#200401 13:38:17
时间20年4月1号
3.SET TIMESTAMP=1585719497/*!*/;
BEGIN
具体的执行语句
一行的记录产生的日志以SET TIMESTAMP=1585719497/*!*/开始,以COMMIT/*!*/;结束
模拟业务场景动手试试
mysql利用mysqlbinlog命令恢复误删除数据_数据库_chaigang的博客-CSDN博客
mysql中binlog日志及备份恢复 - 南极山 - 博客园
实际在恢复数据前需要进行一次加锁和全库备份
网友评论