查看记录二进制日志详细信息
SHOW VARIABLES LIKE '%log_bin%' 

log_bin 为 ON说明这个参数是开启的,就是说系统是记录了bin log的
log_bin_basename 配置了bin log的文件路径及文件前缀名
log_bin_index 配置了bin log索引文件的路径
查看当前使用日志列表
show master status 

根据log_bin_basename的路径查看binlog具体文件
 
使用binlog日志恢复数据
原理:当数据库发生变化时,binlog会记录数据库中的所有变化;需要恢复的时候可以根据binlog中的开始位置和结束位置还原本部分操作;结束位置一般是数据被破坏或删除之前的位置。
注意:一切操作在本地测试库进行
最好把日志文件拷贝出来,到本地库恢复,因为这个文件记录当前数据库连接下所有库的操作,防止影响其他库的正常数据,所以最好将数据恢复到本地,然后同步回生产库
恢复时需要在binlog中找到两个位置:
- 数据恢复的起始位置
 - 数据恢复的结束位置
 
通过mysqlbinlog将binlog转为sql,以方便查询具体位置
如果没有配置Mysql环境变量 需要进入mysql的安装路径bin目录下 执行命令
将binlog转为sql
mysqlbinlog --set-charset=utf-8 /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003 >data.sql 
导出某段时间
mysqlbinlog --start-datetime="2022-09-09 09:00:00" --stop-datetime="2022-09-09 11:00:00" --base64-output=decode-rows -vv /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003 >data.sql 
 
通过mysqlbinlog执行恢复操作
通过偏移量数据修复
mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003  --start-position=59571111  --stop-position=93031069  | mysql -f -u 账号 -p密码 
/Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ-bin.000003     要操作binlog文件
 --start-position=59571111                                                              数据恢复的起始位置
 --stop-position=93031069                                                            数据恢复的结束位置
-f                                                                                                       遇到错误时强制执行
 mysql -uroot -p123456                                                                  数据恢复需要登录数据库
-  
在
mysqlbinlog命令中使用--database选项(部分情况适用)- 基本原理: 
- 当你的二进制日志格式是基于语句(Statement - based)或者混合模式(Mixed - based)时,
--database选项可以帮助你筛选出只与指定数据库相关的操作。例如,如果你想恢复数据库test_db,可以使用命令 mysqlbinlog --database = 数据库名 /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003 --start - position=59571111 --stop - position=93031069 | mysql - f - u 账号 - p密码
 - 当你的二进制日志格式是基于语句(Statement - based)或者混合模式(Mixed - based)时,
 - 局限性: 
- 对于基于行(Row - based)的二进制日志格式,
--database选项可能不会按照你期望的方式工作。因为在基于行的格式中,日志记录的是每行数据的变化,可能不会明确区分是哪个数据库的操作,所以这种情况下可能无法精准地只恢复指定数据库的内容。 
 - 对于基于行(Row - based)的二进制日志格式,
 
 - 基本原理: 
 - 通过解析二进制日志内容手动筛选(更灵活但复杂) 
- 查看日志内容: 
- 首先使用
mysqlbinlog工具查看二进制日志内容,例如mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003。在日志内容中,你可以找到与数据库操作相关的记录,如Query事件中会包含执行的 SQL 语句,其中会有数据库名称相关的信息。 
 - 首先使用
 - 手动提取相关操作: 
- 根据数据库名称来手动提取与要恢复的数据库相关的操作。例如,如果要恢复数据库
test_db,你需要在日志中找到所有涉及test_db的INSERT、UPDATE、DELETE等操作的记录。这可能需要一些脚本或者文本处理工具来辅助完成。比如,在 Linux 环境下可以使用grep命令来筛选包含test_db的行,如mysqlbinlog /Users/yuzhenhua/Desktop/iZ8vb9b97xf7mvZ - bin.000003 | grep test_db,然后再对筛选后的内容进行进一步分析,确定哪些是需要恢复的操作,并将这些操作重新应用到数据库中。 
 - 根据数据库名称来手动提取与要恢复的数据库相关的操作。例如,如果要恢复数据库
 
 - 查看日志内容: 
 
