1.找到配置檔案
找到配置檔案是主從複製的第一個難點。很多新手都容易找錯配置檔案,一般my.ini
配置檔案所在的位置都是隱藏
的。
一般人都以為配置檔案為
C:\Program Files\MySQL\MySQL Server 5.7中的my-default.ini檔案。
但是實際上配置檔案是
C:\ProgramData\MySQL\MySQL Server 5.7下my.ini檔案。
2.主庫與從庫的配置
找到主資料庫的配置檔案my.cnf
(或者my.ini
),
一般情況下在mysql的安裝目錄,在mysqld
部分插入如下兩行:
server_id = 1 #唯一 ,要與備機的不同
log-bin= mysql-bin #開啟二進位制日誌
找到備機資料庫的配置檔案my.cnf
(或者my.ini
),
一般情況下在mysql的安裝目錄,在mysqld
部分插入如下兩行:
server_id = 2 #唯一 ,要與備機的不同
log-bin= mysql-bin #開啟二進位制日誌
配置完後,重啟主機與備機的服務。
3.開啟mysql會話。
主庫(24)下的操作:
第一步[建立使用者]
:mysql> CREATE USER '使用名'@'備機IP地址' IDENTIFIED BY '密碼';
mysql>create user 'mysql1'@'172.16.8.25' identified by '123456';
第二步[分配許可權]
:mysql> GRANT REPLICATION SLAVE ON . TO '使用名'@'備機IP地址';
mysql>grant replication slave on *.* to 'mysql1'@'172.16.8.25';
第三步[重新整理許可權]
:
mysql>flush privileges;
第四步[檢視master狀態]
:
mysql >show master status;
輸出的結果為:
| File | Position |Binlog_Do_DB | Binlog_Ignore_DB|
| mysql-bin.000003 | 73 | test | manual,mysql |
File
的值為 mysql-bin.000003;Position
的值為73;Binlog_Do_DB
的值為test;Binlog_Ignore_DB
的值為manual,mysql ;記住
File
下的值和Position
的值。
從庫下(25)操作:
mysql> CHANGE MASTER TO
MASTER_HOST='172.16.8.24', #主機的IP
MASTER_USER='mysql1', #之前建立的那個使用名
MASTER_PASSWORD='123456', #密碼
MASTER_LOG_FILE='mysql-bin.000003', #這是主庫中show master status;File下的那個值
MASTER_LOG_POS=73; #這是主庫Position下的那個值
mysql>start slave;
mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.8.24
Master_User: mysql1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos:11662
Relay_Log_File:mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
... 當
Slave_IO_Running
和Slave_SQL_Running
都yes
時,主從複製建立成果。可以在主庫中建立一個表,這時從庫中也會出現建立的那個表。兩臺主機的主主配置相當於兩個主從配置。在上方例子的基礎上進行配置。
原主庫
配置檔案中加入:
replicate-do-db=test
auto-increment-offset=1
auto-increment-increment=2
原從庫
配置檔案中加入:
replicate-do-db=test
auto-increment-offset=2
auto-increment-increment=2
說明:
- log-bin :需要啟用二進位制日誌
- server-id : 用於標識不同的資料庫伺服器
- binlog-do-db : 需要記錄到二進位制日誌的資料庫
- binlog-ignore-db : 忽略記錄二進位制日誌的資料庫
- auto-increment-offset :該伺服器自增列的初始值。
1.auto-increment-increment :該伺服器自增列增量。- replicate-do-db :指定複製的資料庫
- replicate-ignore-db :不復制的資料庫
- relay_log :從庫的中繼日誌,主庫日誌寫到中繼日誌,中繼日誌再重做到從庫。
- log-slave-updates :該從庫是否寫入二進位制日誌,如果需要成為多主則可啟用。只讀可以不需要。 如果為多主的話注意設定 auto-increment-offset 和 auto-increment-increment如上面為雙主的設定:伺服器 152 自增列顯示為:1,3,5,7,……(offset=1,increment=2)伺服器 153 自增列顯示為:2,4,6,8,……(offset=2,increment=2)
2.mysql編寫
原從庫
中進行一下操作:
第一步[建立使用者]
:
mysql>create user 'mysql2'@'172.16.8.24' identified by '123456';
第二步[賦予許可權]
:
mysql> replication slave on *.* to 'mysql2'@'172.16.8.24';
第三步[重新整理許可權]
:
mysql>flush privileges;
第四步[檢視master狀態]
:
mysql >show master status;
輸出結果為:
| File | Position | Binlog_Do_DB| Binlog_Ignore_DB
| mysql-bin.000002 | 88
記住File
下的值和Position
的值。
原主庫中
進行一下操作:
mysql> CHANGE MASTER TO
MASTER_HOST='172.16.8.25',
MASTER_USER='mysql2',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=88;
mysql>start slave;
mysql>show slave status\G;’
輸出結果為:
——————————1. row———————————
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.8.24
Master_User: mysql2
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB:
. 當主庫和從庫中,進行
show slave status\G
後,Slave_IO_Running
和Slave_SQL_Running
都yes
時,主主複製建立成功