欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL通過binlog實現(xiàn)恢復數(shù)據(jù)

 更新時間:2025年01月26日 09:42:43   作者:魯班班  
在MySQL中,如果不小心刪除了數(shù)據(jù),可以利用二進制日志(binlog)來恢復數(shù)據(jù),本文將通過幾個示例為大家介紹一下具體實現(xiàn)方法,希望對大家有所幫助

一、背景

在MySQL中,如果不小心刪除了數(shù)據(jù),可以利用二進制日志(binlog)來恢復數(shù)據(jù)。

實質(zhì)就是將binlog記錄中的事件再次執(zhí)行一遍。

二、前提條件

啟用二進制日志:確保 MySQL 啟用了二進制日志功能。

有足夠的權(quán)限:確保有權(quán)限訪問和讀取二進制日志文件。

三、恢復步驟

1.找到相關的二進制日志文件:

查看是否開啟二進制日志文件

SHOW VARIABLES LIKE 'log_bin%';

查看二進制日志文件位置

SHOW VARIABLES LIKE 'log_bin_basename';

查看二進制日志文件列表

SHOW BINARY LOGS;

2.使用 mysqlbinlog 工具提取日志:事件位置

先使用show binlog events命令查看binlog記錄,確定事件開始位置和結(jié)束位置。

查看二進制日志記錄

show binlog events in 'binlog.00001';

再使用 mysqlbinlog 提取開始位置和結(jié)束位置的日志:

mysqlbinlog /path/to/binlog.000001 --start-position=13508 --stop-position=14142 | mysql -u username -p database_name

替換 /path/to/binlog.000001 為二進制日志文件路徑

修改stop-position和stop-position

替換 username 為MySQL 用戶名,database_name 為數(shù)據(jù)庫名稱。

3.使用 mysqlbinlog 工具提取日志:時間段

使用 mysqlbinlog 提取特定時間段的日志:

mysqlbinlog /path/to/binlog.000001 --start-datetime="YYYY-MM-DD HH:MM:SS" --stop-datetime="YYYY-MM-DD HH:MM:SS" | mysql -u username -p database_name

替換 /path/to/binlog.000001 為二進制日志文件路徑

修改 start-datetime 和 stop-datetime

替換 username 為MySQL 用戶名,database_name 為數(shù)據(jù)庫名稱。

注意事項

備份當前數(shù)據(jù):在進行數(shù)據(jù)恢復操作之前,最好先備份當前數(shù)據(jù)庫,以防止進一步的數(shù)據(jù)丟失。

測試恢復腳本:在生產(chǎn)環(huán)境中執(zhí)行恢復腳本之前,可以先在測試環(huán)境中進行測試,確保恢復操作的正確性。

mysqlbinlog命令只用于恢復,不能用于回滾。適用數(shù)據(jù)遷移,數(shù)據(jù)同步的場景。

四、實操

1.插入數(shù)據(jù)

mysql -u root -p 登陸

?  ~ mysql -u root -p                  
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 40
Server version: 8.4.3 MySQL Community Server - GPL

插入兩條數(shù)據(jù)

mysql> use ban;

mysql> INSERT INTO t_user (id, name, phone) VALUES ('1', '小明', '110');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO t_user (id, name, phone) VALUES ('2', '小紅', '120');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user;
+----+--------+-------+---------------------+---------------------+
| id | name   | phone | create_dt           | update_dt           |
+----+--------+-------+---------------------+---------------------+
| 1  | 小明   | 110   | 2025-01-24 15:19:39 | 2025-01-24 15:19:39 |
| 2  | 小紅   | 120   | 2025-01-24 15:19:46 | 2025-01-24 15:19:46 |
+----+--------+-------+---------------------+---------------------+
2 rows in set (0.00 sec)

2.刪除數(shù)據(jù)

mysql> delete from t_user where id in(1,2);
Query OK, 2 rows affected (0.00 sec)

mysql> select * from t_user;
Empty set (0.00 sec)

3.通過binlog恢復刪除的數(shù)據(jù)

找到二進制日志文件:/usr/local/mysql/data/binlog.000002

mysql> SHOW VARIABLES LIKE 'log_bin_basename';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| log_bin_basename | /usr/local/mysql/data/binlog |
+------------------+------------------------------+
1 row in set (0.01 sec)

???????mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |       668 | No        |
| binlog.000002 |     14142 | No        |
| binlog.000003 |       181 | No        |
| binlog.000004 |       181 | No        |
| binlog.000005 |       181 | No        |
+---------------+-----------+-----------+
5 rows in set (0.01 sec)

查看二進制日志記錄,確認事件開始位置(13508)和結(jié)束位置(14142)

mysql> show binlog events in 'binlog.00002';

| Log_name      | Pos   | Event_type     | Server_id | End_log_pos | Info  
| binlog.00002 | 13508 | Anonymous_Gtid |         1 |       13587 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
| binlog.00002 | 13587 | Query          |         1 |       13669 | BEGIN                               
| binlog.00002 | 13669 | Table_map      |         1 |       13734 | table_id: 109 (ban.t_user)          
| binlog.00002 | 13734 | Write_rows     |         1 |       13794 | table_id: 109 flags: STMT_END_F     
| binlog.00002 | 13794 | Xid            |         1 |       13825 | COMMIT /* xid=1058 */               
| binlog.00002 | 13825 | Anonymous_Gtid |         1 |       13904 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
| binlog.00002 | 13904 | Query          |         1 |       13986 | BEGIN                               
| binlog.00002 | 13986 | Table_map      |         1 |       14051 | table_id: 109 (ban.t_user)          
| binlog.00002 | 14051 | Write_rows     |         1 |       14111 | table_id: 109 flags: STMT_END_F     
| binlog.00002 | 14111 | Xid            |         1 |       14142 | COMMIT /* xid=1059 */               

使用 mysqlbinlog 恢復數(shù)據(jù)

?  ~ mysqlbinlog /usr/local/mysql/data/binlog.00002 --start-position=13508 --stop-position=14142 | mysql -u root -p ban 

4.完整示例

--登陸--
?  ~ mysql -u root -p                  
Enter password: 

--插入數(shù)據(jù)----
mysql> use ban;
mysql> INSERT INTO t_user (id, name, phone) VALUES ('1', '小明', '110');
mysql> INSERT INTO t_user (id, name, phone) VALUES ('2', '小紅', '120');
mysql> select * from t_user;
+----+--------+-------+---------------------+---------------------+
| id | name   | phone | create_dt           | update_dt           |
+----+--------+-------+---------------------+---------------------+
| 1  | 小明   | 110   | 2025-01-24 15:19:39 | 2025-01-24 15:19:39 |
| 2  | 小紅   | 120   | 2025-01-24 15:19:46 | 2025-01-24 15:19:46 |
+----+--------+-------+---------------------+---------------------+
2 rows in set (0.00 sec)

--刪除數(shù)據(jù)--
mysql> delete from t_user where id in(1,2);
mysql> select * from t_user;
Empty set (0.00 sec)

--通過binlog恢復刪除的數(shù)據(jù)--

--找到二進制日志文件:/usr/local/mysql/data/binlog.000002
mysql> SHOW VARIABLES LIKE 'log_bin_basename';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| log_bin_basename | /usr/local/mysql/data/binlog |
+------------------+------------------------------+
1 row in set (0.01 sec)

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |       668 | No        |
| binlog.000002 |     14142 | No        |
| binlog.000003 |       181 | No        |
| binlog.000004 |       181 | No        |
| binlog.000005 |       181 | No        |
+---------------+-----------+-----------+
5 rows in set (0.01 sec)

--查看二進制日志記錄,確認事件開始位置(13508)和結(jié)束位置(14142)--
mysql> show binlog events in 'binlog.00002';

| Log_name      | Pos   | Event_type     | Server_id | End_log_pos | Info  
| binlog.00002 | 13508 | Anonymous_Gtid |         1 |       13587 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
| binlog.00002 | 13587 | Query          |         1 |       13669 | BEGIN                               
| binlog.00002 | 13669 | Table_map      |         1 |       13734 | table_id: 109 (ban.t_user)          
| binlog.00002 | 13734 | Write_rows     |         1 |       13794 | table_id: 109 flags: STMT_END_F     
| binlog.00002 | 13794 | Xid            |         1 |       13825 | COMMIT /* xid=1058 */               
| binlog.00002 | 13825 | Anonymous_Gtid |         1 |       13904 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
| binlog.00002 | 13904 | Query          |         1 |       13986 | BEGIN                               
| binlog.00002 | 13986 | Table_map      |         1 |       14051 | table_id: 109 (ban.t_user)          
| binlog.00002 | 14051 | Write_rows     |         1 |       14111 | table_id: 109 flags: STMT_END_F     
| binlog.00002 | 14111 | Xid            |         1 |       14142 | COMMIT /* xid=1059 */            

--使用 mysqlbinlog 恢復數(shù)據(jù)--
?  ~ mysqlbinlog /usr/local/mysql/data/binlog.00002 --start-position=13508 --stop-position=14142 | mysql -u root -p ban 

到此這篇關于MySQL通過binlog實現(xiàn)恢復數(shù)據(jù)的文章就介紹到這了,更多相關MySQL binlog恢復數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL數(shù)據(jù)表使用的SQL語句整理

    MySQL數(shù)據(jù)表使用的SQL語句整理

    這篇文章主要介紹了MySQL數(shù)據(jù)表使用的SQL語句整理,文章基于MySQL的相關資料展開舉例說明,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • MySQL事務與隔離級別的使用基礎理論

    MySQL事務與隔離級別的使用基礎理論

    這篇文章主要介紹了MySQL事務的隔離級別詳情,事務隔離級別越高,為避免沖突所花費的性能也就越多,即效率低。在“可重復讀”級別,實際上可以解決部分的虛讀問題,但是不能防止update更新產(chǎn)生的虛讀問題,要禁止虛讀產(chǎn)生,還是需要設置串行化隔離級別
    2023-02-02
  • 關于MySQL 優(yōu)化的100個的建議

    關于MySQL 優(yōu)化的100個的建議

    MYSQL 如此方便和穩(wěn)定,以至于我們在開發(fā) WEB 程序的時候很少想到它。即使想到優(yōu)化也是程序級別的,比如,不要寫過于消耗資源的 SQL 語句。但是除此之外,在整個系統(tǒng)上仍然有很多可以優(yōu)化的地方。
    2016-01-01
  • 詳談mysqldump數(shù)據(jù)導出的問題

    詳談mysqldump數(shù)據(jù)導出的問題

    下面小編就為大家?guī)硪黄斦刴ysqldump數(shù)據(jù)導出的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 原來MySQL?數(shù)據(jù)類型也可以優(yōu)化

    原來MySQL?數(shù)據(jù)類型也可以優(yōu)化

    這篇文章主要介紹了原來MySQL?數(shù)據(jù)類型也可以優(yōu)化,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-08-08
  • mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句

    mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句

    這篇文章主要介紹了mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句,一般在一些統(tǒng)計報表中比較常用這個時間段,需要的朋友可以參考下
    2014-06-06
  • MySQL按時間拆分千萬級大表的實現(xiàn)代碼

    MySQL按時間拆分千萬級大表的實現(xiàn)代碼

    這篇文章主要介紹了MySQL按時間拆分千萬級大表,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • MySQL數(shù)據(jù)庫本地事務原理解析

    MySQL數(shù)據(jù)庫本地事務原理解析

    事務是數(shù)據(jù)庫系統(tǒng)中的重要概念,了解這一律念是以正確的方式開發(fā)和數(shù)據(jù)庫交互的應用程序的前提,今天通過本文給大家介紹MySQL數(shù)據(jù)庫本地事務原理解析,感興趣的朋友一起看看吧
    2022-01-01
  • mysql使用自定義序列實現(xiàn)row_number功能(步驟詳解)

    mysql使用自定義序列實現(xiàn)row_number功能(步驟詳解)

    這篇文章主要介紹了mysql使用自定義序列實現(xiàn)row_number功能,本文分步驟通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • MySQL如何添加環(huán)境變量和初始化MySQL

    MySQL如何添加環(huán)境變量和初始化MySQL

    本文主要介紹了如何在Windows系統(tǒng)中添加MySQL的環(huán)境變量以及如何初始化MySQL,通過添加環(huán)境變量,可以在任意一個命令提示符中直接調(diào)用MySQL的相關程序,大大簡化了操作,初始化MySQL時,需要新建一個配置文件并指定默認編碼集和存儲引擎,如果初始化過程中出現(xiàn)錯誤
    2024-11-11

最新評論