程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 教你主動恢復MySQL數據庫的日記文件(binlog)

教你主動恢復MySQL數據庫的日記文件(binlog)

編輯:MySQL綜合教程

教你主動恢復MySQL數據庫的日記文件(binlog)。本站提示廣大學習愛好者:(教你主動恢復MySQL數據庫的日記文件(binlog))文章只能為提供參考,不一定能成為您想要的結果。以下是教你主動恢復MySQL數據庫的日記文件(binlog)正文


假如MySQL辦事器啟用了二進制日記,你可使用mysqlbinlog對象來恢復從指定的時光點開端 (例如,從你最初一次備份)直到如今或另外一個指定的時光點的數據。“mysqlbinlog:用於處置二進制日記文件的適用對象”。
要想從二進制日記恢單數據,你須要曉得以後二進制日記文件的途徑和文件名。普通可以從選項文件(即my.cnf or my.ini,取決於你的體系)中找到途徑。假如未包括在選項文件中,當辦事器啟動時,可以在敕令行中以選項的情勢給出。啟用二進制日記的選項為 --log-bin。要想肯定以後的二進制日記文件的文件名,輸出上面的MySQL語句:

SHOW BINLOG EVENTS \G

你還可以從敕令行輸出上面的內容:
mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS \G'

將暗碼my_pwd調換為辦事器的root暗碼。

1. 指定恢復時光

關於MySQL 4.1.4,可以在mysqlbinlog語句中經由過程--start-date和--stop-date選項指定DATETIME格局的起止時光。舉例說 明,假定在明天上午10:00(明天是2006年4月20日),履行SQL語句來刪除一個年夜表。要想恢復表和數據,你可以恢復前早晨的備份,並輸出:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
  | mysql -u root -pmypwd
該敕令將恢復截止到在--stop-date選項中以DATETIME格局給出的日期和時光的一切數據。假如你沒有檢測到幾個小時後輸出的毛病的SQL語句,能夠你想要恢復前面產生的運動。依據這些,你可以用起使日期和時光再次運轉mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
  | mysql -u root -pmypwd \
在該行中,從上午10:01登錄的SQL語句將運轉。組合履行前夕的轉儲文件和mysqlbinlog的兩行可以將一切數據恢復到上午10:00前一秒鐘。你應檢討日記以確保時光確實。下一節引見若何完成。

2. 指定恢復地位

也能夠不指定日期和時光,而應用mysqlbinlog的選項--start-position和--stop-position來指定日記地位。它們的 感化與起止日選項雷同,分歧的是給出了從日記起的地位號。應用日記地位是更精確的恢復辦法,特殊是當因為損壞性SQL語句同時產生很多事務的時刻。要想確 定地位號,可以運轉mysqlbinlog尋覓履行了不希冀的事務的時光規模,但應將成果從新指向文本文件以便停止檢討。操作辦法為:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
  /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
該敕令將在/tmp目次創立小的文本文件,將顯示履行了毛病的SQL語句時的SQL語句。你可以用文本編纂器翻開該文件,尋覓你不要想反復的語句。假如二 進制日記中的地位號用於停滯和持續恢復操作,應停止正文。用log_pos加一個數字來標志地位。應用地位號恢復了之前的備份文件後,你應從敕令行輸出下 面內容:


mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \

下面的第1即將恢復到停滯地位為止的一切事務。下一即將恢復從給定的肇端地位直到二進制日記停止的一切事務。由於mysqlbinlog的輸入包含每一個SQL語句記載之前的SET TIMESTAMP語句,恢復的數據和相干MySQL日記將反響事務履行的原時光。

1、mysql 數據庫沒有增量備份的機制,當數據量太年夜的時刻備份是一個很年夜的成績。還好 mysql 數據庫供給了一種主從備份的機制,其實就是把主數據庫的一切的數據同時寫到備份數據庫中。完成 mysql 數據庫的熱備份。

2、要想完成雙機的熱備起首要懂得主從數據庫辦事器的版本的需求。要完成熱備 mysql 的版本都要高於3.2,還有一個根本的准繩就是作為從數據庫的數據庫版本可以高於主辦事器數據庫的版本,然則弗成以低於主辦事器的數據庫版本。
3、設置主數據庫辦事器:
  a. 起首檢查主辦事器的版本能否是支撐熱備的版本。然後檢查 my.cnf(類 unix)或許 my.ini(windows)中 mysqld 設置裝備擺設塊的設置裝備擺設有無 log-bin (記載數據庫更改日記),由於 mysql 的復制機制是基於日記的復制機制,所以主辦事器必定要支撐更改日記才行。然後設置要寫入日記的數據庫或許不要寫入日記的數據庫。如許只要您感興致的數據庫 的更改才寫入到數據庫的日記中。
  server-id=1 //數據庫的 id 這個應當默許是1就不消修改
  log-bin=log_name //日記文件的稱號,這裡可以制訂日記到其余目次 假如沒有設置則默許主機名的一個日記稱號
  binlog-do-db=db_name //記載日記的數據庫
  binlog-ignore-db=db_name //不記載日記的數據庫
  以上的假如有多個數據庫用","朋分開,然後設置同步數據庫的用戶帳號
  mysql> GRANT REPLICATION SLAVE ON *.*
  -> TO
[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email]
IDENTIFIED BY 'slavepass';
  4.0.2 之前的版本, 由於不支撐 REPLICATION 要應用上面的語句來完成這個功效
  mysql> GRANT FILE ON *.*
  -> TO
[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email]
IDENTIFIED BY 'slavepass';
  設置好主辦事器的設置裝備擺設文件後從新啟動數據庫
  b.鎖定現有的數據庫並備份如今的數據

  鎖定命據庫

  mysql> FLUSH TABLES WITH READ LOCK;
  備份數據庫有兩種方法一種是直接進入到 mysql 的 data 目次然後打包你須要備份數據庫的文件夾,第二種是應用 mysqldump 的方法來備份數據庫然則要加上"--master-data " 這個參數,建議應用第一種辦法來備份數據庫
  c.檢查主辦事器的狀況
  mysql> show master statusG;
  +---------------+----------+--------------+------------------+
  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +---------------+----------+--------------+------------------+
  | mysql-bin.003 | 73 | test | manual,mysql |
  +---------------+----------+--------------+------------------+
  記載 File 和 Position 項目標值,今後要用的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved