進入mysql 命令列執行如下指令
mysql> show master status; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | binlog.000001 | 967 | | binlog.000002 | 965 | +------------------+-----------+
一般最新的編號大,上面最新的就是binlog.000002
這裡有兩種方式來決定開始位置和結束位置,一種是使用時間作為開始結束,一種是使用日誌的position 作為開始結束位置
透過mysqlbinlog mysql-bin.000002 指令查看日誌內容,然後找到刪除的時間點:
# at 131708213 #210610 11:27:01 server id 1 end_log_pos 131708311 CRC32 0x0fc755e2 Table_map: `loongwind_base`.`xxxx` mapped to number 139 # at 131708311 #210610 11:27:01 server id 1 end_log_pos 131708411 CRC32 0xa91616b9 Write_rows: table id 139 flags: STMT_END_F BINLOG ' BffBYBMBAAAAYgAAAJe12QcAAIsAAAAAAAEADmR4bWhfYmFzZV9oenN5ABpkeF9zeV9hc3NldHNf ZXh0ZW5kc19jb3B5MQAICAgIDwgSCBIEAAgAAPgBAQACA/z/AOJVxw8= BffBYB4BAAAAZAAAAPu12QcAAIsAAAAAAAMAAgAI/wDRAwAAm1M8AUIAAADRUjwBCgAAAFYL5gAM AOWFrOWuieacuuWFs7EBAADbwZkAmama6E+xAQAA28GZAJmpmuhPuRYWqQ== '/*!*/;
然後確定上次備份的時間點,如果透過日誌找不到上次備份的時間點可以填一個你記憶中確定小於上次備份的時間點
使用下列指令檢視日誌event 的position
mysql -uroot -p'password' -e "show binlog events in 'binlog.000002'"|grep -i 'DROP TABLE'
#執行結果如下:
binlog.000002 820474948 Quuseery 820474948 DROP TABLE IF EXISTS `undo_log` /* generated by server */ /* xid=11790691 */
即刪除的position 為820474948
還是透過上述指令,即刪除的position 為820474948
#或透過上述指令,即刪除的position 為820474948
#或透過上述指令,即刪除的position 為820474948
####或透過上述指令,即刪除的position 為820474948###查找到上次備份的position 點######3、恢復######3.1 透過時間恢復###mysqlbinlog --no-defaults --database=loongwind_base --start-datetime="2021-06-07 09:00:00" --stop-datetime="2021-06-10 16:37:58" binlog.000005 | mysql -uroot -p'password' -s -N -f -D loongwind_base
mysqlbinlog --start-position=1178 --stop-position=2751 -d dxmh-sy binlog.000002|mysql -uroot -p'password' -s -N -f -D loongwind_base loongwind_base 为数据库名称
以上是怎麼透過日誌檔案恢復MySQL數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!