環境:
192.168.205.17: as master server
192.168.205.27: as slave server
版本:
OS: centos 7 1810 with mini install
mariadb-5.5.60
目地:
當數據庫運行了一段時間後,如何再做主從複製。
步驟:
1. 配置主服務器
2. 備份主服務器
3. 配置主恢復從服務器
4. 測試
主服務器192.168.205.17
- 首先安裝MariaDB
[root@Master ~]#yum install mariadb-server
- 分創建數據目錄和logs目錄
[root@Master ~]#mkdir /data/{mysql,logs} [root@Master ~]#chown -R mysql:mysql /data/{mysql,logs}
- 修改配置文件
[root@Master ~]#vi /etc/my.cnf [mysqld] server_id=17 #服務器ID必須唯一 datadir=/data/mysql #數據文件路徑 log_bin=/data/logs/bin #日誌文件路徑 [root@Master ~]#systemctl restart mariadb
- 建立複製帳號,此帳號是從服務器與主服務器同步時連接用的帳號,因爲對所有數據庫同步,所以是.
MariaDB [(none)]> GRANT replication slave on *.* to repluser@'192.168.205.%' identified by 'centos';
- 備份數據庫,因爲你的數據庫運行了一段時間,爲了把以前的數據也要同步過去,所以先備份主的服務器數據,再恢復到從的節點上,其中--master-data=1表示是從從節點上恢復數據,在備份的sql中會啓用change master to語句
[root@Master ~]#mysqldump -A --single-transaction --master-data=1 -F >/data/all.mysql
- 將備份的文件複製到slave服務器上
[root@Master ~]#scp /data/all.mysql 192.168.205.27:/data/
從服務器192.168.205.27
- 安裝MariaDB在slave服務器上
[root@slave ~]#yum install mariadb-server
- 修改配置文件
[root@slave ~]#vi /etc/my.cnf [mysqld] datadir=/data/mysql read-only #只給slave數據只讀權限,當然只能限制普通帳號 log-bin=/data/logs/bin server-id=27 #修改server-id一樣和主不一樣才行
- 創建數據和日誌文件夾並更改所有者和所有組爲mysql
[root@slave ~]#mkdir /data/{mysql,logs} [root@slave ~]#chown mysql:mysql /data/{mysql,logs}
- 在slave服務器中打開備份的文件,添加如下的內容
[root@salve data]#vi all.mysql CHANGE MASTER TO MASTER_HOST='192.168.205.17', MASTER_USER='repluser', MASTER_PASSWORD='centos', MASTER_LOG_FILE='bin.000005', MASTER_LOG_POS=245;
- 啓動服務
[root@slave ~]#systemctl restart mariadb
- 直接恢恢復數據庫
[root@slave ~]#mysql < /data/all.mysql - 連接mariaDB並查看狀態
[root@slave ~]#mysql MariaDB [(none)]> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 27 | +---------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> show variables like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> show slave status\G ... Slave_IO_Running: No Slave_SQL_Running: No ...
- 起動slave I/O thread 和slave SQL thread線程, 並查看狀態
MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show slave status\G Slave_IO_State: Waiting for master to send event Master_Host: 192.168.205.17 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: bin.000005 Read_Master_Log_Pos: 402 Relay_Log_File: mariadb-relay-bin.000003 Relay_Log_Pos: 523 Relay_Master_Log_File: bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes
- 查看數據庫是否同步過來
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hellodb | | mysql | | performance_schema | | test | | zhaoli | +--------------------+ 6 rows in set (0.00 sec)
- 查看網絡連接,已經連接到主服務器的3306
[root@slave data]#ss -nt State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 96 192.168.205.27:22 192.168.205.1:17526 ESTAB 0 0 192.168.205.27:56360 192.168.205.17:3306
測試
- 在主的服務器上,建立一個數據庫,並測試數據庫同步
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.00 sec) - 在從服務器上看有沒有數據庫db1
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | hellodb | | mysql | | performance_schema | | test | | zhaoli | +--------------------+ 7 rows in set (0.00 sec)