當數據庫的數據量讀寫頻繁的時候,我們就要考慮把數據庫的讀寫分開,以提高數據庫的使用效率,(當然還有其他用處比如,備份數據),這個時候我們就要用到MySQL的一個功能,數據庫同步。下面就具體講一下實現方法
一、系統環境
主數據庫(master):
系統:Windows
數據庫:MySQL 5.0.51
IP:192.168.1.156
從數據庫(slave):
系統:Linux
數據庫:MySQL 5.0.67
IP:192.168.1.154
二、配置參數:
發現網上說,兩個數據庫的配置必須一致,還把兩個配置文件對拷。看起來挺有道理,因為怕部分功能不一致,也有可能導致同步錯誤。但是我的兩個MySQL的所在系統都不一樣,所以就按照默認的安裝配置了。
數據庫准備:
要同步的數據庫叫 account
那就必須把主服務器上的account和數據完整的導一份 到slave服務器上
且在主服務器上開一個帳戶,允許從服務器訪問。
主數據庫(master)配置:
修改MySQL 的配置文件my.cnf,
找到 server-id 這一行,更改如下
server-id = 1
且增加兩行必要信息:
log-bin = d:/log-bin.log #二進制變更日值的存放位置
binlog-do-db = account #要同步的數據庫
解釋下:Slave上MySQL的Replication工作有兩個線程,I/O thread和SQL thread,I/O 的作用是從master 3306端口上把它的binlog取過來(master在被修改了任何內容之後,就會把修改了什麼寫到自己的binlog等待slave更新),然後寫到本地的relay-log,而SQL thread則是去讀本地的relay-log,再把它轉換成本MySQL所能理解的東西,於是同步就這樣一步一步的完成.
master數據庫的修改僅此一步就OK了
從數據庫(slave)配置:
修改 MySQL 下的my.cnf
找到 server-id 這一行,更改如下
server-id = 2 //從數據庫
master-host = 192.168.1.156
master-user = lzy
master-passWord = lzy
master-port = 3306
replicate-do-db = account //要同步的數據庫
最後,把兩個MySQL都重啟動一下。
1、看看剛才設置的日志路徑下有沒有日志生成。
2、在156上添加一條數據,看看從數據庫有沒增加。如果沒有,看看slave數據庫的錯誤日志,根據錯誤信息具體調試下。
配置好同步後,我發覺log-bin的日志位置不好,想換一個地方,於是改到其他盤去了。重啟MySQL後發現同步不能用了。超級郁悶。於是去看了下MySQL的錯誤日志,
“count not find first log file name in binary log in…”
找了半天沒找到原因,忽然發現錯誤日志的同目錄下有個master.info文件,應該是記錄從主服務器取數據的記錄吧。打開看了看是的
14
log-bin.000003
337
192.168.1.156
lzy
lzy
3306
60
0
我把這個文件刪除了,重啟動MySQL。OK了數據同步過來了