萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql 通過bin

mysql 通過bin

mysql中bin-log在mysql默認狀態下是沒有打開的,我們要先打開mysql 開啟bin-log功能,然後再通過備份的bin-log進行數據庫恢復了。

今天看了同事不小心刪除了mysql數據庫中的用戶表。還好有打開mysql的bin-log記錄了日志,這樣就可以通過日志來還原之前備份的數據。具體的操作是通過mysqlbinlog這個指令來完成的

 代碼如下 復制代碼  /mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00"  --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f

具體的參數看下名字就能明白

database:指定具體的數據庫
start-date:開始時間
stop-date:結束時間
/mysql/data/mysql-bin.000001:

指定的日志文件

如果你沒有備份數據的話,你就必須通過日志文件一個一個還原,記得順序不能亂。如果你沒有備份數據,日志又被部分刪除的話,那麼就悲劇了。因此,還原只是一種方法,最重要的還是定期備份數據。只要備份數據在,日志文件在,東西都可以解決。
同時記錄一些操作日志的方法
查看所有日志:

 代碼如下 復制代碼


show master logs;

當前使用的binlog文件

 代碼如下 復制代碼 show binlog events g;

產生一個新的binlog日志文件

 代碼如下 復制代碼

flush logs;

刪除所有二進制日志,並從新開始記錄

 代碼如下 復制代碼

flush logs; 
reset master;

這裡突然有一種想法,是否每次備份完數據以後就把之前的日志清理下,這樣一旦發生問題,就可以從最近的日志開始還原。這個只是我的一種想法,有什麼問題請指正。
同時大家如果希望不在錯誤操作delete這個可以在mysql啟動的時候加入-U這個參數
啟動MySQL的時候加上參數 -U

-U, –safe-updates Only allow UPDATE and DELETE that uses keys.

他的作用是防止執行delete的時候沒帶有條件語句,如果沒加上where則語句不執行。

一次完整的Mysqlbin-log日志恢復過程實例

1).創建一個表:

 代碼如下 復制代碼

mysql>usetest;

mysql>createtable t1(id int);

mysql>showtables;

 

2).添加兩行數據:

 代碼如下 復制代碼

mysql>insertinto t1 values(1);

mysql>insertinto t1 values(2);

mysql>select *from t1;

 

3).備份現有數據(09:30):

 代碼如下 復制代碼

#mysqldump -uroot-p123456 test -l -F > /tmp/test.sql

 

4).在備份完後再添加三行數據(記錄):

 代碼如下 復制代碼

mysql>insertinto t1 values(3);

mysql>insertinto t1 values(4);

mysql>insertinto t1 values(5);

 

5).此時突然數據庫損損壞或者認為刪除:

 代碼如下 復制代碼

mysql>droptable t1;

 

6).用已備份的test.sql來恢復數據庫:

 代碼如下 復制代碼

#mysql -uroot-p123456 test < test.sql

 

7).從bin-log日志恢復:

 代碼如下 復制代碼

#/usr/local/mysql/bin/mysqlbinlog–no-defaults mysql-bin.000006|more//查看bin-log日志,在我的虛力機上bin-log日志從mysql-bin.000005開始

#/usr/local/mysql/bin/mysqlbinlog--no-defaults --stop-position=”272” mysql-bin.000006 |/usr/local/mysql/bin/mysql -uroot -p123456 //恢復bin-log日志

如果你沒有開啟bin日志我們可參考正同方法開啟

一、 Mysqlbin-log 日志

1.開啟Mysqlbin-log 日志

#vi/etc/my.cnf

 代碼如下 復制代碼

[client]

#password =your_password

port =3306

socket =/tmp/mysql.sock

default-character-set-utf8

.......

[mysqld]

port= 3306

socket= /var/lib/mysql/mysql.sock

log-slow-queries=mysql-slowlog

log-error=mysql.err

log=mysql.log

log-bin=mysql-bin//刪除#符號

 2.查看二進制文件(mysql-bin.******)

 代碼如下 復制代碼

#cd/usr/local/mysql/bin/ && ls

 3.查看mysqbinlog日志是否開啟

 代碼如下 復制代碼

mysql>showvariables like “%log-bin%;

 4.與Mysqlbin-log有關的日志操作

 代碼如下 復制代碼

mysql>flushlogs;//此時就會多一個最新的bin-log日志

mysql>showmaster status;//查看最後一個bin日志

mysql>resetmaster;//清空所有的bin-log日志

mysql>mysqlbinlog–no-defaults mysql-bin.******|more//查看bin-log日志

copyright © 萬盛學電腦網 all rights reserved