今天看了同事不小心刪除了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日志