中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳細介紹MySQL如何開啟主從復制實現數據同步

發布時間:2020-08-30 19:00:48 來源:網絡 閱讀:18182 作者:Darius_D 欄目:MySQL數據庫

主從復制原理

詳細介紹MySQL如何開啟主從復制實現數據同步

主從復制線程

主節點

?? dump Thread:為每個Slave的I/O Thread啟動一個dump線程,用于向其發送binary log events

從節點

?? I/O Thread:向Master請求二進制日志事件,并保存于中繼日志中
?? SQL Thread:從中繼日志中讀取日志事件,在本地完成重放

跟復制功能相關的文件

?? master.info:用于保存slave連接至master時的相關信息,例如賬號、密碼、服務器地址等

?? relay-log.info:保存在當前slave節點上已經復制的當前二進制日志和本地replay log日志的對應關系

主從復制特點

?? 異步復制
?? 主從數據不一致比較常見

復制架構

?? Master/Slave,Master/Master,環狀復制
?? 一主多從
?? 從服務器還可以再有從服務器
?? 一從多主:適用于多個不同數據庫

復制需要考慮二進制日志時間記錄格式

?? STATEMENT(5.0之前)
?? ROW(5.1之后,推薦)
?? MIXED

搭建環境準備

主機 IP地址 類型
CentOS7.6 192.168.36.101 Master
CentOS7.6 192.168.36.103 Slave
CentOS7.6 192.168.36.104 Slave
搭建之前請先確保MySQL軟件包已經安裝

一主一從

Master節點修改數據庫配置文件

[root@Master ~]#cat /etc/my.cnf
[mysqld]
server_id=1     # 為Master節點設置一個全局唯一的ID號
binlog_format=row       # 基于行復制的數據庫語句
log-bin=/data/bin/mysql-bin     # 啟用二進制日志

重新啟動數據庫服務

[root@Master ~]#service mysqld restart
Restarting mysqld (via systemctl):                         [  OK  ]

Master節點上創建帶有復制權限的用戶賬號

MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.36.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

查看Master的日志位置信息

MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |    912372 |
+------------------+-----------+
1 row in set (0.00 sec)

Slave節點修改配置文件

[root@Slave-1 ~]#cat /etc/my.cnf
[mysqld]
server_id=2         # Slave節點設置全局唯一的ID號
read_only           # 只讀

重新啟動數據庫服務

[root@Slave-1 ~]#systemctl restart mariadb

使用Master創建的復制權限的用戶賬號進行同步

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWORD='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.01 sec)

啟動Slave線程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

查看線程是否啟動

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.36.101
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 7389
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 7673
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes      # 從節點的IO線程
            Slave_SQL_Running: Yes      # 從節點的SQL線程
....
        Seconds_Behind_Master: 0        # Master與SLave服務器差別延遲
.....
             Master_Server_Id: 1
1 row in set (0.00 sec)

檢查數據同步情況

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

主節點中查看數據庫的線程

MariaDB [hellodb]> show processlist;
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
| Id | User     | Host                 | db      | Command     | Time | State
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
|  3 | root     | localhost            | hellodb | Query       |    0 | NULL
|  6 | repluser | 192.168.36.103:51516 | NULL    | Binlog Dump |  115 | Master has sent all binlog to slave; waiting for binlog to be upd
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
2 rows in set (0.00 sec)

從節點中查看數據庫的線程

MariaDB [(none)]> show processlist;
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
| Id | User        | Host      | db   | Command | Time  | State                                                                       | I
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
|  4 | root        | localhost | NULL | Query   |     0 | NULL                                                                        | s
|  5 | system user |           | NULL | Connect |   159 | Waiting for master to send event                                            | N
|  6 | system user |           | NULL | Connect | 29259 | Slave has read all relay log; waiting for the slave I/O thread to update it | N
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
3 rows in set (0.00 sec)

一主多從:新添加一個從節點

Slave-2 節點安裝數據庫服務

[root@Slave-2 ~]#yum install -y mariadb-server

修改 Slave-2 節點配置文件

[root@Slave-2 ~]#cat /etc/my.cnf
[mysqld]
server_id=3
read_only
....

重新啟動 Slave-2 節點數據庫服務

[root@Slave-2 ~]#systemctl restart mariadb

Slave-2 節點配置同步信息

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWORD='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)

啟用線程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

檢查同步情況

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

主主復制:兩臺服務器互為主從

主機 IP地址 類型
CentOS7.6 192.168.36.101 Master-1
CentOS7.6 192.168.36.103 Master-2

Master-1 修改配置文件

[root@Master-1 data]#cat /etc/my.cnf
[mysqld]
server_id=1
log_bin     # 啟用日志

# 為避免ID沖突問題,需要添加下面兩行配置:Master-1 為奇數增長,Master-2 為偶數增長
auto_increment_offset=1     # 開始點
auto_increment_increment=2  # 增長幅度
....

Master-2 修改配置文件

[root@Master-2 data]#cat /etc/my.cnf
[mysqld]
server_id=2
log_bin
auto_increment_offset=2
auto_increment_increment=2

重新啟動服務

[root@Master-1 ~]#systemctl restart mariadb
[root@Master-2 ~]#systemctl restart mariadb

Master-1 創建權限用戶,Master-2 先設置為從服務器進行同步 Master-1 的數據庫

MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.36.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

Master-2 同步Master-1

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWORD='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)

啟用線程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

檢查同步情況

MariaDB [(none)]> use mysql;
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 [mysql]> select user,password,host from user;
+----------+-------------------------------------------+--------------+
| user     | password                                  | host         |
+----------+-------------------------------------------+--------------+
| root     |                                           | localhost    |
| root     |                                           | 127.0.0.1    |
| root     |                                           | ::1          |
| repluser | *128977E278358FF80A246B5046F51043A2B1FCED | 192.168.36.% |
+----------+-------------------------------------------+--------------+
7 rows in set (0.00 sec)

Master-1 向 Master-2 進行同步

MariaDB [mysql]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.103',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='centos',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.05 sec)

Master-1 同步狀態

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.36.103
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 245
               Relay_Log_File: mariadb-relay-bin.000003
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
....
           Master_SSL_Allowed: No
....
             Master_Server_Id: 2
1 row in set (0.01 sec)
此時Master-1、Master-2 實現主主復制功能

半同步復制

?? 半同步復制的作用是:主服務器宕機后,所有備份服務器主動向同步數據最多的服務器進行數據的同步,以確保數據損失降到最低。

半同步是通過插件功能達成的

Master節點安裝semisync_master.so插件
MariaDB [db1]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.07 sec)
啟用插件功能
MariaDB [db1]> SET GLOBAL rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
設置超時時長
MariaDB [db1]> SET GLOBAL rpl_semi_sync_master_timeout=6000;
Query OK, 0 rows affected (0.00 sec)
查看Master插件狀態
MariaDB [db1]> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 6000  |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)
Master修改配置文件并重啟數據庫服務
[root@Master data]#cat /etc/my.cnf
[mysqld]
...
rpl_semi_sync_master_enabled        # 啟用插件功能
...

[root@Master data]#systemctl restart mariadb
Slave節點安裝semisync_slave.so插件
MariaDB [db1]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)
啟用slave插件功能
MariaDB [db1]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
Slave修改配置文件并重啟數據庫服務
[root@Slave data]#cat /etc/my.cnf
[mysqld]
...
rpl_semi_sync_slave_enabled        # 啟用插件功能
...

[root@Slave data]#systemctl restart mariadb
停止Slave 數據庫服務進行測試
MariaDB [(none)]> create database db3;
Query OK, 1 row affected (6.00 sec)     # 由等待時長可以看出,半同步插件已經起到效果
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

老河口市| 莒南县| 噶尔县| 修武县| 垫江县| 宁陕县| 富蕴县| 甘德县| 喜德县| 景德镇市| 曲沃县| 精河县| 永城市| 冀州市| 纳雍县| 屯留县| 乐安县| 揭东县| 贞丰县| 板桥市| 兴和县| 岳西县| 象州县| 德令哈市| 买车| 宣化县| 任丘市| 青海省| 古交市| 萨嘎县| 潢川县| 兰溪市| 靖远县| 巴里| 互助| 广东省| 白山市| 秦安县| 乳山市| 青河县| 芜湖市|