mysql数据库还原到指定的时间

126 阅读2分钟
  1. mysql数据库要还原的指定的时间,需要mysql开启了binlog日志,binlog日志记录的是整个mysql服务的日志。所以当你需要还原指定数据库时需要指定数据库名称
  2. 执行还原前最好通过 flush logs 刷新日志文件,这样还原执行的语句会记录到新的binlog日志文件中

show variables LIKE '%log_bin%'; --查看binlog开启状态 image.png

show variables LIKE 'binlog%'; --查询binlog的模式

show master logs; --查询binlog日志列表

show master status; --查询binlog当前的状态 pos的值

show binlog events in 'binlog.000009'; -- 查询binlog.000009日志

flush logs; -- 刷新日志文件 reset master; -- 重置日志文件

### mysqlbinlog 命令
-d,--database=name:只查看指定数据库的日志操作
-o,--offset=#:忽略掉日志中的前n个操作命令
-r,--result-file=name:将输出的日志信息输出到指定的文件中,使用重定向也一样可以。
-s,--short-form:显示简单格式的日志,只记录一些普通的语句,会省略掉一些额外的信息如位置信息和时间信息以及基于行的日志。可以用来调试,生产环境千万不可使用
--set-charset=char_name:在输出日志信息到文件中时,在文件第一行加上set names char_name
--start-datetime,--stop-datetime:指定输出开始时间和结束时间内的所有日志信息
--start-position=#,--stop-position=#:指定输出开始位置和结束位置内的所有日志信息
-v,-vv:显示更详细信息,基于row的日志默认不会显示出来,此时使用-v或-vv可以查看
mysqlbinlog --no-defaults --start-position=120 --stop-position=220226 binlog.000009 | mysql -uroot -pXXX -v db_bak
 mysqlbinlog  --start-datetime="2022-12-30 10:00:00" --stop-datetime="2023-12-30 18:00:00" --database=db_bak ./binlog.000009 | mysql -uroot -pxxx -v db_bak;