日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

什么是 MySQL 主從同步

當(dāng) master(主)庫的數(shù)據(jù)發(fā)生變化的時候,變化會實(shí)時的同步到slave(從)庫。

主從同步有什么好處

  • 水平擴(kuò)展數(shù)據(jù)庫的負(fù)載能力

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

  • 數(shù)據(jù)備份

  • 主從同步的原理是什么

    首先我們來了解 master-slave 的體系結(jié)構(gòu)。

    如下圖:

    不管是 delete、update、insert,還是創(chuàng)建函數(shù)、存儲過程,所有的操作都在 master 上。

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

    但是,這個機(jī)制是怎么實(shí)現(xiàn)的呢?

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

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

  • 如此,就實(shí)現(xiàn)了主從同步了!下面我們來詳細(xì)的了解。

    主從同步事件有哪些

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

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

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

  • row:會將每一條數(shù)據(jù)的變化寫入到 binlog 中。

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

  • 在 master 上的操作

    當(dāng) master 上的數(shù)據(jù)發(fā)生改變的時候,該事件(insert、update、delete)變化會按照順序?qū)懭氲絙inlog中。

    binlog dump線程

    當(dāng) slave 連接到 master 的時候,master機(jī)器會為slave開啟binlog dump線程。

    當(dāng) master 的 binlog 發(fā)生變化的時候,binlog dump線程會通知slave,并將相應(yīng)的binlog內(nèi)容發(fā)送給slave。

    在 slave 上的操作

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

    查看上述線程

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

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

    一圖以蔽之

    講了這么多,一圖以蔽之

    下面的實(shí)戰(zhàn)演練,都是基于上面的環(huán)境。當(dāng)然,其他環(huán)境也大同小異。

    os:ubuntu16.04mysql:5.7.17

    工具
    2臺機(jī)器:

    master IP:192.168.33.22slave IP:192.168.33.33

    master 機(jī)器上的操作

    1、更改配置文件

    我們找到文件

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

    配置如下:

    #your master ipbind-address = 192.168.33.22#在master-slave架構(gòu)中,每臺機(jī)器節(jié)點(diǎn)都需要有唯一的server-idserver-id = 1#開啟binlog log_bin = /var/log/mysql/mysql-bin.log

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

    sudo systemctl restart mysql

    3、創(chuàng)建主從同步的 MySQL?user

    $ mysql -u root -pPassword:##創(chuàng)建slave1用戶,并指定該用戶只能在主機(jī)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權(quán)限。mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.33.33';Query OK, 0 rows affected (0.00 sec)

    4、為 MySQL 加讀鎖

    為了主庫與從庫的數(shù)據(jù)保持一致,我們先為 MySQL 加入讀鎖,使其變?yōu)橹蛔x。

    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 中現(xiàn)有的數(shù)據(jù)信息導(dǎo)出

    $ 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 機(jī)器上的操作

    1、更改配置文件

    我們找到文件

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

    更改配置如下:

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

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

    sudo systemctl restart mysql

    3、導(dǎo)入從 master DB。導(dǎo)出的 dbdump.sql 文件,以使 master-slave 數(shù)據(jù)一致

    $ 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)

    經(jīng)過如此設(shè)置之后,就可以進(jìn)行 master-slave 同步了~

    來源:公眾號聊聊代碼。

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

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

    Nginx 在運(yùn)維領(lǐng)域中的應(yīng)用,看這一篇就夠了

    Docker 容器監(jiān)控方案怎么選?看看這套開源方案

    神州泰岳專家團(tuán)全面解讀“大IT”浪潮下的智慧運(yùn)營 | 精彩大片

    “高效運(yùn)維”公眾號誠邀廣大技術(shù)人員投稿,

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

    點(diǎn)個“在看”,一年不宕機(jī)

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。