1. 程式人生 > >mysql多臺伺服器資料同步

mysql多臺伺服器資料同步

這兩天在搞MySQL 資料同步問題,這配置很繁瑣。我這裡用了兩臺機子做測試, 都是我本地的機子.分別是
主伺服器 192.168.0.118
從伺服器 192.168.0.187


1. 首先在 主從伺服器分別建立資料庫 backup_db和backup_table表作為測試
CREATE TABLE `backup_table` ( 
  `id` int(11) NOT NULL auto_increment, 
  `name` varchar(20) character set utf8 NOT NULL, 
  `sex` varchar(2) character set utf8 NOT NULL, 
  PRIMARY KEY  (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
注意主從伺服器資料庫結構必須一致。否則出錯.

2.在住伺服器的mysql按照目錄找到my.ini檔案,開啟這個檔案在檔案末尾加上如下程式碼
#主機器的my.cnf(或my.ini)中應該配置:

server-id=1 #表示主伺服器
log-bin=e:/mysqlback/ #同步事件的日誌記錄檔案 
log-bin-index =e:/mysqlback/master-log-bin.index
log-error =e:/mysqlback/master-error.log #錯誤日誌
binlog-do-db=backup_db #提供資料同步服務的資料庫(這裡是剛才建立的測試資料庫)

3. 配置完主伺服器後 開啟從伺服器的my.cnf(或my.ini)檔案 在檔案末尾加入 如下程式碼

server-id=2 #表示從伺服器
master-host=192.168.0.118 #主機A的地址 
master-user=testuser #主機A提供給B的使用者,該使用者中需要包括資料庫backup_db的許可權 
master-password=testpwd #訪問密碼 
master-port=3306 #埠,主機的MYSQL埠 
master-connect-retry=60 #重試間隔60秒 
replicate-do-db=backup_db #同步的資料庫

4. 完成後,然後在主從伺服器的cmd 裡面開啟mysql控制檯  授權從伺服器的testuser使用者來主伺服器同步資源的許可權
主伺服器執行 GRANT FILE ON *.* TO 

[email protected]'192.168.0.187' IDENTIFIED BY 'testpwd' 
從伺服器執行 GRANT FILE ON *.* TO [email protected]'192.168.0.118' IDENTIFIED BY 'testpwd'

5. 重啟主從伺服器的mysql
從伺服器 mysql>slave start ;

主伺服器執行 mysql>show master status;   結果如下
mysql> show master status;
+---------+----------+--------------+------------------+
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------+----------+--------------+------------------+
| .000002 |      613 | backup_db    |                  |
+---------+----------+--------------+------------------+
1 row in set (0.00 sec)

從伺服器 
mysql>start slave;
mysql> show slave status/G;
執行結果
*************************** 1. row ***************************
Slave_IO_State: 
Master_Host: 192.168.0.118
Master_User: testuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_ mysql-bin.000016
Read_Master_Log_Pos: 173
Relay_Log_ mysqld-relay-bin.000002
Relay_Log_Pos: 98
Relay_Master_Log_ mysql-bin.000016
Slave_IO_Running: No 
Slave_SQL_Running:Yes
...

執行結果 Slave_IO_Running 和 Slave_SQL_Running 必須為yes 如果你發現Slave_IO_Running: No 那麼可能是許可權問題
解決步驟:
mysql> show master status;
+------------------+--------------------+----------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-------------------+-----------------+------------------+
| mysql-bin.000001 | 98 | | | 
+------------------+--------------------+-----------------+------------------+
mysql> slave stop;
mysql> change master to Master_Log_File='mysql-bin.000001',Master_Log_Pos=98;
mysql> slave start;

或者開啟主從伺服器的 phpmyadmin 找到testuser 使用者 設定它們的許可權 然後再分別重啟,再到從伺服器中mysql> show slave status/G;
發現
Slave_IO_Running: Yes 
Slave_SQL_Running:Yes

這時你在 主伺服器的phpmyadmin 找到 backup_db 的 backup_table表 插入一條記錄, 在到從伺服器中看看這張表,發現多了一條記錄 ,成功了!!!