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

溫馨提示×

溫馨提示×

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

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

MySQL的復制原理詳解以及基礎配置

發布時間:2020-06-27 19:47:09 來源:網絡 閱讀:548 作者:蘋果與牛頓 欄目:建站服務器

MySQL 的日志類型

二進制日志,事務日志,錯誤日志,一般查詢日志,中繼日志,慢查詢日志


二進制日志有以下內容

    數據目錄,一般放置在mysql-bin.XXXXX編號)

    滾動:達到一個最大上限,flush logs,服務器重啟

    格式:statement

              row

              mixed

    mysql-bin.index:二進制日志文件索引文件

    mysql > SHOW MASTER STATUS查看主服務器的狀態

    mysql > SHOW BINARY LOGS 查看二進制日志

    mysql > SHOW BINLOG  EVENTS IN 'file'查看二進制日志中的事件


    event中比較重要的選項:

          timestamp時間戳

          position,offset,operation,server-id


MySQL的隔離級別:

    READ-UNCOMMITED

    READ-COMMITED

            如果使用mixed可能會發生數據不一致的情況

            官方推薦使用row 的方法

    REPEATABLE-READ

    SERIALIZABLE



復制實現的功能

  1. 實現數據備份

  2. 如果有從服務器,主服務器發生故障之后,開通從服務器的寫入功能,從而提供高可用的使用功能

  3. 異地容災

  4. 分攤負載(scale out )主服務器:寫      從服務器:讀


復制方法有三種,分別是主從復制,半同步復制以及主主復制


首先介紹主從復制(使用較頻繁)


在主服務器上,前端用戶每次執行一次數據庫發生修改或者引起修改的指令,都會在二進制日志中保存為一個事件,每保存一個事件,都會通過MySQL的3306端口發送給另外一個服務器,另外一臺服務器將這個日志接收下來,然后先保存在本地的日志文件中,然后每次讀取一個操作,然后將每一次修改執行到自己服務器上,這個過程叫做MySQL 的復制


master上存在一個二進制文件Binary log

slave 從主服務器上二進制文件復制而成的文件,叫做中繼日志(relay log)

在主服務器上當有多個事務并發執行的時候,但是在寫入二進制文件中的時候只能一條一條寫,因此就需要一個暫時緩存的日志文件進行緩存,接著再向二進制文件中寫入


其中在復制方法上同時又有同步復制以及異步復制的區分:


同步復制

從服務器不能比主服務器慢,前端發生的修改不能及時的得到slave 的響應

因此基本上是使用半同步復制的方法

半同步復制只是將數據同步發送給另一個節點,只能保證近的節點能夠及時的響應


異步復制:一主多從,等待每一個服務器都同步完成的時候,


在多臺從服務器進行復制的時候,可能會因為請求過多,主服務器難以有效的處理,因此就需要一個前端代理。

讀寫分離(rw-splitting):找一個MySQL的前端代理,工作在應用層,能夠理解MySQL的語句,能夠完成將不同的操作(讀 寫)定向到不同的服務器,分別分發給主服務器和從服務器,從而完成讀寫分離


多級復制:一個從服務器可能是一個主服務器的從服務器,也可能是另一個從服務器的從服務器

如果一個從服務器不記錄中繼日志,則不能將內容發送給下一級服務器,從服務器上不能進行寫操作


接下來介紹雙主模型


雙主模型的時候,配置幾乎一樣,但是要很注意server-id的重要性,防止出現復制環路的產生

無法實現減輕寫操作,很容易出問題


例如

tutors:name,age,gender,tid

tom 10

jerry 30

A主機:UPDATE tutords SET  name=jerry

B主機:UPDATE tutors SET age=30 WHERE name=tom

在最終的完成同步的時候,查詢出來的結果并不認能夠合并,會產生沖突


所以在生產環境中,一般不建議使用雙主模型



讀寫分離可以由下面的組件實現:

mysql-proxy

amoeba


數據拆分之后實現路由:

cobar


補充:

master :slave 

    1-->N

slave :master

    1-->N X 

一個從服務器只能屬于一個主服務器


MySQL 5.5之前的復制實現非常簡單,

MySQL 5.6之后引用了 gtid,multi-thread replication(多線程復制)


配置MySQL復制基本步驟


主從復制

 一.master

             啟用二進制日志

             log-bin=master-bin

             log-bi-index =master-bin.index

    1.  選擇一個唯一的server-id

      server-id ={0-2^32}

    2. 創建具有復制權限的用戶

            REPLICATION SLAVE

            REPLICATION CLIENT


二.slave

1.啟用中繼日志

relay-log =relay-log     

log-bin-index=

2.選擇一個唯一的server-id 

            server-id ={0-2^32}

3.連接至主服務器,并開始復制數據

   mysql > CHANGER MASTER TO MASTER_HOST= ' ',MASTER_PORT= ' ',MASTER_LOG_FILE=' ',MASTER_LOG_FILE_POS=' ',MASTER_USER=' ' ,MASTER_PASSWORD=' ';

mysql >START SLAVE

mysql>START SLAVE SQL_Thread  開啟SQL線程

mysql>START SLAVE IO_Thread開啟IO線程


復制線程:

master:dump

slave :IO_Thread,SQL_Thread


read_only=YES

在從服務器上設定,對具有SUPER權限的用戶不生效


sync-binlog = ON 

在主服務器上設定,用于事務安全


半同步復制

在master 和slave 上各自安裝一個google提供的插件

主服務器上


mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;

mysql>SET GLOBAL rpl_semi_syc_master_timeout=1000;


從服務器上

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql>SET GLOBAL rpl_semi_sync_slave_enables =1;

mysql_STOP SLAVE IO_Thread;START SLAVE IO_Thread;


雙主復制

  1. 在兩臺服務器上各自建立一個具有復制權限的用戶

  2. 修改配置文件

主服務器上

server-id =10

log-bin =mysql-bin

relay -log=relay -mysql

relay-log -index =relay -mysql.index

auto-increment-incremeng =2

auto-increment-offset =1


從服務器上

server-id=20

log-bin=mysql=bin

relay-log=relay-mysql

relay-log-index=relay-mysql.index

auto-increment-increment=2

auto-increment-offset =2


3.如果此時兩臺服務器均為新建立,且無其他寫入操作,各服務器之需記錄當前自己的二進制文件以及事件位置,以之作為另一臺服務器復制起始位置即可


4.各服務器接下來指定對另一臺服務器為自己的主服務器即可


A主機必須查看B的二進制文件及位置,并以之作為自己的復制起點

B主機必須查看A的二進制文件及位置,并以之作為自己的復制起點

兩個服務器都能進行讀寫,即為雙主模型









向AI問一下細節

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

AI

清涧县| 安仁县| 潜山县| 林口县| 松阳县| 黄浦区| 张北县| 墨脱县| 柳州市| 凌源市| 麻阳| 邓州市| 调兵山市| 城口县| 玛纳斯县| 罗田县| 塔城市| 平湖市| 伽师县| 赤壁市| 铅山县| 汨罗市| 东山县| 苍梧县| 桐城市| 昔阳县| 怀仁县| 桂东县| 安仁县| 舒兰市| 微博| 临江市| 丁青县| 琼海市| 饶阳县| 斗六市| 洛扎县| 如东县| 神木县| 缙云县| 玉门市|