mysql日誌復原的方法:先指定復原時間,程式碼為【mysqlbinlog --stop-date=""】;然後指定復原位置,程式碼為【mysqlbinlog --start-date="2020-10 -09 9:55:00"】。
mysql日誌復原的方法:
要想從二進位日誌恢復數據,你需要知道目前二進位日誌文件的路徑和文件名。一般可以從選項檔(即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 " 这个参数,建议使用第一种方法来备份数据库.
解除表的锁定的方法:
unlock tables;
c.查看主服务器的状态
mysql> show master statusG;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
记录 File 和 Position 项目的值,以后要用的。
相关免费学习推荐:mysql数据库(视频)
以上是mysql日誌怎麼恢復的詳細內容。更多資訊請關注PHP中文網其他相關文章!