實驗環境
主Mariadb:
centos 7
master:192.168.14.210
從Mariadb:
centos 7
slave:192.168.14.211
主從複製介紹:
第一步:master記錄二進制日誌。在每個事務更新數據完成之前,master在二日誌記錄這些改變。Mariadb將事務寫入二進制日誌,即使事務中的語句都是交叉執行的。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。
第二步:slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然後開始binlog dump process。Binlog dump process從master的二進制日誌中讀取事件,如果已經執行完master產生的所有文件,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。
第三步:SQL slave thread(SQL線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重新執行其中的事件而更新slave的數據,使其與master中的數據一致。
模式: C/S 模式
端口:3306
一、安裝mariadb(兩臺)
1、安裝
[root@master ~]# yum install -y mariadb-server mariadb
[root@slave ~]# yum install -y mariadb-server mariadb
2、防火牆允許訪問3306
[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@master ~]# firewall-cmd --reload
[root@slave ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@slave ~]# firewall-cmd --reload
二、主節點
1、修改配置文件
[root@master ~]# vi /etc/my.cnf
[mysqld]
server-id=1
log-bin
binlog-format=row
說明:
log-bin #啓用二進制日誌,默認存在/var/lib/mariadb 下面
server-id=1 #本機數據庫ID 唯一標示。
2、啓動mysql服務
[root@master ~]# systemctl start mariadb
[root@master ~]# mysql -e "SHOW MASTER LOGS;"
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
3、授權給從節點複製的賬號
[root@master ~]# mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.14.%' IDENTIFIED BY 'centos';"
三、從節點
1、修改配置文件
[root@slave ~]# vi /etc/my.cnf
[mysqld]
server-id=2
log-bin
binlog-format=row
read-only #使用ProxySQL讀寫分離的時候需要填寫
2、啓動數據庫服務
[root@slave ~]# systemctl start mariadb
3、寫入CHANGE MASTSER TO信息
[root@slave ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.14.210', MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mariadb-bin.000001',MASTER_LOG_POS=245;
4、啓動複製線程
MariaDB [(none)]> start slave;
停止:stop slave
重置:reset slave
5、查看狀態
MariaDB [(none)]> show slave status \G
四、測試主從複製
1、主節點創建數據庫並添加表
MariaDB [(none)]> create database my_db;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use my_db;
Database changed
MariaDB [my_db]> create table stu (age int,name char(40));
Query OK, 0 rows affected (0.03 sec)
MariaDB [my_db]> show tables;
+-----------------+
| Tables_in_my_db |
+-----------------+
| stu |
+-----------------+
1 row in set (0.00 sec)
MariaDB [my_db]> insert into stu values(210,'master');
Query OK, 1 row affected (0.03 sec)
MariaDB [my_db]> select * from stu;
+------+--------+
| age | name |
+------+--------+
| 210 | master |
+------+--------+
1 row in set (0.00 sec)
MariaDB [my_db]> flush privileges;
Query OK, 0 rows affected (0.01 sec)
查看主節點二進制日誌
2、從節點查看
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| my_db |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
MariaDB [(none)]> use my_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [my_db]> select * from stu;
+------+--------+
| age | name |
+------+--------+
| 210 | master |
+------+--------+
1 row in set (0.00 sec)
到此主從複製配置成功