mysql replication 主要通過複製二進位日誌,在slave上執行master一樣的來SQL來保持master 和slave的資料一致。
好處不必多說, 第一個 master-slave的結構首先能實現讀寫分離, 對於緩解資料庫Server的鴨梨會起到一定好處, 另外當master宕機的話, 可以馬上切到slave上邊,可以提高系統的可用性。
1. mysql 的主從複製是通過 bin log來實現的, 首先master要開啟二進位日誌
| 代碼如下 |
複製代碼 |
|
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_ignore_db = mysql |
2. master 上要開一個專供複製的帳號
grant file,select,replication slave on *.* to slave@'%' identified by '123456'; --我這裡是有問題的,開了許可權給所有的庫 所有的機器,而且還設定了弱密碼,不過做為測試機玩玩也未必不可
3. slave 機器 設定一個 server-id
server-id = 2
4. 設定複製資訊
這裡要先看一下當前 master 的binlog 記到哪裡了, 從哪個檔案開始的哪一個位置, 然後設定slave從這個地方開始複製。 所以這個時候要保證 master 和 slave的資料是一樣的,這樣才能保證master和slave資料的一致性。
先在master端執行 : show master status;
| 代碼如下 |
複製代碼 |
|
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000015 | 26560211 | | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec) |
得到當前的二進位記錄檔和當前的位置
在 slave 端執行:
| 代碼如下 |
複製代碼 |
|
change master to master_host='192.168.57.64',
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000015',
master_log_pos=26560211;
最後 slave端 start slave; |
用 show slave status\G; 查看參數 Slave_IO_Running 和 Slave_SQL_Running, 如果兩個參數都是 yes , 說明搞定