使用MySQL主從服務器配置實現雙機熱備
1 mysql數據庫沒有增量備份的機制,當數據量太大的時候備份是一個很大的問題。還好mysql數據庫提供了一種主從備份的機制,其實就是把主數據庫的所有的數據同時寫到備份數據庫中,實現mysql數據庫的熱備份。
2 要想實現雙機的熱備首先要了解主從數據庫服務器的版本的需求。要實現熱備mysql的版本都要高于3.2,還有一個基本的原則就是作為從數據庫的數據庫版本可以高于主服務器數據庫的版本,但是不可以低于主服務器的數據庫版本。
3 設置主數據庫服務器:
- 首先查看主服務器的版本是否是支持熱備。然后查看my.cnf(類unix)或者my.ini(windows)中mysqld配置塊的配置有沒有log-bin(記錄數據庫更改日志),因為mysql的復制機制是基于binlog的復制機制,所以主服務器一定要支持binlog才行。然后設置要寫入日志的數據庫或者不要寫入日志的數據庫。這樣只有您感興趣的數據庫的更改才寫入到數據庫的日志中。
#數據庫的id可以按需求設定,主從服務器的id必須不同
server-id=1
#日志文件的名稱,如果沒有設置則默認主機名的一個日志名稱
log-bin=/usr/local/mysql/data/log_name#記錄日志的數據庫
binlog-do-db=db_namebinlog-do-db=db_name2
#不記錄日志的數據庫
binlog-ignore-db=ignore_db_namebinlog-ignore-db=ignore_db_name2
以上的如果有多個數據庫則反復設置。
然后設置同步數據庫的用戶帳號:
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'user'@10.12.17.140 IDENTIFIED BY 'passwd';
設置好主服務器的配置文件后重新啟動數據庫。
- 鎖定現有的數據庫并備份現在的數據。
鎖定數據庫
mysql> FLUSH TABLES WITH READ LOCK;
備份數據庫有兩種辦法一種是直接進入到mysql的data目錄然后打包你需要備份數據庫的文件夾,第二種是使用mysqldump的方式來備份數據庫但是要加上"--master-data "這個參數,建議使用第一種方法來備份數據庫。 - 查看主服務器的狀態。
mysql> show master status\G;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 1727487 | | |
+------------------+----------+--------------+------------------+
記錄File和Position項目的值,以后要用的。
- 然后把數據庫的鎖定打開。
mysql> UNLOCK TABLES;
建議主服務器打開所有DB的binlog,而使用replicate-do-db在從服務器對需要同步的DB進行過濾。
4 設置從服務器:
- 首先設置數據庫的配置文件。
#有多臺從服務器不能重復。
server-id=n#主服務器的IP地址或者域名
master-host=172.25.42.83#主數據庫的端口號
master-port=3306#同步數據庫的用戶
master-user=user#同步數據庫的密碼
master-password=passwd#如果從服務器發現主服務器斷掉,重新連接的時間差
master-connect-retry=60
- 把從主數據庫服務器備份出來的數據庫導入到從服務器中。
- 啟動從數據庫服務器。如果啟動的時候沒有加上"--skip-slave-start"這個參數則進入到mysql中,使用上述配置來進行連接主服務器;如果加了--skip-slave-start則忽略配置,而是在mysql控制臺使用CHANGE MASTER TO命令來連接主服務器。
- 所有步驟完成之后,則在控制臺啟動slave服務。
mysql> slave stop; //停止slave的服務
mysql> slave start //啟動slave的服務
查看數據庫的同步情況吧。如果能夠成功同步那就恭喜了!
查看主從服務器的狀態。
mysql> SHOW PROCESSLIST\G //可以查看mysql的進程看看是否有監聽的進程
附:mysql主從熱備測試環境部分關鍵配置
環境:主服務器有多個DB,包括backtest和backnormal,打開binlog,而從服務器只希望備份backtest和backnormal這2個DB,配置如下:
1 主服務器(172.25.42.83)
log-bin = mysql-bin
server-id = 1
2 從服務器
server-id = 10
master-host = 172.25.42.83
master-user = user
master-password = passwd
master-port = 3306
# 過濾以下2個DB
replicate-do-db = backtest
replicate-do-db = backnormal