打開mysql的bin log功能:
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出仙桃免費(fèi)做網(wǎng)站回饋大家。
對(duì)于mysql也是支持增量備份,但要打開mysql的bin log功能。
我們修改mysql的配置文件。linux是/etc/my.cnf,windows是mysql的安裝目錄/my.ini
我們?cè)赱mysqld]下面加上log-bin一行代碼,如下面。
[mysqld]
log-bin=mysql-bin
復(fù)制代碼
加完后重起mysql即可。
某客戶更新數(shù)據(jù)的時(shí)候,誤刪了數(shù)據(jù)庫(kù)的內(nèi)容,因?yàn)閿?shù)據(jù)庫(kù)做了主從,但是沒有做備份(備份很重要?。。┬液瞄_啟了bin-log,之后只好把整個(gè)日志的記錄拿回來本地進(jìn)行恢復(fù)。
之后自己也做了一個(gè)簡(jiǎn)單的測(cè)試,對(duì)數(shù)據(jù)進(jìn)行恢復(fù),具體如下:
1、新建一個(gè)表
CREATE TABLE `lynn`.`sn_test` ( `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `age` INT( 3 ) NOT NULL ) ENGINE = MYISAM;
2、插入多條數(shù)據(jù)
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn1', '1');
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn2', '2');
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn3', '3');
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn4', '4');
3、查看數(shù)據(jù)并刪除
mysql select * from sn_test;
+-------+-----+
| name | age |
+---------+---+
| lynn1 | 1 |
| lynn2 | 2 |
| lynn3 | 3 |
| lynn4 | 4 |
+---------+-----+
4 rows in set (0.00 sec)
mysql delete from sn_test;
Query OK, 4 rows affected (0.00 sec)
mysql select * from sn_test;
Empty set (0.00 sec)
4、mysqlbinlog恢復(fù)數(shù)據(jù)
mysqlbinlog mysql-bin.000006 1.sql
查看1.txt里面數(shù)據(jù)插入的紀(jì)錄,把刪除之前的數(shù)據(jù)進(jìn)行恢復(fù)
mysqlbinlog mysql-bin.000006 --start-position=2471 --stop-position=2876 | mysql -uroot -p123
重新登錄,查看數(shù)據(jù),OK,已經(jīng)成功恢復(fù)了
對(duì)于數(shù)據(jù)庫(kù)操作,應(yīng)該注意如下問題:
1、要常備份(全備,增量備份),出了問題可以最快恢復(fù)數(shù)據(jù);
2、操作數(shù)據(jù)庫(kù)前,要把需要操作的數(shù)據(jù)庫(kù)或者表dump出來;
3、需要把bin-log打開,就算沒有做上面的兩步,也可以通過日志恢復(fù)數(shù)據(jù)
1、首先構(gòu)建測(cè)試環(huán)境數(shù)據(jù)create table t1(a varchar(10),b varchar(10));insert into t1 values('1','1');insert into t1 values('2','2');commit;。
2、模擬誤修改,將t1表中的b字段更新為錯(cuò)誤數(shù)據(jù) "123456"update t1 set b='123456' where a='1';commit;select * from t1;。
3、將恢復(fù)工具上傳到服務(wù)器并進(jìn)行解壓。unzip binlog2sql-master.zip。
4、得到誤修改時(shí)的binlog文件(show binary logs;),實(shí)驗(yàn)環(huán)境是mysql-bin.000011。
5、通過?binlog2sql.py 腳本的到所有 對(duì)表 t1 的修改操作。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011'。
6、得到了誤刪除的sql的準(zhǔn)確位置在1382-1615之間,使用 _**-B**_ 選項(xiàng)生成回滾sql。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011' --start-position=1382 --stop-position=1615 -B。
7、執(zhí)行得到的回滾語句進(jìn)行誤操作恢復(fù)。就完成了。
恢復(fù)整個(gè)數(shù)據(jù)庫(kù)首先,如果要恢復(fù)的數(shù)據(jù)庫(kù)是含有授權(quán)表的mysql數(shù)據(jù)庫(kù),將需要使用--skip-grant-tables選項(xiàng)運(yùn)行服務(wù)器。否則,服務(wù)器將抱怨無法找到授權(quán)表。在恢復(fù)表之后,執(zhí)行mysqladmin flush-privileges 來告訴服務(wù)器加載授權(quán)表,并用它們啟動(dòng)。將原數(shù)據(jù)庫(kù)目錄的內(nèi)容拷貝到其他的地方。例如,您可能會(huì)在稍后用它們進(jìn)行崩潰表的事后分析檢查(post-mortem examination)。用最新的備份文件重新加載數(shù)據(jù)庫(kù)。如果您打算使用由mysqldump 加載的文件,則需要將它們作為mysql的輸入。如果打算使用從數(shù)據(jù)庫(kù)中直接拷貝的文件(如,用tar 或c p),則將它們直接拷貝回到該數(shù)據(jù)庫(kù)目錄中。但是,在這種情況下,應(yīng)該在拷貝這些文件之前關(guān)閉服務(wù)器,然后再重新啟動(dòng)它。用更新日志重做在進(jìn)行備份后又修改了數(shù)據(jù)庫(kù)表的查詢。對(duì)于所有可用的更新日志,可使用它作為mysql的輸入。指定--one-database 選項(xiàng),使mysql只對(duì)想要恢復(fù)的數(shù)據(jù)庫(kù)執(zhí)行查詢。如果您知道需要使用所有的更新日志文件,可在包含日志的目錄中使用下列命令:% ls-t-r-l update.(0-9)* | xargs cat | mysql--one-database db_namels 命令產(chǎn)生更新日志文件的單列列表,更新日志文件根據(jù)服務(wù)器生成的順序進(jìn)行排序(要知道,如果您修改了其中的任何文件,排序的順序都將改變,這將導(dǎo)致更新日志按錯(cuò)誤的順序使用)。您很可能必須使用某些更新日志。例如,如果自備份以來所產(chǎn)生的日志命名為update.392、pdate.393 等等,可以重新運(yùn)行它們中的命令:% mysql--one-database db_name updata.392% mysql--one-database db_name updata.393…如果正在運(yùn)行恢復(fù)并打算使用更新日志恢復(fù)由于失策的DROP DATA BASE、DROPTABLE或DELETE 語句而丟失的信息,應(yīng)確保先從更新日志中刪除這些語句?;謴?fù)單個(gè)的表恢復(fù)單個(gè)表是很困難的。如果有通過mysqldump 生成的備份文件并且它恰好不包含您想要的表數(shù)據(jù),則需要抽取相關(guān)的行并用它們作為mysql的輸入,這部分較容易。困難的是抽取應(yīng)用于該表的更新日志的片段。您會(huì)發(fā)現(xiàn): mysql_find_rows 實(shí)用程序?qū)@方面有幫助,它可以從更新日志中抽取多行查詢。另一種可能性是用另一個(gè)服務(wù)器恢復(fù)整個(gè)數(shù)據(jù)庫(kù),然后將所要的該表的文件拷貝到原始數(shù)據(jù)庫(kù)中。這實(shí)際很容易!在將文件拷貝回?cái)?shù)據(jù)庫(kù)目錄時(shí),應(yīng)確保原始數(shù)據(jù)庫(kù)的服務(wù)器關(guān)閉。