MySQLデータ復旧–binlog

5155 ワード

転載:http://www.linuxidc.com/Linux/2014-03/97907p2.htm
MySQL Binary Logは、よく言われるbin-logで、mysqlが変更を実行して生成したバイナリ・ログ・ファイルです.その主な役割は、*データ・リカバリ*プライマリ・データベースの2つです.slave側で追加削除を実行し、masterと同期を維持します. 1.binary log機能を開くにはmysqlのプロファイルを修正する必要があり、本編の実験環境はcentos 6である.5,プロファイルはmysqlインストールディレクトリ/etc/my.cnf、文を追加
log_bin = mysql_bin即[mysqld]...... log_bin = mysql_bin ...... log_binは生成されたbin-logのファイル名、接尾辞は6桁の数字の符号化であり、000001から上の構成に従って生成されたファイルはmysql_bin.000001 mysql_bin.000002 ...... 
保存後mysqlを再起動するサーバを構成しshow variables like'log_bin';bin-logがオンになっているかどうかを確認しますmysql> show global variables like 'log_bin';  +---------------+-------+  | Variable_name | Value |  +---------------+-------+  | log_bin       | ON    |  +---------------+-------+  1 row in set (0.00 sec)
2.表示されたbinary log bin-logはバイナリファイルなので、メモ帳などのエディタで直接開くことはできません.mysqlは2つの方法で表示されます.紹介する前に、データベースを追加削除してください.そうしないと、logの中のデータが少し空いています.create table bin( id int(10) primary key auto_increment,name varchar(255));(テスト前にテーブルを作成しました)insert into bin(name)values('orange'); 1.クライアントでshow binlog events in'mysql_を使用するbin.000001'文を参照してください.順序をきれいにするために、末尾にGを追加して結果を横に縦にすることができます.この場合、末尾は追加する必要はありません.文の終端.eg: 
mysql> show binlog events in 'mysql_bin.000001'\G 
...............  ............... 
*************************** 3. row *************************** 
Log_name: mysql_bin.000001 
Pos: 174 
Event_type: Intvar 
Server_id: 1 
End_log_pos: 202 
Info: INSERT_ID=2 
*************************** 4. row *************************** 
Log_name: mysql_bin.000001 
Pos: 202 
Event_type: Query 
Server_id: 1 
End_log_pos: 304 
Info: use `test`; insert into bin(name) values ('orange') 
*************************** 5. row ***************************

...............省略する...... Log_name:このlogはそのファイルに存在し、この2つのlogはmysql_とともに存在することがわかります.bin.000001ファイルにあります.Pos:bin-logにおけるlogの開始位置Event_type:logのタイプ情報サーバ_id:構成中のserver_を表示できますid、ロゴはそのサーバがEndを生成したことを示すlog_pos:log bin-logでの終了位置Info:logのいくつかのコメント情報は、どのような操作が行われているかを直感的に見ることができます.
2.mysqlが持っているツールmysqlbinlogを使用して、bin-logがハードディスクに存在する場所を知る必要があります.私のは/var/lib/mysqlディレクトリにあります.
mysqlbinlog mysql_bin.000001 
/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
# at 4 
#140215 16:35:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.51-community-log created 140215 16:35:56 at startup
ROLLBACK/*!*/; 
BINLOG ' 
7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#140215 16:36:51 server id 1 end_log_pos 174 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1350290211/*!*/; 
SET @@session.pseudo_thread_id=2/*!*/; 
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/; 
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/; 
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/; 
SET @@session.collation_database=DEFAULT/*!*/; 
BEGIN 
/*!*/; 
# at 174 
#140215 16:36:51 server id 1 end_log_pos 202 Intvar 
SET INSERT_ID=3/*!*/; 
# at 202 
#140215 16:36:51 server id 1 end_log_pos 309 Query thread_id=2 exec_time=0 error_code=0
use test/*!*/; 
SET TIMESTAMP=1350290211/*!*/; 
insert into bin(name) values('xishizhaohua') 
/*!*/; 
# at 309 
#140215 16:36:51 server id 1 end_log_pos 336 Xid = 28 
COMMIT/*!*/; 
# at 336 
#140215 16:37:25 server id 1 end_log_pos 379 Rotate to mysql_bin.000002 pos: 4
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

レイアウトは少し乱れていますが、タイムスタンプ、自己増加オフセット、トランザクションの自動コミットの有無など、図からより多くの情報を得ることができます.下の図は、抽出した部分です. 
140308192227952.png
3.bin_を利用するlogリカバリデータ(dateとposition)1.最も長く使われているのは、指定したデータ側のデータを復元することです.直接データベースに復元できます.mysqlbinlog--start-date=「2014-02-18 16:30:00」--stop-date=「2014-02-18 17:00:00」mysql_bin.000001 |mysql -uroot -p123456
sqlファイルとしてエクスポートし、データベースにインポートすることもできます.mysqlbinlog--start-date=「2014-02-18 16:30:00」--stop-date=「2014-02-18 17:00」mysql_bin.000001 >/backup/1.sqlsource/backup/1.sql 
2.開始/終了位置を指定し、上のビューから生成するbinary logあるlogの開始から終了までの位置を知ることができ、回復中にA位置からB位置への返信のlogを指定することができる.次の2つのパラメータで指定する必要があります:--start-positon=“50”//指定50位置から--stop-postion=“100”//指定100位置まで終了
最後にいくつかbin_を紹介しますlogの操作:1.最後のbinログファイルがそれであることを確認します.現在位置しています.
show master status;
2.新しいログ・ファイルを有効にします.通常、データベースのバックアップが完了した後に実行されます.
flush logs;
3.既存のbin-logをクリアする
reset master;