日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的

發布時間:2025/4/5 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是 MySQL 主從同步

當 master(主)庫的數據發生變化的時候,變化會實時的同步到slave(從)庫。

主從同步有什么好處

  • 水平擴展數據庫的負載能力

  • 容錯,高可用。Failover/High Availability

  • 數據備份

  • 主從同步的原理是什么

    首先我們來了解 master-slave 的體系結構。

    如下圖:

    不管是 delete、update、insert,還是創建函數、存儲過程,所有的操作都在 master 上。

    當 master 有操作的時候,slave 會快速的接收到這些操作,從而做同步。

    但是,這個機制是怎么實現的呢?

  • 在 master 機器上,主從同步事件會被寫到特殊的 log 文件中(binary-log);

  • 在 slave 機器上,slave 讀取主從同步事件,并根據讀取的事件變化,在 slave 庫上做相應的更改。

  • 如此,就實現了主從同步了!下面我們來詳細的了解。

    主從同步事件有哪些

    上面說到,在 master 機器上,主從同步事件會被寫到特殊的 log 文件中(binary-log);

    主從同步事件有3種形式:statement、row、mixed。

  • statement:會將對數據庫操作的 sql 語句寫入到 binlog 中。

  • row:會將每一條數據的變化寫入到 binlog 中。

  • mixed:statement 與 row 的混合。MySQL 決定什么時候寫 statement 格式的,什么時候寫 row 格式的 binlog。

  • 在 master 上的操作

    當 master 上的數據發生改變的時候,該事件(insert、update、delete)變化會按照順序寫入到binlog中。

    binlog dump線程

    當 slave 連接到 master 的時候,master機器會為slave開啟binlog dump線程。

    當 master 的 binlog 發生變化的時候,binlog dump線程會通知slave,并將相應的binlog內容發送給slave。

    在 slave 上的操作

    當主從同步開啟的時候,slave上會創建2個線程。I/O線程:該線程連接到 master 機器,master 機器上的 binlog dump 線程會將 binlog的內容發送給該 I/O 線程。該 I/O 線程接收到 binlog 內容后,再將內容寫入到本地的relay log。SQL線程:該線程讀取 I/O 線程寫入的 relay log。并且根據 relay log 的內容對 slave 數據庫做相應的操作。

    查看上述線程

    使用 SHOW PROCESSLIST 命令可以查看,如圖,在 master 機器上查看 binlog dump線程。

    如圖,在 slave 機器上查看I/O、SQL線程。

    一圖以蔽之

    講了這么多,一圖以蔽之

    下面的實戰演練,都是基于上面的環境。當然,其他環境也大同小異。

    os:ubuntu16.04mysql:5.7.17

    工具
    2臺機器:

    master IP:192.168.33.22slave IP:192.168.33.33

    master 機器上的操作

    1、更改配置文件

    我們找到文件

    /etc/mysql/mysql.conf.d/mysqld.cnf

    配置如下:

    #your master ipbind-address = 192.168.33.22#在master-slave架構中,每臺機器節點都需要有唯一的server-idserver-id = 1#開啟binlog log_bin = /var/log/mysql/mysql-bin.log

    2、重啟 MySQL,以使配置文件生效。

    sudo systemctl restart mysql

    3、創建主從同步的 MySQL?user

    $ mysql -u root -pPassword:##創建slave1用戶,并指定該用戶只能在主機192.168.33.33上登錄。mysql> CREATE USER 'slave1'@'192.168.33.33' IDENTIFIED BY 'slavepass';Query OK, 0 rows affected (0.00 sec)##為slave1賦予REPLICATION SLAVE權限。mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.33.33';Query OK, 0 rows affected (0.00 sec)

    4、為 MySQL 加讀鎖

    為了主庫與從庫的數據保持一致,我們先為 MySQL 加入讀鎖,使其變為只讀。

    mysql> FLUSH TABLES WITH READ LOCK;Query OK, 0 rows affected (0.00 sec)

    5、記錄下來?MASTER?REPLICATION?LOG?的位置

    mysql> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 613 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

    6、將 master DB 中現有的數據信息導出

    $ mysqldump -u root -p --all-databases --master-data > dbdump.sql

    7、解除 master DB 的讀鎖

    mysql> UNLOCK TABLES;

    8、將步驟 6 中的 dbdump.sql 文件 copy 到 slave

    scp dbdump.sql ubuntu@192.168.33.33:/home/ubuntu

    slave 機器上的操作

    1、更改配置文件

    我們找到文件

    /etc/mysql/mysql.conf.d/mysqld.cnf

    更改配置如下:

    #your slave ipbind-address = 192.168.33.33#master-slave結構中,唯一的server-idserver-id = 2 #開啟binloglog_bin = /var/log/mysql/mysql-bin.log

    2、重啟 MySQL,以使配置文件生效

    sudo systemctl restart mysql

    3、導入從 master DB。導出的 dbdump.sql 文件,以使 master-slave 數據一致

    $ mysql -u root -p < /home/ubuntu/dbdump.sql

    4、使 slave 與 master 建立連接,從而同步

    $ mysql -u root -pPassword:mysql> STOP SLAVE;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.33.22', -> MASTER_USER='slave1', -> MASTER_PASSWORD='slavepass', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=613;Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> START SLAVE;Query OK, 0 rows affected (0.00 sec)

    經過如此設置之后,就可以進行 master-slave 同步了~

    來源:公眾號聊聊代碼。

    9月25日-26日,2020 GOPS 全球運維大會相聚深圳,17 個專場,近 80 位技術大咖。2020年首站 GOPS,精彩不重樣~工行、中行、農行、平安、騰訊、阿里、京東多個國內頂尖企業 DevOps 運維體系首度揭秘,機會難得~

    專場一覽???近期好文:

    Nginx 在運維領域中的應用,看這一篇就夠了

    Docker 容器監控方案怎么選?看看這套開源方案

    神州泰岳專家團全面解讀“大IT”浪潮下的智慧運營 | 精彩大片

    “高效運維”公眾號誠邀廣大技術人員投稿,

    投稿郵箱:jiachen@greatops.net,或添加聯系人微信:greatops1118.

    點個“在看”,一年不宕機

    總結

    以上是生活随笔為你收集整理的mysql 主从同步不一致_涨知识!MySQL 主从同步原理原来是这样的的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。