MySQL數據雙向同步
2.1 硬件環境(兩臺機器的硬件環境相同)
CPU |
Inter(R) Pentium(R) Dual CPU E5200 @2.50GHz |
內存大小 |
384MB |
硬盤大小 |
8GB |
其它說明 |
本機器為虛擬機,其有兩塊網卡,一對網卡直連,一對接入交換機 |
CPU |
Inter(R) Pentium(R) Dual CPU E5200 @2.50GHz |
內存大小 |
384MB |
硬盤大小 |
8GB |
其它說明 |
本機器為虛擬機,其有兩塊網卡,一對網卡直連,一對接入交換機 |
2.2 軟件環境(兩臺機器的軟件環境相同)
系統 |
Server 2003 Enterprise Edition |
Java環境 |
jdk1.6.0 |
web平臺 |
apache-tomcat-5.0 |
數據庫 |
MySQL Server 5.0 |
ldap數據庫 |
Sun ONE Directory Server 5.2 |
2.3 網絡環境
主機名 |
ha001 |
IP地址 |
192.168.0.188 |
子網掩碼 |
255.255.255.0 |
網關 |
192.168.0.1 |
DNS |
192.168.0.1 |
公用虛擬IP |
192.168.0.187 |
IP地址02 |
192.168.8.188 |
子網掩碼02 |
255.255.255.0 |
主機名 |
ha002 |
IP地址 |
192.168.0.189 |
子網掩碼 |
255.255.255.0 |
網關 |
192.168.0.1 |
DNS |
192.168.0.1 |
公用虛擬IP |
192.168.0.187 |
IP地址02 |
192.168.8.189 |
子網掩碼02 |
255.255.255.0 |
3 mysql數據同步實現原理:
即讀寫操作在兩臺服務器上進行,每臺服務器即主也是從。當其中的任何一臺服務器收到操作請求時,其進行相應的數據變化,并把變化的數據復制到另一臺服務器中。
4 數據同步實現
4.1 mysql數據雙向同步
4.1.1 配置服務器ha001
? 初始服務器
通過mysql工具連接服務器ha001后,新建兩個數據庫audit,idm。導入初始化數據庫文件,完成數據庫的初始化
? 給用戶授權
從開始菜單中打開mysql5的命令行,輸入正確的密碼,進入mysql控制臺命令行模式后,輸入如下命令:
#授權來自192.168.0.189的backup用戶擁有對所有庫的復制數據的權限,該用戶的密碼設為123456 GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.0.189' IDENTIFIED BY '123456'; #刷新權限設置 FLUSH PRIVILEGES ; |
? 修改配置文件
修改主目錄中的my.inf文件,在mysqld下面加入如下內容
server-id = 1 log-bin=mysql-bin binlog-do-db = audit binlog-do-db = idm binlog-ignore-db = information_schema binlog-ignore-db = mysql binlog-ignore-db = test
master-host = 192.168.0.189 master-user = backup master-password = 123456 master-port = 3306 replicate-do-db = audit replicate-do-db = idm master-connect-retry = 60 |
4.1.2 配置服務器ha002
? 初始服務器
通過mysql工具連接服務器ha002后,新建兩個數據庫audit,idm。導入初始化數據庫文件,完成數據庫的初始化
? 給用戶授權
從開始菜單中打開mysql5的命令行,輸入正確的密碼,進入mysql控制臺命令行模式后,輸入如下命令:
#授權來自192.168.0.188的backup用戶擁有對所有庫的復制數據的權限,該用戶的密碼設為123456 GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.0.188' IDENTIFIED BY '123456'; #刷新權限設置 FLUSH PRIVILEGES ; |
? 修改配置文件
修改主目錄中的my.inf文件,在mysqld下面加入如下內容
server-id = 2 master-host = 192.168.0.188 master-user = backup master-password = 123456 master-port = 3306 replicate-do-db = audit replicate-do-db = idm master-connect-retry = 60
log-bin=mysql-bin binlog-do-db = audit binlog-do-db = idm binlog-ignore-db = information_schema binlog-ignore-db = mysql binlog-ignore-db = test |
4.1.3 啟動兩臺服務器上的mysql從服務
在兩臺服務器上,均完成如下操作:
從開始菜單中打開mysql5的命令行,輸入正確的密碼,進入mysql控制臺命令行模式后,輸入如下命令:
#開啟從服務器 slave start; |
4.1.4 服務狀態檢查
在兩臺服務器上,均完成如下操作:
從開始菜單中打開mysql5的命令行,輸入正確的密碼,進入mysql控制臺命令行模式后,輸入如下命令:
#顯示主服務器狀態 Show master status; #顯示從服務器狀態 Show slave status /G; |
? 查看連接配置狀態:
Slave_IO_Running: Yes -----此項為No代表與主庫連接有問題。
Slave_SQL_Running: Yes ----如果此項為NO代表配置有問題。
? 查看對比pos點以及記錄文件是否一致:
如果不一致,在從MySQL運行
#改變從服務器的pos點為98,記錄文件為mysql-bin.000001 CHANGE MASTER TO Master_Log_File='mysql-bin.000001',Master_Log_Pos=98; |
運行此命令前需要stop slave;之后再start slave;
4.1.5 雙向同步測試
? 檢查當在兩臺機器的任何一臺mysql中修改數據時,另外的那臺的數據是否也修改
? 關閉其中一臺mysql的服務后,更新另一臺mysql的數據,再啟動已停止的那臺mysql服務器,查看數據是否修改
4.1.6 特別注意事項
? 請在任何時候都不要非法關機,否則將會造成同步數據的錯亂。
? 當出現了非法關機時,為不影響數據,請執行如下操作:
在該非法關機的機器啟動后,檢查該機器,查看數據是否與一直正常運行的機器一致了。確認其數據一致后。進入一直正常運行的機器,從開始菜單中打開mysql5的命令行,輸入正確的密碼,進入mysql控制臺命令行模式后,輸入如下命令:
#關閉slave服務 Slave stop; #開啟slave服務 Slave start; |
通過這步后,一切即恢復正常
? 如果數據已經完全錯亂,請先在兩臺機器上停止slave服務,然后將數據正常的服務器上的數據導入到不正常的服務器上,保證兩邊的服務器數據一致。然后到數據正常的服務器的mysql控制臺下輸入:
#顯示主服務器狀態 Show master status; |
獲取其狀態后,根據這個狀態到數據不正常服務器上,通過命令:
#改變從服務器的pos點為xx,記錄文件為mysql-bin.0000xx CHANGE MASTER TO Master_Log_File='mysql-bin.0000xx',Master_Log_Pos=xx; |
修改其參數后,再通過
#開啟從服務器 Start slave; #顯示從服務器狀態,檢查是否和主一致。 #檢查Slave_IO_Running,Slave_SQL_Running狀態是否正常 Show slave status /G; |
確保一切正常后。再到數據不正常的服務器的mysql控制臺下輸入:
#顯示主服務器狀態 Show master status; |
獲取其狀態后,根據這個狀態到數據正常的服務器上,通過命令:
#改變從服務器的pos點為xx,記錄文件為mysql-bin.0000xx CHANGE MASTER TO Master_Log_File='mysql-bin.0000xx',Master_Log_Pos=xx; |
修改其參數后,再通過
#開啟從服務器 Start slave; #顯示從服務器狀態,檢查是否和主一致。 #檢查Slave_IO_Running,Slave_SQL_Running狀態是否正常 Show slave status /G; |
確保也正常。最后在到兩臺服務器上修改數據,查看數據是否已經同步
? 同步一旦配置好后,請不要修改服務器機器名