1. 程式人生 > >mysql 主從複製 配置記錄

mysql 主從複製 配置記錄

兩臺伺服器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)

測試成功。

希望對大家有幫助。