目前成熟的即時備份為雙機(master/slave),是基於同步處理記錄事件來實現,那單機如何?具有增量的備份呢?可以借用雙機的原理,非常簡單,實施步驟如下:
Mysql版本:mysql4.0+
1、vi my.cfg
複製代碼 代碼如下:
[mysqld]
log-update=/home/backup/update #添加該行
2、service mysql restart
會在/home/backup/update00001檔案,內容為資料庫變化的所有SQL(沒有select)
3、每天的全備,mysql4.0+最簡單就是備份data目錄。
複製代碼 代碼如下:
service mysql stop
tar -czf data(日期).tar.gz mysql/data
service mysql start
當mysql啟動時系統會自動在/home/backup/建立update0000*的檔案,那我們可以用該檔案作為當天全備的增量即時備份。
4、資料還原
複製代碼 代碼如下:
service mysql stop
tar -zxvf data(日期).tar.gz mysql/
service mysql start
mysqladmin -u -p /home/backup/update0000*
如想還原昨天、前天的資料只需要找相應的update0000*來還原即可:)
以下是補充:
1、MYSQL資料庫提供了一種主從備份的機制,其實就是把主要資料庫的所有的資料同時寫到備份資料庫裡面,從而實現MYSQL資料庫的即時備份。
2、版本要求,首先要保證主伺服器和從伺服器的MYSQL版本都高於3.2,另外,從資料庫的版本可以高於主伺服器,但不能低於主伺服器。
3、主伺服器設定:
A、先修改MY.INI中有關log-bin的設定,這是記錄資料庫更改的日誌,由於MYSQL的複製機制,是基於日誌的,所以主伺服器必須要支援變更記錄檔才可以。
接著設定要寫入日誌的資料庫,或者不要寫入日誌的資料庫,這是為了告訴MYSQL,那個庫需要備份,哪個不需要。
下面是配置詳情:
server-id=1 //資料庫的id這個應該預設是1就不用改動
log-bin=log_name //記錄檔的名稱,這裡可以制定日誌到別的目錄 如果沒有設定則預設主控件名的一個日誌名稱
binlog-do-db=db_name //記錄日誌的資料庫
binlog-ignore-db=db_name //不記錄日誌的資料庫
上面的binlog-do-db和binlog-ignore-db可以設定成多個資料庫,每個資料庫名稱之間用“,”分割開。
下一步是設定同步資料庫的使用者帳號
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO ‘備份使用者名稱'@'只能從這個IP登入' IDENTIFIED BY ‘備份使用者密碼';
設定好以後,重啟一下資料庫服務。
B、鎖定現有的資料,並將資料備份
資料庫鎖定的命令是:
mysql> FLUSH TABLES WITH READ LOCK;
然後進入mysql的data目錄,然後打包你需要備份的資料庫目錄。
C、現在可以查看主伺服器的狀態了:
命令如下:
mysql> show master status\G;
返回結果會是這樣的
+—————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————+———-+————–+——————+
| mysql-bin.003 | 73 | test | manual,mysql |
+—————+———-+————–+——————+
當然,這個表,顯示了你剛才在MY.INI中寫入的配置。
然後解鎖資料庫:
mysql> UNLOCK TABLES;
4、從伺服器設定
還是和剛才一樣,修改資料庫設定檔,即MY.INI
配置詳情如下:
server-id=n //設定資料庫id預設主伺服器是1可以隨便設定但是如果有多台從伺服器則不能重複。
master-host=db-master.mycompany.com //主伺服器的IP地址或者網域名稱
master-port=3306 //主要資料庫的連接埠號碼
master-user=pertinax //同步資料庫的使用者
master-password=freitag //同步資料庫的密碼
master-connect-retry=60 //如果從伺服器發現主伺服器斷掉,重新串連的時間差
report-host=db-slave.mycompany.com //報告錯誤的伺服器
然後將你剛才打包的資料庫檔案拷貝到你的從資料庫目錄中。
重啟從資料庫伺服器。
然後停止SLAVE的服務
mysql> slave stop; //停止slave的服務
停止之後,還是在mysql提示符下,設定主伺服器的各種參數
命令如下:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主伺服器的IP地址
-> MASTER_USER='replication_user_name', //同步資料庫的使用者
-> MASTER_PASSWORD='replication_password', //同步資料庫的密碼
-> MASTER_LOG_FILE='recorded_log_file_name', //主伺服器二進位日誌的檔案名稱(前面要求記住的參數)
-> MASTER_LOG_POS=recorded_log_position; //記錄檔的開始位置(前面要求記住的參數)
然後啟動同步資料庫的進程
mysql> slave start;
沒有意外的話基本上到這一步,雙庫同步就已經實現了。