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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql主从库配置方法

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

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

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

[plain]?view plaincopy

  • log-bin?#開啟二進(jìn)制日志??

  • server-id=id?#主服務(wù)器id號??

  • binlog-do-db=db_nameA?#指定對db_nameA記錄二進(jìn)制日志??

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

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

    在測試主機(jī)上,我們實(shí)際添加入如下內(nèi)容:

    [plain]?view plaincopy

  • log-bin??

  • server-id=1??

  • binlog-do-db=test??


  • 2.為從服務(wù)器添加mysql賬戶并配置權(quán)限
    在主服務(wù)器上,必須為從服務(wù)器創(chuàng)建一個用來連接主服務(wù)器的用戶,并設(shè)置replication slave權(quán)限。所用具體命令如下:

    [sql]?view plaincopy

  • grant?replication?slave??

  • on?*.*??

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

  • 在測試機(jī)上,我們實(shí)際執(zhí)行:

    [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項(xiàng)對就的值為Y。
    3.導(dǎo)出主服務(wù)器數(shù)據(jù)
    導(dǎo)出主服務(wù)器數(shù)據(jù),以備之后將其導(dǎo)入從服務(wù)器,使主從服務(wù)器的初始狀態(tài)保持一致。

    在測試機(jī)上,我們實(shí)際執(zhí)行:

    [sql]?view plaincopy

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


  • 4.記錄File 及Position 項(xiàng)的值
      重啟mysql,使用show master status\G;查看主服務(wù)器狀態(tài),記錄File 及Position 項(xiàng)的值,以便之后對從服務(wù)器進(jìn)行配置。
      
    在測試機(jī)上,我們實(shí)際執(zhí)行時看到的結(jié)果如下:
    *************************** 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。

    至此主服務(wù)器配置完畢

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

    [plain]?view plaincopy

  • server-id=id?#從機(jī)id??

  • 實(shí)際中,我們添加:

    [plain]?view plaincopy

  • server-id=2??


  • 2.導(dǎo)入主機(jī)數(shù)據(jù)庫
    在測試機(jī)上,我們實(shí)際執(zhí)行:
    mysql test < test.bak

    3.重啟mysql數(shù)據(jù)庫并設(shè)置相關(guān)參數(shù)

    [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.檢查數(shù)據(jù)庫查看相關(guān)參數(shù)
      使用show slave status \G;查看相關(guān)參數(shù)是否正確。
      在實(shí)際執(zhí)行時,我們在從機(jī)上看到的結(jié)果如下(只摘取了部分輸出):
    *************************** 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
    ……

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

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


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


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

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

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

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


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


    轉(zhuǎn)載于:https://my.oschina.net/u/2375576/blog/528380

    總結(jié)

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

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