?來源:http://www.oschina.net/bbs/thread/10388
設置Mysql的主從設置很重要,有如下幾點用處:
1 做備份機器,一旦主服務器崩潰,可以直接啟用從服務器作為主服務器
2 可以直接鎖定從服務器的表只讀,然后做備份數據,這樣不會影響主服務器的服務
3 可以處理讀寫數據庫的負載均衡
阿權總結的設置主從的要點有如下:
1 主從服務器的啟動方式的不同點
2 主服務器只讀或者停止服務然后獲取當前數據快照,清理日志或者重新開始記錄日志
3 從服務器一般需要只讀,否則容易產生錯誤導致同步失敗
阿權制作主從的過程總結:
1 停止數據庫服務,并且刪除當前的所有mysql日志(默認是mysql-bin.*)
2 把當前的所有數據庫打包,備用
3 打包完成后,主服務器可以啟動了
4 把從服務器的同步日志刪除(默認是mysql-relay-bin.*)
5 把文件解壓到從服務器的數據目錄
6 設置好cnf文件,啟動即可
當然,取得快照的方法還有別的:
1 FLUSH TABLES WITH READ LOCK 鎖定所有表
2 打包文件或者是直接導出數據,比停止服務好的地方就是有一段讀數據庫的時間
3 然后 unlock tables
主從的配置區別:
啟動方式請參考《Mysql多實例啟動》
主服務器沒有設置 master的值,下面的參數影響同步:
binlog-ignore-db = test
#設定記錄的庫,可以添加多行
binlog-do-db = vnet
從服務器設置了系列master的參數:
master-port = 3308
master-user = usr
master-password = pwd
master-retry-count = 999
master-connect-retry = 60
#并且可以設置忽略的庫,可以添加多行
replicate-ignore-db = testdb
#設置僅處理的庫,可以添加多行
replicate-do-db = aslibra
設置忽略的和處理的參數的一個就好,如果需要忽略哪些,就加上忽略的庫,如果僅僅需要處理一兩個,那就加上do-db的設置吧
如何檢查同步情況?
show master status;
show slave status;
這里會列出當前同步的情況,包括同步哪些庫,忽略哪些庫
如何檢查發生同步錯誤?
1 主服務器更新后沒有反映在從服務器,這個是看的到的
2 可以使用phpmyadmin看進程或者是命令 SHOW PROCESSLIST?
主服務器會有一條slave用戶的記錄,比如
從服務器會有兩條記錄
system user ? ? ?無 ? Connect ? 187 ? Has read all relay log; waiting for the slave I/O thread to update it ? --- ?
如果同步失敗,則后一條沒有
同步特性及已知問題
跨庫的操作是不更新的,比如
更多內容可以參考《同步特性及已知問題》,這里就不詳細列出了啦
哪些從服務器操作會導致錯誤?
1 刪除表或者修改表結構會導致之后更新該表產生錯誤,可以恢復原先結構再繼續同步就可以,錯誤如下
2 從服務器如果寫入一條記錄,自增字段加一,主鍵唯一性錯誤,這樣主服務器就無法同步這樣的數據,導致同步停止。如果不產生主鍵沖突的數據是不會有影響
080503 ?4:36:44 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000003' position 244
3 從服務器刪除某條數據,主服務器再刪除該條數據,不會產生錯誤
阿權的總結:
1 從服務器如果需要重新做同步數據,必須是主服務器開始記錄日志的數據快照。所以快照很重要,可以用該快照立刻構建一個從服務器。
2 日志只是記錄sql語句,執行刪除和更新如果與主服務器數據不同是不會產生錯誤
3 如果執行插入數據,產生主鍵沖突則會導致錯誤,停止同步,除非從服務器執行本語句正常,則可以繼續同步
4 表結構修改如果返回錯誤,則也會導致同步停止