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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主从库配置方法

發布時間:2025/5/22 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主从库配置方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

一.mysql主從備份(復制)的基本原理
mysql支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。mysql復制基于主服務器在二進制日志中跟蹤所有對數據庫的更改(更新、刪除等等)。因此,要進行復制,必須在主服務器上啟用二進制日志。每個從服務器從主服務器接收主服務器已經記錄到其二進制日志的保存的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日志中讀取的最后一次成功更新的位置。從服務器接收從那時起發生的任何更新,并在本機上執行相同的更新。然后封鎖并等待主服務器通知新的更新。從服務器執行備份不會干擾主服務器,在備份過程中主服務器可以繼續處理更新。
  
二.mysql主從備份配置方法
在進行mysql主從備份時,最好確保主從服務器的版本兼容。從服務器至少與主服務器版本相同或更高。
  
主機(master)配置:
1.修改mysql配置文件my.cnf
在[mysqld]標簽下添加以下幾行

[plain]?view plaincopy

  • log-bin?#開啟二進制日志??

  • server-id=id?#主服務器id號??

  • binlog-do-db=db_nameA?#指定對db_nameA記錄二進制日志??

  • binlog-ignore-db=db_namB?#指定不對db_namB記錄二進制日志??

  • 注意:
    log-bin,server-id是配置文件中必須添加的內容。此時主服務器默認對所有數據庫進行備份。如果需要特殊指明只對某個數據庫進行備份或不備份,則可以加入binlog-do-db和binlog-ignore-db選項。有關(log-bin的詳細說明見附錄1)

    在測試主機上,我們實際添加入如下內容:

    [plain]?view plaincopy

  • log-bin??

  • server-id=1??

  • binlog-do-db=test??


  • 2.為從服務器添加mysql賬戶并配置權限
    在主服務器上,必須為從服務器創建一個用來連接主服務器的用戶,并設置replication slave權限。所用具體命令如下:

    [sql]?view plaincopy

  • grant?replication?slave??

  • on?*.*??

  • to?'帳號'?@?'從服務器IP'?identified?by?'密碼';??

  • 在測試機上,我們實際執行:

    [sql]?view plaincopy

  • grant?replication?slave??

  • on?*.*??

  • to?'replication'@'%'?identified?by?'sosotest';??

  • 這時在mysql庫的user表中使用

    [sql]?view plaincopy

  • select?*?from?user?where?user?=?'replication'?\G;??

  • 可以看到Repl_slave_priv項對就的值為Y。
    3.導出主服務器數據
    導出主服務器數據,以備之后將其導入從服務器,使主從服務器的初始狀態保持一致。

    在測試機上,我們實際執行:

    [sql]?view plaincopy

  • mysqldump?test?>?test.bak??


  • 4.記錄File 及Position 項的值
      重啟mysql,使用show master status\G;查看主服務器狀態,記錄File 及Position 項的值,以便之后對從服務器進行配置。
      
    在測試機上,我們實際執行時看到的結果如下:
    *************************** 1. row ***************************
    File: simba-bin.000008
    Position: 79
    Binlog_Do_DB: test
    Binlog_Ignore_DB:?
    1 row in set (0.00 sec)

    其中File為imba-bin.000008;Position為79。

    至此主服務器配置完畢

    從機(slave)配置:
    1.修改mysql配置文件my.cnf
    在[mysqld]標簽下添加以下面一行:

    [plain]?view plaincopy

  • server-id=id?#從機id??

  • 實際中,我們添加:

    [plain]?view plaincopy

  • server-id=2??


  • 2.導入主機數據庫
    在測試機上,我們實際執行:
    mysql test < test.bak

    3.重啟mysql數據庫并設置相關參數

    [sql]?view plaincopy

  • change?master?to??

  • master_host?=?'10.1.146.133',??

  • master_user?=?'replication',??

  • master_password?=?'sosotest',??

  • master_log_file?=?'darkstar-bin.000008',??

  • master_log_pos?=?79;??

  • slave?start;??

  • 4.檢查數據庫查看相關參數
      使用show slave status \G;查看相關參數是否正確。
      在實際執行時,我們在從機上看到的結果如下(只摘取了部分輸出):
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 10.1.146.133
    Master_User: replication
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: darkstar-bin.000006
    Read_Master_Log_Pos: 79
    Relay_Log_File: simba-relay-bin.000003
    Relay_Log_Pos: 171
    Relay_Master_Log_File: darkstar-bin.000006
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ……

    對部分參數的解釋:
    Slave_IO_State: Waiting for master to send event?
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    以上參數說聽slave正常運行,正等待主服務器發來的消息。此時若用netstate命令可以看到從機與主機間已經建立了一條邊接。

    特別需要注意的兩個參數是:
    Master_Log_File和Read_Master_Log_Pos。Master_Log_File代表主機上用于主備同步的日志文件名,Read_Master_Log_Pos代表上一次成功同步到的日志文件中的位置。
    如果這兩項與先前在主服務器上看到的File及Position的值不相符,則無法正確進行同步。


    三.主從備份的實現細節
    mysql使用3個線程來執行復制功能(其中1個在主服務器上,另兩個在從服務器上)。當發出start slave時,從服務器創建一個I/O線程,以連接主服務器并讓它發送記錄在其二進制日志中的語句。主服務器創建一個線程將二進制日志中的內容發送到從服務器。該線程可以即為主服務器上show processlist輸出中的Binlog Dump線程。從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容并將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日志。第3個線程是sql線程,由從服務器創建,用于讀取中繼日志并執行日志中包含的更新。在從服務器上,讀取和執行更新語句被分成兩個獨立的任務。當從服務器啟動時,其I/O線程可以很快地從主服務器索取所有二進制日志內容。


    1.復制線程狀態
      通過show slave status\G和show master status可以查看復制線程狀態。常見的線程狀態有:
    (1)主服務器Binlog Dump線程
    Has sent all binlog to slave; waiting for binlog to be updated
    線程已經從二進制日志讀取所有主要的更新并已經發送到了從服務器。線程現在正空閑,等待由主服務器上新的更新導致的出現在二進制日志中的新事件。

    (2)從服務器I/O線程狀態
    Waiting for master to send event
    線程已經連接上主服務器,正等待二進制日志事件到達。如果主服務器正空閑,會持續較長的時間。如果等待持續slave_read_timeout秒,則發生超時。此時,線程認為連接被中斷并企圖重新連接。

    (3)從服務器SQL線程狀態
    Reading event from the relay log
    線程已經從中繼日志讀取一個事件,可以對事件進行處理了。
    Has read all relay log; waiting for the slave I/O thread to update it
    線程已經處理了中繼日志文件中的所有事件,現在正等待I/O線程將新事件寫入中繼日志。

    2.復制過程中使用的傳遞和狀態文件
      默認情況,中繼日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是從服務器主機名,nnnnnn是序列號。中繼日志與二進制日志的格式相同,并且可以用mysqlbinlog讀取。
      從服務器在data目錄中另外創建兩個小文件。這些狀態文件默認名為主master.info和relay-log.info。狀態文件保存在硬盤上,從服務器關閉時不會丟失。下次從服務器啟動時,讀取這些文件以確定它已經從主服務器讀取了多少二進制日志,以及處理自己的中繼日志的程度。


    附錄1
    關于log_bin日志?
      my.conf 文件中的[mysqld]標簽下的log_bin指定日志文件,如果不提供文件名,mysql將自己產生缺省文件名。mysql會在文件名后面自動添加數字引,每次啟動服務時,都會重新生成一個新的二進制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定記錄的數據庫;使用binlog-ignore-db可以指定不記錄的數據庫。注意的是:binlog-do-db和binlog-ignore-db一次只指定一個數據庫,指定多個數據庫需要多個語句。而且,MySQL會將所有的數據庫名稱改成小寫,在指定數據庫時必須全部使用小寫名字,否則不會起作用。
      以后對數據庫每做的一次操作,都會在binlog中有所記錄。


    轉載于:https://my.oschina.net/u/2375576/blog/528380

    總結

    以上是生活随笔為你收集整理的mysql主从库配置方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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