mysql 主從複製 配置記錄
阿新 • • 發佈:2018-12-15
兩臺伺服器mysql實現主從複製
準備步驟:
兩臺已經安裝好mysql資料庫的伺服器
上一篇有提到安裝mysql5.7.24
主伺服器配置:
建立mysql遠端登入角色和許可權:
mysql> create user 'realfake'@'106.12.203.18' identified by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave on *.* to 'realfake'@'106.12.203.18' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
主mysql的my.cnf新增:
# # server-id 唯一的服務辨識號,數值位於 1 到 2^32-1之間. # # 此值在master和slave上都需要設定. # # 如果 “master-host” 沒有被設定,則預設為1, 但是如果忽略此選項,MySQL不會作為master生效. server-id = 1 #[必須]伺服器唯一ID,預設是1 ##------------------------------------------master上的配置開始------------------------------------------------## # # # # log-bin 開啟二進位制日誌功能. # # # 在複製(replication)配置中,作為MASTER主伺服器必須開啟此項 # # # 如果你需要從你最後的備份中做基於時間點的恢復,你也同樣需要二進位制日誌. # log-bin = mysql-bin #[必須]啟用二進位制日誌 # # # 需要開啟生成二進位制日誌記錄相關配置,配置在需要被複制的伺服器上,即:master # binlog-do-db = test_db #指定對名稱為test_db的資料庫記錄二進位制日誌 # #binlog-ignore-db = mysql #指定不對名稱為mysql的資料庫記錄二進位制日誌 # #binlog-ignore-db = information_schema #指定不對名稱為information_schema的資料庫記錄二進位制日誌 # binlog_format = mixed #binlog日誌格式,mysql預設採用,如果從伺服器slave有別的slave要複製那麼該slave也需要這一項# expire_logs_days = 7 #超過7天的binlog刪除### # # # ##-------------------------------------------master上的配置結束-----------------------------------------------## skip-external-locking #MySQL選項以避免外部鎖定。該選項預設開啟 default-storage-engine = InnoDB #預設儲存引擎 lower_case_table_names = 1 #忽略表大小寫
從伺服器配置:
從mysql的my.cnf
# # server-id 唯一的服務辨識號,數值位於 1 到 2^32-1之間. # # 此值在master和slave上都需要設定. # # 如果 “master-host” 沒有被設定,則預設為1, 但是如果忽略此選項,MySQL不會作為master生效. server-id = 2 #[必須]伺服器唯一ID,預設是1 ##-------------------------------------------slave上的配置開始------------------------------------------------## # # # # replicate-do-db 需要做複製的資料庫,如果複製多個數據庫,重複設定這選項即可master上不需要此項,slave上需要 # replicate-do-db = test_db #複製名稱為test_db的資料庫 # # # replicate-ignore-db 不需要複製的資料庫,如果要忽略複製多個數據庫,重複設定這個選項即可 # #replicate-ignore-db = mysql #不需要(忽略)複製名稱為mysql的資料庫 # #replicate-ignore-db = information_schema #不需要(忽略)複製名稱為information_schema的資料庫 # # # # 如果你在使用鏈式從伺服器結構的複製模式 (A->B->C), # # # 你需要在伺服器B上開啟此項. # # # 此選項開啟在從執行緒上重做過的更新的日誌, # # # 並將其寫入從伺服器的二進位制日誌. # # # 預設值為OFF;設定log_slave_updates = 1即表示開啟 # #log_slave_updates = 1 # # # ##------------------------------------------slave上的配置結束-------------------------------------------------## skip-external-locking #MySQL選項以避免外部鎖定。該選項預設開啟 default-storage-engine = InnoDB #預設儲存引擎 lower_case_table_names = 1 #忽略表大小寫
連線配置:
登入主mysql檢視狀態:
show master status;
登入從mysql,
stop slave;
reset slave;
change master to
master_user='realfake',
master_password='123456',
master_host='118.25.178.145',
master_port=3306,
master_log_file='mysql-bin.000005',
master_log_pos=858;
內容分別為在主mysql上建立的角色、密碼、主伺服器ip,還有就是主mysql status的file和pos,更新後
start slave;
檢視連線結果:
登入從mysql,
mysql> show slave status\G
出現如下則連線成功:
測試主從複製
在主mysql中的test資料庫中新增表:
mysql> create table test_realfake(id int auto_increment primary key,name varchar(255));
Query OK, 0 rows affected (0.10 sec)
檢視從mysql的資料庫中是否有更新:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
| test_realfake |
| testtable |
+----------------+
3 rows in set (0.01 sec)
mysql> desc test_realfake;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
測試成功。
希望對大家有幫助。