日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤

發布時間:2025/3/21 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

日常的數據備份及恢復測試,是DBA工作重中之重的事情,所以要做好備份及測試,日常的備份常見有mysqldump+binlog備份、xtrabackup+binlog備份,無論那一種,幾乎都少不了對binlog的備份,說明了binlog在數據恢復中的重要性,下面做個小測試,是工作中不少運維或者新人DBA容易犯的錯。

創建一個測試表tb1:

(root@localhost) [xuanzhi]> show create table tb1\G

*************************** 1. row ***************************

Table: tb1

Create Table: CREATE TABLE `tb1` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`name` char(10) CHARACTER SET latin1 DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

(root@localhost) [xuanzhi]>

往表里插入兩條數據:

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('aa'),('bb');

Query OK, 2 rows affected (0.01 sec)

Records: 2 Duplicates: 0 Warnings: 0

(root@localhost) [xuanzhi]> show master logs;

+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 329 |

+----------------------+-----------+

1 row in set (0.00 sec)

(root@localhost) [xuanzhi]>

這個時候對數據備份,如果是xtrabackup備份的話,會在有xtrabackup_binlog_info文件中記錄此時備份是到那個binlog文件和pos點的,如果是mysqldump備份,則需要帶上--master-data=2這個參數,下面我們的數據量少,用mysqldump備份:

[root@localhost ~]# mysqldump -uroot -p123456 -R --events --triggers=true --master-data=2 --single-transaction xuanzhi > xuanzhi.sql

Warning: Using a password on the command line interface can be insecure.

[root@localhost ~]# grep -i "CHANGE MASTER" xuanzhi.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000001', MASTER_LOG_POS=329;

[root@localhost ~]#

備份完后,繼續模擬數據庫有寫入,而還是寫在localhost-bin.000001

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('cc'),('dd');

Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

(root@localhost) [xuanzhi]> show master logs;

+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 538 |

+----------------------+-----------+

1 row in set (0.00 sec)

(root@localhost) [xuanzhi]> flush logs;

Query OK, 0 rows affected (0.01 sec)

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('ee');

Query OK, 1 row affected (0.00 sec)

(root@localhost) [xuanzhi]> show master logs;

+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 589 |

| localhost-bin.000002 | 321 |

+----------------------+-----------+

2 rows in set (0.00 sec)

(root@localhost) [xuanzhi]>

上面我們進行flush logs是為了模擬現在已經有多個binlog文件了,恢復時進行多個binlog一起恢復。

進行誤操,把xunazhi庫drop了:

(root@localhost) [xuanzhi]> drop database xuanzhi;

Query OK, 1 row affected (0.02 sec)

(root@localhost) [(none)]> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

+--------------------+

4 rows in set (0.00 sec)

(root@localhost) [(none)]>

創建數據xuanzhi,把備份導入:

(root@localhost) [(none)]> create database xuanzhi;

Query OK, 1 row affected (0.00 sec)

[root@localhost ~]# mysql -uroot -p123456 xuanzhi <.>

Warning: Using a password on the command line interface can be insecure.

[root@localhost ~]#

查看數據:

(root@localhost) [(none)]> use xuanzhi

Database changed

(root@localhost) [xuanzhi]> select * from tb1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

| 2 | bb |

+----+------+

2 rows in set (0.00 sec)

(root@localhost) [xuanzhi]>

可以看到備份前的數據恢復了,我們現在要結合Binlog來恢復,但前提要找出誤操作前的pos點,也就是drop database xuanzhi前的pos點:

[root@localhost ~]# mysqlbinlog -v --base64-output=DECODE-ROWS localhost-bin.000002 |grep -C 10 -i "drop database"

### INSERT INTO `xuanzhi`.`tb1`

### SET

### @1=5

### @2='ee'

# at 290

#170327 21:10:55 server id 1313306 end_log_pos 321 CRC32 0x825a2f99 Xid = 78

COMMIT/*!*/;

# at 321

#170327 21:19:25 server id 1313306 end_log_pos 422 CRC32 0x8c139cac Query thread_id=2 exec_time=0 error_code=0

SET TIMESTAMP=1490620765/*!*/;

drop database xuanzhi

/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

[root@localhost ~]# mysql -uroot -p123456 xuanzhi <.>

Warning: Using a password on the command line interface can be insecure.

[root@localhost ~]#

從上面可以看到,誤操作前的pos點是321,那我們現在通過binlog來進行數據恢復:

[root@localhost mysql-5.6]# mysqlbinlog --start-position=329 --stop-position=321 localhost-bin.000001 localhost-bin.000002 |mysql -uroot -p123456 xuanzhi

Warning: Using a password on the command line interface can be insecure.

[root@localhost mysql-5.6]#

--start-position是備份后記錄下的pos點,?--stop-position是誤操前的pos點,如果批多個binlog文件,那么start-position是第一個binlog文件的pos點,stop-position是最后一個binlog的pos點,下面我們看下數據是否恢復回來了:

(root@localhost) [xuanzhi]> select * from tb1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

| 2 | bb |

| 3 | cc |

| 4 | dd |

| 5 | ee |

+----+------+

5 rows in set (0.00 sec)

(root@localhost) [xuanzhi]>

這里要提的是進行恢復前,要把需要恢復的binlog備份好,或者移動拷貝一份到另一個目錄,因為進行數據導入時也會繼續寫binlog。假如你沒有誤操作的情況下,就是想測試一下數據的恢復,很多人的操作是導入備份,再從備份里記錄的binlog文件名和pos點進行binlog恢復,發現步驟都很完美,也沒報錯,恢復后就是只有備份時的數據,沒有備份后的數據,下面測試一下給大家看:

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('aa'),('bb');

Query OK, 2 rows affected (0.01 sec)

Records: 2 Duplicates: 0 Warnings: 0

(root@localhost) [xuanzhi]> select * from tb1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

| 2 | bb |

+----+------+

2 rows in set (0.00 sec)

(root@localhost) [xuanzhi]> show master logs;

+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 329 |

+----------------------+-----------+

1 row in set (0.00 sec)

(root@localhost) [xuanzhi]>

進行備份操作:

[root@localhost ~]# mysqldump -uroot -p123456 -R --events --triggers=true --master-data=2 --single-transaction xuanzhi > xuanzhi.sql

Warning: Using a password on the command line interface can be insecure.

[root@localhost ~]# grep -i "change master" xuanzhi.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000001', MASTER_LOG_POS=329;

[root@localhost ~]#

繼續寫localhost-bin.000001后進行flush logs生成新的binlog再繼續寫數據,這里只是想模擬localhost-bin.000001寫滿了切localhost-bin.000002,結合多個binlog一起恢復

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('cc'),('dd');

Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

(root@localhost) [xuanzhi]> flush logs;

Query OK, 0 rows affected (0.00 sec)

(root@localhost) [xuanzhi]> insert into tb1 (name) value ('dd');

Query OK, 1 row affected (0.01 sec)

(root@localhost) [xuanzhi]> show master logs;

+----------------------+-----------+

| Log_name | File_size |

+----------------------+-----------+

| localhost-bin.000001 | 589 |

| localhost-bin.000002 | 321 |

+----------------------+-----------+

2 rows in set (0.00 sec)

(root@localhost) [xuanzhi]>

下面進行恢復測試,正常來說先把備份導入:

[root@localhost ~]# mysql -uroot -p123456 xuanzhi <.>

Warning: Using a password on the command line interface can be insecure.

[root@localhost ~]#

查看數據,只有備份的那兩條記錄:

(root@localhost) [xuanzhi]> select * from tb1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

| 2 | bb |

+----+------+

2 rows in set (0.00 sec)

(root@localhost) [xuanzhi]>

那現在通過localhost-bin.000001,localhost-bin.000002來恢復后面那3條數據,那么起始pos是那個呢,就是上面備份完后備份文件里的那個pos,我們進到binlog的存放路徑:

可以看到備份后的數據是沒有恢復回來的。為什么呢?因為導入備份的時候,又開始寫binlog了,而你恢復時用的binlog也就是現在導入備份時正在寫的binlog。大體過程是這樣的:

1、導入備份后,備份的所有操作都寫進最后一個binlog了,也就是上面的localhost-bin.000002

2、進行binlog恢復,從備份文件里的pos點開始,按理來說是可以恢復到最新數據的,但是上面導入了備份,導入時的所有操作都會記錄到localhost-bin.000002

3、備份導入時會有DROP TABLE和CREATE TABLE的動作寫進binlog里,所以最終得到的數據,還是備份時的數據。

總結:

一、在恢復全備數據之前必須將該binlog文件移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復數據部分變得比較混亂

二、做好數據文件及binlog的備份至關重要,但不是備份完就算了,要定期進行數據恢復測試或演練

三、恢復時建議對外停止更新,即禁止更新數據庫

總結

以上是生活随笔為你收集整理的恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 奇米影视一区二区三区 | 国产精品国产精品国产专区 | 欧美永久免费 | 不卡一区在线观看 | 成人黄色小说视频 | 久久久久久久久99精品 | 不卡av在线 | 久久青青 | 天天插天天操天天干 | 久久视频网| 天天弄天天干 | 亚洲色中色 | 成人在线视屏 | 岛国精品一区二区 | www.呦呦 | 97人妻人人澡人人爽人人精品 | 国产精品自拍小视频 | 污片在线免费观看 | 亚洲国产精品视频在线观看 | 中文字幕 国产精品 | 欧美日韩一区二区区别是什么 | 重口另类 | 一级片免费在线播放 | 亚洲精品一区二区三区蜜桃久 | 欧美精品在线观看一区二区 | 国产精品久久久久久久裸模 | 欧美日韩视频在线播放 | 欧美亚洲另类在线 | 求欧美精品网址 | 性欧美大战久久久久久久免费观看 | 亚洲美女自拍偷拍 | 高清av一区二区 | 在线播放少妇奶水过盛 | 欧美黄网站 | 男女黄色网| 精品成人一区二区 | 99热这里只有精品在线 | 激情全身裸吻胸 | 日本wwww色 | 中文字幕在线播放视频 | 国产婷婷综合 | 日日骑夜夜操 | 午夜视频在线观看网站 | 成人18视频免费69 | 182午夜视频| 法国空姐在线观看完整版 | 亚洲涩视频 | 黄色免费国产 | 涩av| 假日游船| 日本色网址 | 人妻一区二区三区免费 | 激情福利 | 日韩av不卡在线观看 | 亚洲精品乱码久久久久久国产主播 | 日本不卡视频 | 日韩免费观看 | 久久精品亚洲无码 | 爱爱视频在线播放 | 国产高潮失禁喷水爽到抽搐 | 亚洲国产日韩一区 | 久久123| 一本一道精品欧美中文字幕 | 偷拍视频久久 | 成人免费看高清电影在线观看 | 日韩女同强女同hd | 天天操好逼 | 不卡在线一区二区 | 国产激情一区二区三区在线观看 | 精品xxx| 欧美在线免费观看视频 | 久久久久国产视频 | 欧美激情一区二区在线 | 91九色视频在线 | 久久露脸国语精品国产 | 久久人人爽爽人人爽人人片av | 森泽佳奈在线播放 | 伊人手机视频 | 亚洲18在线看污www麻豆 | 欧美变态口味重另类 | 97精品一区二区视频在线观看 | 少妇粉嫩小泬喷水视频www | 色女人影院 | 可以直接看的毛片 | 狠狠爱五月婷婷 | 久久偷看各类wc女厕嘘嘘偷窃 | 美女网站在线免费观看 | 午夜精品网 | 欧美老女人性生活视频 | 一道本一区二区 | 黄色av免费播放 | 国产精品6666 | 国内外免费激情视频 | 精品人妻一区二区三区日产 | 成人久久久久 | 深夜视频在线免费 | 日韩av第一页 | 久久精品国产亚洲av蜜臀色欲 | 成人瑟瑟 |