步驟:
1. 在兩台機器上分别添加一個用于從機通路的帳号, 賦予REPLICATION SLAVE權限.
為slave使用者賦予任何資料庫中任何表上的REPLICATION SLAVE權限, 此使用者可以在網絡任意位置通路, 通路時以密碼slave标記.
為了安全,可以指定IP位址,如下:
第一台伺服器(IP1)運作:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@ 'IP2' IDENTIFIED BY 'test';
第一台伺服器(IP2)運作:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'IP1' IDENTIFIED BY 'test';
2.修改配置檔案,配置伺服器編号, 開啟bin-log
當使用的是ubuntu的時候, 需要注意一點, /etc/ my.cnf配置檔案下的bind-address= 127.0.0.1這一行需要注釋, 不然從機在請求時是連接配接不到的.
編輯/etc/my.cnf
找到[mysqld]這個标簽,
在它的下面有三行
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TPn10MrRUT00EVNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN0YDOwgTN3EjNxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
打開這兩行的注釋, 注意這裡的server-id是伺服器編号, 是以, 兩台伺服器上的值要設定的不一樣. 比如1和2,最好用IP位址最後一段辨別。
3. 使server-id和log-bin的配置修改生效:
sudo /etc/init.d/mysqld restart
4. 将兩台資料庫伺服器的mysql都鎖定,【非常重要】.
在mysql指令模式下:
SLAVE STOP
FLUSH TABLES WITH READ LOCK; ##這個一定要先執鎖定行後,才能夠用show master status;檢視狀态。
SHOW MASTER STATUS; ##前面已經檢視過了。
此時請保證執行這兩條指令的mysql控制台不要退出,【非常重要】.
然後進mysql控制台,分别産看相關資訊
在IP2伺服器上如下:
在IP1伺服器上如下:
5. 分别重新打開一個mysql控台台(重要), 配置主機
CHANGE MASTER TO
MASTER_HOST = 'host', #另一台機器的位址
MASTER_PORT = 3306, #另一台機器的端口
MASTER_USER = 'slave',#另一台機器上第一步配置設定的使用者名
MASTER_PASSWORD = '000000', #另一台機器上第一步配置設定的密碼
MASTER_LOG_FILE = 'mysql-bin.000001',#另一台機器上執行SHOW MASTER STATUS得到的檔案名
MASTER_LOG_POS = 237; #另一台機器上執行SHOW MASTER STATUS得到的偏移量
我分别在新打開的兩個mysql>中執行如下:
伺服器IP1:
change master to master_host='ip2',master_user='slave',master_password='test',master_log_file='mysql-bin.000005',master_log_pos=106;
和
伺服器IP2
change master to master_host='ip1',master_user='slave',master_password='test',master_log_file='mysql-bin.000005',master_log_pos=106;
6. 開啟同步
START SLAVE;
MySQL同步故障:"Slave_SQL_Running:No" 兩種解決辦法
7. 驗證正确性
SHOW SLAVE STATUS \G;
如果傳回的結果第一列是Waiting for master to send event或者Queueing
Slave_IO_Running:Yes
Slave_SQL_Running: Yes
就說明配置是正确的, 當然, 還可能會有其他的資訊也是正确的, 隻不過我這裡沒有收集到...呵呵
如下:
mysql> SHOW SLAVE STATUS \G;
*************************** 1. row***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.202
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 237
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File:mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 237
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
ERROR:
No query specified
8、檢視狀态:
show processlist;
每次重新開機mysql需要update log,是以需要從第三步驟開啟;