亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

Linux上通過binlog文件恢復mysql數據庫詳細步驟

2024-07-24 13:10:13
字體:
來源:轉載
供稿:網友

 一、binlog 介紹

  服務器的二進制日志記錄著該數據庫的所有增刪改的操作日志(前提是要在自己的服務器上開啟binlog),還包括了這些操作的執行時間。為了顯示這些二進制內容,我們可以使用mysqlbinlog命令來查看。

  用途1:主從同步

  用途2:恢復數據庫(也是線上出現一次數據庫文件丟失后,才對這個有所了解并學習的)

  mysqlbinlog命令用法:shell> mysqlbinlog [options] log_file ...

<!--[if !supportLists]-->1) mysqlbinlog 選項示例

常見的選項有以下幾個:

--start-datetime

從二進制日志中讀取指定等于時間戳或者晚于本地計算機的時間。取值如:="1470733768" 或者="2016-08-09 5:09:28"

示例:

[root@hcloud ~]# mysqlbinlog --start-datetime="2016-08-09 5:05:27" /var/lib/mysql/mysql-bin.000001 --stop-datetime

從二進制日志中讀取指定小于時間戳或者等于本地計算機的時間 取值和上述一樣

--start-position

從二進制日志中讀取指定position 事件位置作為開始。取值:="2698"

示例:

[root@hcloud ~]# mysqlbinlog --start-position="2698" /var/lib/mysql/mysql-bin.000001 --stop-position

從二進制日志中讀取指定position 事件位置作為事件截至。取值:="2698"

二、環境準備以及備份恢復

  1) 安裝好mysql后,檢查開啟binlog

mysql> SHOW BINARY LOGS;

ERROR 1381 (HY000): You are not using binary logging :上面提示說明沒有服務器開啟binlog

  修改/etc/my.cnf

  在mysqld選項中添加 一行內容如下:

  log-bin=mysql-bin

  默認如果不給值的話,log-bin 的會以mysqld-bin 為索引,創建mysqld-bin.00001等

  重啟mysqld即可。

  2) 檢查下binlog

mysql> show binary logs;+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000001 | 106 |+------------------+-----------+1 row in set (0.00 sec)

linux,binlog恢復mysql數據庫

  3) 先創建一些原始數據。

mysql> create database Test_DB;Query OK, 1 row affected (0.00 sec)mysql> use Test_DB;Database changedmysql> CREATE TABLE OneTb(id INT(10) NOT NULL,name varchar(20),age INT(10));Query OK, 0 rows affected (0.00 sec)mysql> insert into OneTb values (1,'user1',18);mysql> insert into OneTb values (2,'user2',19);insert into OneTb values (3,'user3',20);

  檢查下數據:

mysql> select * from OneTb;+----+-------+------+| id | name | age |+----+-------+------+| 1 | user1 | 18 || 2 | user2 | 19 || 3 | user3 | 20 |+----+-------+------+3 rows in set (0.00 sec)

  4) 備份還原 (完整備份以及還原)

  這里我們模擬一下做下每天的完整備份數據庫任務。

[root@hcloud ~]# mysqldump -uroot -p Test_DB > /data/mysqlbackup/Test_DB_0809-16:50.sqlEnter password:

  模擬下操作失誤,將數據修改錯誤了。

mysql> update OneTb set age = 15;Query OK, 3 rows affected (0.00 sec)Rows matched: 3 Changed: 3 Warnings: 0mysql> select * from OneTb;+----+-------+------+| id | name | age |+----+-------+------+| 1 | user1 | 15 || 2 | user2 | 15 || 3 | user3 | 15 |+----+-------+------+3 rows in set (0.00 sec)

  現在我們使用傳統的方式來進行恢復還原。

[root@hcloud ~]# mysql -uroot -p Test_DB < /data/mysqlbackup/Test_DB_0809-16/:50.sql 

再次查詢一下:

mysql> select * from Test_DB.OneTb;+----+-------+------+| id | name | age |+----+-------+------+| 1 | user1 | 18 || 2 | user2 | 19 || 3 | user3 | 20 |+----+-------+------+3 rows in set (0.00 sec)

  可以看到數據都已經還原回來。

  5) 利用binlog模擬還原

  在原表的基礎上在創建幾條數據。

mysql> insert into Test_DB.OneTb values(4,'user4',21),(5,'user5',22),(6,'user6',23);Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> select * from Test_DB.OneTb;+----+-------+------+| id | name | age |+----+-------+------+| 1 | user1 | 18 || 2 | user2 | 19 || 3 | user3 | 20 || 4 | user4 | 21 || 5 | user5 | 22 || 6 | user6 | 23 |+----+-------+------+6 rows in set (0.00 sec)

  如果這個時候我們把數據不小心修改了或者把庫刪除掉了,導致數據全部丟失,這個時候如果再用之前最新的備份文件 Test_DB_0809-16:50.sql,去恢復數據的話,那么將會丟掉備份之后新插入的數據。

  注意:如果真的使用最近的一次備份文件去做的話,一定是在萬不得已的情況(比如binlog 被刪除,整個硬盤掛掉、、、 想想都可怕。。。)。

  模擬誤操作,批量更改下用戶的名字。

mysql> update Test_DB.OneTb set name='user10';Query OK, 6 rows affected (0.00 sec)Rows matched: 6 Changed: 6 Warnings: 0

  不行,上一步不夠狠,這里再狠一點,把表都給刪除

mysql> drop table Test_DB.OneTb;ERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...Connection id: 3Current database: *** NONE ***Query OK, 0 rows affected (0.00 sec)

  由于之前我們一開始開啟了binlog 日志選項,用binlog恢復數據庫。下面從binlog入手,先檢查一下binlog 文件,目前我的mysql 服務自開啟binlog 后重啟了兩次,所以有2個binlog文件(每重啟一次,便會重新生成一個binlog文件,還有一種情況就是運行了FLUSH LOGS命令也會重建一個);

  mysql-bin.index 文件中記錄的是:自log-bin選項開啟后,記錄的所有的二進制日志清單列表。

linux,binlog恢復mysql數據庫

  注意:在實際生產環境中,如果遇到需要恢復數據庫的情況,不要讓用戶能訪問到數據庫,以避免新的數據插入進來,以及在主從的環境下,關閉主從。

  使用mysqlbinlog 命令可以查看binlog文件.我們看下最新的文件mysql-bin.00002

linux,binlog恢復mysql數據庫

  從最后可以看出有刪除的操作。但是我們不能完全的恢復,因為最后還有刪除的操作。

  現在我的思路就是,先將第一個binlog 和第二個binlog 文件導出來à利用指定的position位置的方式(過濾掉刪除表操作和update Test_DB.OneTb set name='user10';這條語句 ),導出2個sql 語句,最后我們將2個sql 合成一個sql,導入到數據庫中即可。

  我們先用mysqlbinlog命令找到update 那條語句的位置,然后指定position 將mysql-bin.00001 導出來。

[root@hcloud ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001….#160809 5:09:28 server id 1 end_log_pos 2698 Query thread_id=17 exec_time=0 error_code=0SET TIMESTAMP=1470733768/*!*/;SET @@session.foreign_key_checks=1, @@session.unique_checks=1/*!*/;SET @@session.sql_mode=0/*!*/;/*!/C latin1 *//*!*/;SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;insert into Test_DB.OneTb values(4,'user4',21),(5,'user5',22),(6,'user6',23)/*!*/;# at 2698#160809 5:19:49 server id 1 end_log_pos 2795 Query thread_id=17 exec_time=0 error_code=0SET TIMESTAMP=1470734389/*!*/;update Test_DB.OneTb set name='user10'/*!*/;# at 2795#160809 5:30:38 server id 1 end_log_pos 2814 StopDELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

  從上面可以看到我們在做插入正常數據后的position 是2698,那么使用下面的命令導出sql

[root@hcloud ~]# mysqlbinlog --stop-position="2698" /var/lib/mysql/mysql-bin.000001 > Backup_1.sql 

  然后導出mysql-bin.00002的sql 語句(注:由于演示操作,該文件只有一個drop 表操作,所以不做處理,但是在實際環境中,由于中途可能會有重啟數據庫操作,那時就需要檢測最新的binlog有沒有業務需要的語句。)

  sql 語句已經導出來了。我們可以利用該語句直接恢復所有正常的數據。

  注:本次恢復沒有利用到之前的完整備份,因為我是開啟binlog后,然后才做的所有建庫建表操作,第一個binlog文件里已經記錄了所有的數據庫操作,所以不需要使用之前的完整備份(另外:實際的生產環境,還是需要利用到完整備份的,因為線上環境可能會有N多個binlog文件,所以需要利用到完整備份和最新的binlog文件來結合恢復)

  開始恢復前,我們將原有的Test_DB數據庫也給干掉吧。畢竟我們的binlog中有創建操作

mysql> DROP DATABASE Test_DB;Query OK, 0 rows affected (0.03 sec)

  恢復數據庫時還可以利用在登陸mysql 后,用source 命令導入sql語句,這里暫不介紹

[root@hcloud ~]# mysql -uroot -p < Backup_1.sql 

Enter password:

  恢復完成后,我們檢查下表的數據是否完整

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || Test_DB || mysql |+--------------------+3 rows in set (0.00 sec)mysql> select * from Test_DB.OneTb;+----+-------+------+| id | name | age |+----+-------+------+| 1 | user1 | 18 || 2 | user2 | 19 || 3 | user3 | 20 || 4 | user4 | 21 || 5 | user5 | 22 || 6 | user6 | 23 |+----+-------+------+6 rows in set (0.00 sec)

  Ok完整的都恢復過來了。

三、總結

  1) 恢復方式

    a) 利用最新一次的完整備份加binlog 指定事件起始時間和終止時間或者position恢復數據庫

    b) 利用所有binlog指定事件起始位置和終止時間來合并sql文件恢復數據庫(此方法要確保binlog文件的完整)

    c) 利用mysqldump 使用完整恢復。(在確保最新一次的完整備份后的數據不重要,允許丟掉的情況下,直接恢復。該方法最簡單、效率最高)

  2) 附:官方建議的備份原則(為了能睡個好覺….嗯,是的)

    a) 在mysql安裝好并運行時,就始終開啟 log-bin選項,該日志文件位于datadir目錄下,也要確保該目錄所在存儲介質是安全的。

    b) 定期做完整的mysql 備份。

    c) 定期使用 FlUSH LOGS 或者 mysqladmin flush-logs ,該操作會關閉當前的二進制日志文件,并新建一個binlog日志文件。(和重啟mysql后新建的binlog操作一樣)。以備份binlog日志,利用binlog日志也可以做增量備份。

以上所述是小編給大家介紹的Linux上通過binlog文件恢復mysql數據庫詳細步驟,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区动漫| 色偷偷亚洲男人天堂| 成人乱人伦精品视频在线观看| 欧美视频第一页| 国产91在线播放| 亚洲黄色有码视频| 欧美日韩日本国产| 久久色在线播放| 欧美激情综合亚洲一二区| www.亚洲天堂| 中文字幕一区二区精品| 78色国产精品| 欧美夫妻性视频| wwwwwwww亚洲| 国产亚洲一区二区精品| 欧洲美女免费图片一区| 久久久久久999| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲第一福利网站| 亚洲精品福利免费在线观看| 91极品女神在线| 欧美日韩国产中文字幕| 久久久久九九九九| 日韩一区二区av| 高清一区二区三区日本久| 中文字幕免费精品一区| 中文字幕日韩综合av| 97香蕉久久夜色精品国产| 午夜精品一区二区三区在线视频| 亚洲伊人久久综合| 欧美激情视频网站| 俺去亚洲欧洲欧美日韩| 久久久久久久国产精品| 亚洲欧洲xxxx| 福利视频导航一区| 97色在线观看| 国产精品香蕉av| 精品成人在线视频| 777精品视频| 成人免费网站在线看| 久久精品久久久久久| 国产成人免费av| 在线看国产精品| 91网在线免费观看| 国产香蕉97碰碰久久人人| 欧美美女15p| 亚洲图片欧洲图片av| 7m第一福利500精品视频| 成人精品一区二区三区| 国产成人一区二| 国产亚洲一区二区精品| 亚洲激情第一页| 欧美激情视频免费观看| 欧美激情久久久| 日韩三级成人av网| 日韩经典中文字幕在线观看| 久久久亚洲国产天美传媒修理工| 九九热最新视频//这里只有精品| 日韩欧美在线观看| 亚洲成人网av| 国模吧一区二区| 2019亚洲日韩新视频| 欧美成人在线免费| 日韩高清a**址| 欧美www视频在线观看| 国产精品久久久久久五月尺| 日韩av在线导航| 精品国产精品三级精品av网址| 久久男人av资源网站| 国产精品一区二区在线| 久久久久久一区二区三区| 色综合久综合久久综合久鬼88| 九九热精品视频国产| 亚洲乱码一区av黑人高潮| 久久精品视频在线| 91精品国产高清久久久久久91| 97视频在线观看免费高清完整版在线观看| 中文字幕在线精品| 国产精品男人爽免费视频1| 欧美俄罗斯性视频| 国产自产女人91一区在线观看| 成人网在线免费观看| 美女av一区二区三区| 97视频在线观看视频免费视频| 日本一区二区三区在线播放| 久久久久久久国产精品视频| 欧美日韩在线看| 欧美激情小视频| 欧美成人精品xxx| 精品视频在线播放| 国产成人亚洲综合91精品| 日本高清视频精品| 精品国产依人香蕉在线精品| 国产精品高清网站| 91精品啪在线观看麻豆免费| 国语对白做受69| 欧美一区第一页| 成人国产精品一区| 国产精品美腿一区在线看| 黄色成人在线免费| 久久91亚洲精品中文字幕| 国产原创欧美精品| 欧美日韩人人澡狠狠躁视频| 97久久精品人人澡人人爽缅北| 欧美日韩国产在线播放| 欧美中文字幕视频在线观看| 欧美孕妇性xx| 日韩欧美国产免费播放| 日韩在线观看免费全| 亚洲国产精品一区二区久| 国产精品一区二区电影| 国产国语刺激对白av不卡| 亚洲欧洲一区二区三区在线观看| 国产成人精品久久二区二区| 日韩av网站大全| 色综合男人天堂| 久久精品色欧美aⅴ一区二区| 亚洲天堂男人的天堂| 色噜噜国产精品视频一区二区| 尤物精品国产第一福利三区| 久久国产加勒比精品无码| 精品日本美女福利在线观看| 欧洲成人在线观看| 国产在线98福利播放视频| 久久香蕉精品香蕉| 国产欧美一区二区三区久久人妖| 国外视频精品毛片| 伦理中文字幕亚洲| 国产精品第8页| 欧美大尺度在线观看| 欧美色另类天堂2015| 日韩久久精品电影| 亚洲欧美日韩在线一区| 91在线免费网站| 亚洲性生活视频| 国产热re99久久6国产精品| 欧美精品videossex88| 91精品成人久久| 国产日本欧美一区二区三区在线| 国产精品99久久久久久久久久久久| 欧美www视频在线观看| 日韩欧美综合在线视频| 91亚洲国产成人精品性色| 亚洲人成免费电影| 欧美久久精品午夜青青大伊人| 亚洲精品电影久久久| 日韩中文字幕免费视频| 91久久久久久久久| 久久精品久久久久电影| 欧美一级片久久久久久久| 国产精品久久久久久久9999| 亚洲一区二区在线播放| 全亚洲最色的网站在线观看| 国产91对白在线播放| 亚洲免费小视频| 国产日产亚洲精品| 国产美女久久精品| 91久久久久久久久久久| 两个人的视频www国产精品| 国产精品综合不卡av| 久久精品久久久久久| 国产成人中文字幕| 久久免费成人精品视频| 欧美小视频在线观看|