mysql二進位制日誌詳解

germany006發表於2013-11-07
轉載地址:

mysql二進位制日誌詳解

時間:2010-10-21 12:53來源:51開源原創 作者:夜的飛翔 點選: 次
大家好, 51 開源已經將關於 mysql 的各種重要日誌檔案的技術文件都發表出來了,並建成了 mysql 日誌專題,本文 51 開源介紹在 mysql 中非常重要地日誌檔案,那就是二進位制日誌,也就是你常聽的 bin-log 。在 5.1 的 mysql 版本中已經沒有了更新日誌,二進位制

      大家好,51開源已經將關於mysql的各種重要日誌檔案的技術文件都發表出來了,並建成了mysql日誌專題,本文51開源介紹在mysql中非常重要地日誌檔案,那就是二進位制日誌,也就是你常聽的bin-log。在5.1mysql版本中已經沒有了更新日誌,二進位制日誌完成可以代替並更好。

二進位制日誌記錄了所有的DDLDML,但不包括各種查詢。透過二進位制日誌,可以實現什麼效果呢?二進位制日誌檔案可以實現災難資料恢復,另外可以應用到mysql複製資料同步。二進位制日誌包含了所有更新了資料或者已經潛在更新了資料(例如,沒有匹配任何行的一個DELETE)的所有語句。語句以“事件”的形式儲存,它描述了資料更改。執行伺服器時若啟用二進位制日誌則效能大約慢1%。但是,二進位制日誌的好處,即用於恢復並允許設定複製超過了這個小小的效能損失。

--mysql二進位制日誌的配置

--log-bin=[file-name]用來指定錯誤日誌存放的位置。

 如果沒有指定[file-name],預設為主機名後面跟-bin做為檔名,預設存放在DATADIR目錄中。

 也可以將log-bin配置到my.cnf檔案中,這樣就省去了每次在啟動mysqld時都手工指定--log-bin.                                               

#vi /etc/my.cnf

log-bin=[/usr/local/mysql/var/mysql-bin]     //啟用二進位制日誌功能

binlog-do-db[=資料庫名]                      //指定記錄二進位制日誌的資料庫

binlog-ingore-db[=資料庫名]                  //指定不記錄二進位制日誌的資料庫

--檢視二進位制日誌檔案

由於binlog以是binary方式存取,不能直接檢視,需要用mysql提供的mysqlbinlog工具檢視。

mysqlbinlog命令

格式:mysqlbinlog [選項]  日誌檔案

  選項: -d 資料庫名    列出指定資料庫的二進位制日誌

        -h 伺服器地址  指定資料庫伺服器地址

        -u 使用者名稱      指定連線伺服器的使用者名稱

        -p 口令        指定使用者口令

        -P 數字        指定伺服器埠號

        -R             讀取二進位制日誌

        --start-datetime=datetime  指定開始時間

        --stop-datetime=datetime   指定結束時間

         --start-position=數字     指定開始位置

         --stop-position=數字      指定結束位置

   例項:-檢視本機mysql伺服器的binlog.001二進位制日誌檔案內容

      #mysqlbinlog  binlog.001

--刪除二進位制日誌檔案

  (1).reset master命令刪除所有日誌,新日誌重新從000001開始編號

  (2).purge master logs to 'mysq-bin.******' 命令可以刪除指定編號前的所有日誌

  (3).purge master logs to before 'YYYY-MM-DD HH24:MI:SS'命令可以刪除'YYYY-MM-DD HH24:MI:SS'之前的產生的所有日誌

  (4).可以在my.cnf中指定--expire_logs_days=#,此引數設定了binlog日誌的過期天數

--mysql二進位制日誌演示

  [mysql@51osos]$ mysql -uroot -p

  Enter password:

  Welcome to the MySQL monitor. Commands end with ; or \g.

  Your MySQL connection id is 18 to server version: 5.0.26-standard-log

  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

  mysql> use test;

  Database changed

  mysql> select * from pet;

  +----------+--------+---------+------+------------+------------+

  | name | owner | species | sex | birth | death |

  +----------+--------+---------+------+------------+------------+

  | Fluffy | Harold | cat | f | 1993-02-04 | NULL |

  | Claws | Gwen | cat | m | 1994-03-17 | NULL |

  | Buffy | Harold | dog | f | 1989-05-13 | NULL |

  | Fang | Benny | dog | m | 1990-08-27 | NULL |

  | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |

  | Chirpy | Gwen | bird | f | 1998-09-11 | NULL |

  | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

  | Slim | Benny | snake | m | 1996-04-29 | NULL |

  +----------+--------+---------+------+------------+------------+

  8 rows in set (0.06 sec)

  mysql> insert into pet values('hunter','yxyup','cat','f','1996-04-29',null);

  Query OK, 1 row affected (0.03 sec)

  mysql> select * from pet;

  +----------+--------+---------+------+------------+------------+

  | name | owner | species | sex | birth | death |

  +----------+--------+---------+------+------------+------------+

  | Fluffy | Harold | cat | f | 1993-02-04 | NULL |

  | Claws | Gwen | cat | m | 1994-03-17 | NULL |

  | Buffy | Harold | dog | f | 1989-05-13 | NULL |

  | Fang | Benny | dog | m | 1990-08-27 | NULL |

  | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |

  | Chirpy | Gwen | bird | f | 1998-09-11 | NULL |

  | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

  | Slim | Benny | snake | m | 1996-04-29 | NULL |

  | hunter | yxyup | cat | f | 1996-04-29 | NULL |

  +----------+--------+---------+------+------------+------------+

  9 rows in set (0.00 sec)

mysql> update pet set sex='m' where name='hunter';

  Query OK, 1 row affected (0.00 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  mysql> delete from pet where name='hunter';

  Query OK, 1 row affected (0.00 sec)

  [mysql@51osos]$ mysqlbinlog log-bin.000002

  /*!40019 SET @@session.max_insert_delayed_threads=0*/;

  /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

  # at 4

  #080313 7:52:47 server id 1 end_log_pos 98 Start: binlog v 4, server v 5.0.26-standard-log created 080313 7:52:47

  # Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.

  # at 98

  #080313 10:06:26 server id 1 end_log_pos 229 Query thread_id=18 exec_time=0 error_code=0

  use test;

  SET TIMESTAMP=1205373986;

  SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=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 pet values('hunter','yxyup','cat','f','1996-04-29',null);

  # at 229

  #080313 10:07:13 server id 1 end_log_pos 334 Query thread_id=18 exec_time=0 error_code=0

  SET TIMESTAMP=1205374033;

  update pet set sex='m' where name='hunter';

  # at 334

  #080313 10:07:38 server id 1 end_log_pos 432 Query thread_id=18 exec_time=0 error_code=0

  SET TIMESTAMP=1205374058;

  delete from pet where name='hunter';

  # at 432

  #080313 10:14:13 server id 1 end_log_pos 532 Query thread_id=18 exec_time=0 error_code=0

  SET TIMESTAMP=1205374453;

  create table t1(id int,name char(10));

  # at 532

  #080313 10:14:41 server id 1 end_log_pos 625 Query thread_id=18 exec_time=0 error_code=0

  SET TIMESTAMP=1205374481;

  alter table t1 add sex char(2);

  # End of log file

  ROLLBACK /* added by mysqlbinlog */;

  /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

  [mysql@test2]$

  可以看出,三條DML操作和兩條DDL都記錄到了binlog中了,而select並沒有記錄。

--mysql二進位制日誌災難恢復

利用二進位制日誌實現的資料恢復可以實現基於時間點的恢復和基於位置的恢復:

-將資料庫恢復到2010-10-20 19:54:44時的狀態

      #mysqlbinlog --stop-datetime="2010-10-20 19:54:44" binlog.001|mysql –uroot -p

        -將資料庫恢復到526位置

      #mysqlbinlog --stop-position=526 binlog.001|mysql –uroot –p

上面演示內容中紅色標記的就是時間,藍色標記的就是,at後面的數字

其實bin-log沒有那麼難,但是真的很重要,尤其對於DBA

51開源版權所有,歡迎轉載,轉載時請註明作者和本文連結。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-775952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章