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
從伺服器執行 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表 插入一條記錄, 在到從伺服器中看看這張表,發現多了一條記錄 ,成功了!!!