全備+binlog方式將數據庫恢復至指定位置


生產環境中會出現誤刪數據,使用增備又無法恢復到指定位置。可以通過全備+binlog server方式將數據庫恢復至指定位置。

環境描述:

 

1.將3316實例全備,apply好的數據拷貝到數據庫:

[root@bogon backup]# ll
總用量 2586672
-rw-r-----. 1 root root        387 7月  26 17:27 backup-my.cnf
drwx------. 2 root root       4096 7月  26 17:27 employees
-rw-r-----. 1 root root 1073741824 7月  26 17:30 ibdata1
-rw-r--r--. 1 root root  524288000 7月  26 17:30 ib_logfile0
-rw-r--r--. 1 root root  524288000 7月  26 17:29 ib_logfile1
-rw-r--r--. 1 root root  524288000 7月  26 17:30 ib_logfile2
drwx------. 2 root root       4096 7月  26 17:27 mysql
drwx------. 2 root root       4096 7月  26 17:27 performance_schema
-rw-r-----. 1 root root         21 7月  26 17:27 xtrabackup_binlog_info
-rw-r--r--. 1 root root         26 7月  26 17:29 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root        117 7月  26 17:29 xtrabackup_checkpoints
-rw-r-----. 1 root root        502 7月  26 17:27 xtrabackup_info
-rw-r-----. 1 root root    2097152 7月  26 17:29 xtrabackup_logfile
drwx------. 2 root root       4096 7月  26 17:27 zhangshuo
[root@bogon backup]# mv * /data/mysql/mysql3318/data/

2.啟動3318實例並查看zhangshuo庫:

[root@bogon backup]# /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my3318.cnf &
root@localhost:mysql3318.sock  17:55:40 [(none)]>use zhangshuo;
Database changed
root@localhost:mysql3318.sock  17:55:44 [zhangshuo]>select * from zs;
Empty set (0.03 sec)

3.將3316實例binlog文件拷貝到新實例3318並查找到誤刪數據的起始位置:

[root@bogon backup]# cp -p /data/mysql/mysql3316/logs/mysql-bin.* /binlog/

[root@bogon data]# /usr/local/mysql/bin/mysqlbinlog -v --base64-output=decode-rows /binlog/mysql-bin.000014 

BEGIN
/*!*/;
# at 197
#160726 17:54:45 server id 1283316  end_log_pos 250 CRC32 0xc6b65dcb    Table_map: `zhangshuo`.`zs` mapped to number 70
# at 250
#160726 17:54:45 server id 1283316  end_log_pos 301 CRC32 0xf809a3da    Write_rows: table id 70 flags: STMT_END_F
### INSERT INTO `zhangshuo`.`zs`
### SET
###   @1=1
###   @2='zhangshuo'
# at 301
#160726 17:54:45 server id 1283316  end_log_pos 332 CRC32 0x7f925ebd    Xid = 54
COMMIT/*!*/;

可以看到誤刪數據begin位置197和commit位置301.

4.在新實例3318 zhangshuo庫中將數據恢復:

[root@bogon data]# /usr/local/mysql/bin/mysqlbinlog --start-position=197 --stop-position=301 /binlog/mysql-bin.000014 |/usr/local/mysql/bin/mysql -S /tmp/mysql3318.sock zhangshuo
root@localhost:mysql3318.sock  18:12:39 [zhangshuo]>select * from zs;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | zhangshuo |
+------+-----------+
1 row in set (0.00 sec)

至此,數據恢復成功。

 

遠程備份binlog文件:

/usr/local/mysql/bin/mysqlbinlog  --read-from-remote-server --host=192.168.1.113 --user=repl --password=repl --port=3316 --raw  --stop-never  mysql-bin.000001 --result-file=/binlog/master3316/ 

 --read-from-remote-server    #遠程備份mysql binlog的核心選項

--raw    #使用該選項,mysqlbinlog將獲取的二進制日志原原本本的記錄到磁盤,若不是用會生成變換為文本形式的二進制文件

--stop-never    #只要遠程服務器未關閉,或連接未斷開,將會持續不斷的復制遠程服務器的二進制日志

--result-file    #指定備份目錄,也可以將選項設置為/backup/master-xxxx 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM