主從複製、添加從服務器、級聯複製
三臺mysql服務器。一臺爲主,一臺爲從,實現自動備份。再添加一臺新的從服務器
系統:centos7.6
mariadb:5.5.60
主服務器:
[root@Centos7 ~]#vim /etc/my.cnf
[mysqld]
server_id=7 #設置服務器ID
log_bin #開啓二進制日誌
啓動mysql,查看二進制位置信息,創建slave服務器可以使用的的用戶
[root@Centos7 ~]#systemctl start mariadb
[root@Centos7 ~]#mysql
MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
1 row in set (0.00 sec)
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.37.%' identified by 'centos';
Query OK, 0 rows affected (0.01 sec)
主服務器設置完成
從服務器
[root@Centos7 ~]#vim /etc/my.cnf
[mysqld]
server_id=17 #設置服務器ID
read_only #從服務器建議加上,只讀
配置同步信息:用主服務給的用戶實現複製主服務器的數據到本機
[root@Centos7 ~]#mysql
.
.
.
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST='192.168.37.7', #主服務器IP
-> MASTER_USER='repluser', #用戶
-> MASTER_PASSWORD='centos', #密碼
-> MASTER_PORT=3306, #端口
-> MASTER_LOG_FILE='mariadb-bin.000001', #二進制文件
-> MASTER_LOG_POS=245; #開始複製的位置
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> start slave; #開啓從服務器線程
MariaDB [(none)]> show slave status\G #查看狀態
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.37.7 #主服務器IP
Master_User: repluser #使用的用戶
Master_Port: 3306 #使用端口
Connect_Retry: 60
Master_Log_File: mariadb-bin.000001
Read_Master_Log_Pos: 400
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 686
Relay_Master_Log_File: mariadb-bin.000001
Slave_IO_Running: Yes #同步成功
Slave_SQL_Running: Yes #同步成功
.
.
.
Replicate_Ignore_Server_Ids:
Master_Server_Id: 7 #主服務器ID
1 row in set (0.00 sec)
.
.
.
測試:在主服務器上增刪改數據,在從服務器上自動同步
給已有數據的主服務器,添加一臺從服務器
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| mysql |
| performance_schema |
| testdb1 |
| testdb2 |
| testdb3 |
+--------------------+
7 rows in set (0.00 sec)
完全備份主服務器的數據,查看主服務器日誌記錄位置,並傳送給新的從服務器
[root@Centos7 ~]#mysqldump -A --single-transaction -F --master-data=1 > /data/backup/all.sql
[root@Centos7 ~]#scp -r /data/backup/* 192.168.37.27:/data/
[root@Centos7 ~]#mysql
.
.
.
MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 8436 |
| mariadb-bin.000002 | 245 | #從最新的位置開始同步,
+--------------------+-----------+
新的從服務器設置
[root@Centos7 ~]#vim /etc/my.cnf
[mysqld]
server_id=37
read_only
.
.
.
設置主服務器傳送的備份文件,加上主服務的的同步信息
[root@Centos7 ~]#vim /data/all.sql
.
.
.
CHANGE MASTER TO
MASTER_HOST='192.168.36.7',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=245;
.
.
.
啓動mysql服務,導入備份的數據,進入mysql,開啓slave線程
[root@Centos7 ~]#systemctl start mariadb
[root@Centos7 ~]#mysql < /data/all.sql
[root@Centos7 ~]#mysql
MariaDB [(none)]> start slave; #開啓線程
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.37.7
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 245
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 531
Relay_Master_Log_File: mariadb-bin.000002
Slave_IO_Running: Yes #成功
Slave_SQL_Running: Yes #成功
.
.
.
Master_Server_Id: 7
1 row in set (0.00 sec)
測試,在主服務器上增刪修改數據,查看是否可以自動同步
級聯複製
級聯複製要求中間節點服務器配置文件加上log_slave_updates,並且開啓二進制日誌
中間節點設置
[root@Centos7 ~]#vim /etc/my.cnf
[mysqld]
log_bin
log_slave_updates
server_id=17
.
.
.
因爲中間節點數據與主服務器數據是一樣的,所以可以備份中間節點的數據到從服務器,用以與主服務器同步
[root@Centos7 ~]#mysqldump -A --single-transaction -F --master-data=1 > /data/backup/all.sql
[root@Centos7 ~]#scp -r /data/backup/* 192.168.37.27:/data/
從服務器設置
[root@Centos7~]#vim /etc/my.cnf
[mysqld]
server_id=27
.
.
.
[root@Centos7 ~]#vim /data/all.sql
.
.
.
CHANGE MASTER TO
MASTER_HOST='192.168.37.17', #中間節點
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=7583;
.
.
.
[root@Centos7 ~]#mysql < /data/all.sql #導入數據
[root@Centos7 ~]#mysql
.
.
.
MariaDB [(none)]> start slave; #開啓線程
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.37.17 #主服務器爲中間節點
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 15250
Relay_Log_File: mariadb-relay-bin.000004
Relay_Log_Pos: 15536
Relay_Master_Log_File: mariadb-bin.000002
Slave_IO_Running: Yes #成功
Slave_SQL_Running: Yes #成功
.
.
.
Replicate_Ignore_Server_Ids:
Master_Server_Id: 17
1 row in set (0.00 sec)
MariaDB [(none)]>
測試,在主服務器做數據增刪改,從服務器可以通過中間節點複製數據