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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL 主从架构配置详解

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

原文http://www.codeceo.com/article/mysql-master-slave.html

?

無論是哪一種數據庫,數據的安全都是至關重要的,因此熟練掌握數據庫的安全備份功能,是作為開發人員,特別是后端開發人員的一項必備技能。MySQL 數據庫內建的復制功能,可以幫助我們對數據進行異地備份,讀寫分離,在較大程度上避免數據丟失、數據庫服務器壓力過大甚至宕機帶來的損失。

使用MySQL 主從架構一年多了,想起當年學習這些東西的時候,苦于完整的中文資料比較少,當時英文又不太好,遇到不少問題。剛好最近也有一段時間沒更新博客了,心血來潮,決定翻譯一下 MySQL 官網的英文文檔,官網文檔講解的非常詳細,可以幫助更多新手理解并快速入門。

第一次翻譯這么大篇幅的英文技術文檔,盡量采取逐句翻譯,這樣可以盡可能保持文檔原意。有很多需要修改的地方,懇請各位指正。

廢話說多了,下面開始~~~

概述

MySQL的復制功能,使得數據可以從一臺MySQL 數據庫服務器(我們稱之為主庫,即?master),復制到另外一臺或者多臺MySQL 數據庫服務器(我們稱之為從庫,即?slave)。在默認情況下,復制的過程是異步的,因此,從數據庫服務器不需要一直連接到主數據庫服務器接收更新。 這也意味著,更新可以在長距離連接,甚至在諸如撥號服務臨時或者間歇性的情況下繼續。MySQL的復制功能,可以復制所有數據庫,或者需要復制的幾個數據庫,甚至數據庫中需要復制的數據庫表,這都依賴于你是如何配置的。

配置

配置主庫

需要復制的主庫必須開啟二進制日志功能,并且創建一個唯一的服務器編號(server-id),之后,必須重啟數據庫。

由于二進制日志文件是主從復制的基礎,所以,主庫?必須?開啟二進制日志功能。如果二進制日志功能沒用使用?log-bin選項開啟,主從復制就無法進行。

可以將所有的從庫作為一個組,組里的每一個從庫都需要創建一個唯一的服務器編號(server-id),以便用這個編號在組里識別指定的從庫,數據庫服務器編號(server-id)必須是 1 至 232?? 1 之間的整數。具體使用哪些整數,完全由你自己決定,沒有其他特殊規定。

要給數據庫配置服務器編號(server-id)選項,需要停止MySQL 數據庫,然后編輯?my.cnf?或者?my.ini?文件。在配置文件的?[mysqld]?這一節下,添加?log-bin?和?server-id?兩個選項。如果它們已經存在,但是被注釋掉了,就解注釋,然后根據自己的需要進行修改。例如使用前綴為mysql-bin日志文件名,啟用二進制日志功能,配置服務器編號為1,可以參考下面的示例:

[mysqld] log-bin=mysql-bin server-id=1

保存好上面的修改之后,重啟數據庫。

注意:

  • 如果沒有配置?server-id?選項(或者將其設置為默認值0),主庫將拒絕來自任何從庫的連接請求。
  • 為了能在 InnoDB 存儲引擎中使用事務時,達到最大可能的耐用性和一致性,需要在?my.cnf?文件中配置innodb_flush_log_at_trx_commit=1?和?sync_binlog=1?兩個選項。
  • 不要在主庫上配置?skip-networking?選項。如果主庫的網絡都被禁用了,從庫就不能連接到主庫,最終導致復制失敗。

配置從庫

前面在配置主庫時,已經說過,必須給每個從庫創建一個服務器編號,創建好之后,必須?重啟數據庫。

如果從庫的服務器編號沒有設置,或者設置的編號和主庫沖突,就需要先停掉從庫,然后編輯從庫的配置文件的[mysqld]?這一節,指定一個唯一的服務器編號,像下面這樣:

[mysqld] server-id=2

保存好修改之后,重啟從庫。

如果配置了多個從庫,那么每一個從庫都必須有一個唯一的?server-id?選項值(即每個從庫的?server-id?值必須與主庫以及除它本身以外的其他從庫的?server-id?值不同)。

注意:
如果沒有配置從庫的?server-id?選項(或者配置它的值為默認值0),那么從庫將拒絕連接到主庫。

不需要為了主從復制而給從庫開啟二進制日志功能。如果給從庫開啟了二進制日志功能,由此產生的二進制日志文件可以作為備份數據,或者在數據庫崩潰的時候,使用二進制日志文件恢復數據,也可以使用此開啟了二進制日志功能的從庫作為更復雜的主從架構的一部分。比如,可以將此從庫作為其他從庫的主庫。

為從庫創建用戶

每個從庫都使用數據庫用戶名和密碼連接并登錄到主庫,所以在主庫中必須有一個能讓從庫連接到此主庫的 MySQL 賬戶。任何被賦予?REPLICATION SLAVE?權限的 MySQ L賬戶,都可以用作此連接操作??梢詾槊恳粋€從庫分配一個賬戶,也可以讓所有的從庫使用同一個賬戶,用來連接到主庫。

雖然不需要為從庫分配一個單獨的賬戶去執行復制,但你應該知道的是,用來復制操作的用戶名和密碼都是明文存儲在主庫文件或表中的(相關鏈接:Section 17.2.2.2, “Slave Status Logs”)。因此,你可能想要創建一個隔離的、只能進行復制操作的賬戶,將對其他賬戶的損害減到最小。

使用?CREATE USER?語句創建新的 MySQL 賬戶。使用?GRANT?語句給這個賬戶賦予復制操作所必要的權限。若創建賬戶僅是為了達到復制的目的的話,那么這個賬戶只需要?REPLICATION SLAVE?。舉個例子,創建一個新的賬戶?repl?,使其可以從?mydomain.com?域名下的任何主機連接到主庫并執行復制,在主庫上執行下面的語句:

CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';

更多關于用戶賬戶的操作語句,請查看?Section 13.7.1, “Account Management Statements”。

獲取主庫的二進制日志坐標

為了在接下來配置完從庫,使其能從正確的位置開始執行復制操作,你需要知道主庫當前的二進制日志坐標。

如果在主庫上已經存儲了一些數據,而且又需要在開始之前同步到從庫上,那么就必須在主庫上停止執行語句,接著,獲取主庫當前的日志坐標,并轉存其數據。如果不使主庫停止執行語句,將會導致轉存的數據和數據庫的狀態信息不相符,最終導致從庫數據不一致或者引起從庫發生錯誤。

依照下面這幾步來獲取主庫的二進制日志坐標:

  • 使用命令行連接到主庫以開始一個會話,清空所有表的緩存,并且通過執行?FLUSH TABLES WITH READ LOCK?阻止對數據庫的寫操作,即鎖定對所有表的只讀操作: FLUSH TABLES WITH READ LOCK

    對于?InnoDB?存儲引擎來說,?FLUSH TABLES WITH READ LOCK?語句也會阻止?COMMIT?操作。

    提醒:
    不要退出剛才執行了?FLUSH TABLES?語句的會話。如果退出了這個會話,上面的鎖表操作將被釋放。

  • 再打開一個新的會話,連接到主庫,使用?SHOW MASTER STATUS?語句來確認當前二進制日志文件的名稱和位置: SHOW MASTER STATUS;

    結果:

    FilePositionBinlog_Do_DBBinlog_Ignore_DB
    mysql-bin.00000373testmanual,mysql

    File?列顯示了當前二進制日志文件的名字,?Position?列顯示了文件的位置。在上面這個例子中,二進制日志文件的名字是?mysql-bin.000003?,位置是?73?。這些數據代表了從庫將要(開始)處理來自主庫的更新的坐標。記錄下這些數據,稍后在配置從庫時,將會使用到它們。

    如果主庫在事先沒有開啟二進制日志功能時已經在運行狀態了,那么,通過執行?SHOW MASTER STATUS?語句,或者通過執行?mysqldump –master-data?命令,得到的結果中,二進制日志文件名和位置都將是空。若是那樣的話,在從庫上配置二進制日志名和位置時,就分別用空字符串('')和 數值?4?來代替。

  • 到目前為止,我們已經獲得了足夠的信息,我們需要使用這些信息,配置從庫,使從庫開始從正確的位置讀取來自主庫的二進制日志,開始進行復制。

    如果你有一些數據,需要在從庫開始復制之前同步到從庫,那么,保持之前開啟的會話不要關閉,這樣才能保持之前開啟的數據庫鎖不被釋放。接著,查看?Section 17.1.1.5, “Creating a Data Snapshot Using mysqldump”?或者?Section 17.1.1.6, “Creating a Data Snapshot Using Raw Data Files”?。它們將會告訴你如何防止任何進一步的更改,以便于將已經存在于主庫的數據同步到從庫。

    如果你正在建立一個全新的主從復制組,你可以退出第一個會話,以便釋放對數據庫的讀鎖定。

    使用新的主、從庫配置復制

    使用新的主、從庫配置數據庫復制是最簡單、最直接的方式。

    如果你正在設置新的服務器,但是有一些從其他的務器轉存的數據庫,并且你想加載到你的復制配置新中,同樣可以使用本節介紹的方法。通過將數據加載到新的主庫中,數據將會被自動復制到從庫中。

    依照下面這幾步,來在新的主、從庫之間配置復制功能:

  • 通過一些必要的配置屬性文件,配置主庫。參考:配置主庫
  • 啟動主庫。
  • 設置一個用戶。參考:為從庫創建用戶。
  • 獲取主庫的狀態信息。參考:獲取主庫的二進制日志坐標。
  • 在主庫上釋放讀鎖: UNLOCK TABLES;
  • 在從庫上編輯 MySQL 配置文件。 參考:配置從庫。
  • 啟動從庫。
  • 執行?CHANGE MASTER TO?語句來設置主庫的信息。參考:為從庫配置主庫的信息。
  • 在每一臺從庫上,都完成上面這幾步操作。

    因為使用的是新的數據庫,沒有數據或者配置信息需要替換,因此你不需要復制或者導入任何其他信息。

    如果你需要使用來自于其他數據庫服務器上數據配置新的復制環境,你可能需要在新的主庫上導入這些轉存的數據。由此對主庫產生的更新將會被自動同步到從庫:

    mysql -h master < fulldb.dump

    使用已有的數據配置復制環境

    當使用已有的數據配置復制環境時,你可能需要做出一個決定,如何在啟動復制服務之前,讓從庫以最優方式獲取到主庫的數據。
    下面這幾步基本操作將會引導你,使用已有的數據配置復制環境:

  • 在 MySQL 主庫運行的情況下,創建一個用戶,以便從庫在復制的時候可以連接到主庫。參考:為從庫創建用戶。
  • 如果你還沒有在主庫上配置?server-id?選項,或者還沒有開啟二進制日志功能,你需要停止主庫,然后配置它們。參考:配置主庫。
    在配置主庫的過程中,如果需要停止(重啟)主庫服務,你可以利用主庫服務停止的這段時間,創建一個主庫的快照。但別忘了,你需要在停止主庫服務、更新配置信息,創建快照之前,獲得主庫的狀態信息(參考:獲取主庫的二進制日志坐標)。關于如何使用原始數據創建數據庫快照,你可以參考這里:Section 17.1.1.6, “Creating a Data Snapshot Using Raw Data Files”。
  • 如果主庫信息已經正確配置好了,那么就可以獲取它的狀態信息(參考:獲取主庫的二進制日志坐標),接著,使用 MySQL 自帶的?mysqldump?工具創建一個數據庫快照(參考:Section 17.1.1.5, “Creating a Data Snapshot Using mysqldump”),也可以參考?Section 17.1.1.6, “Creating a Data Snapshot Using Raw Data Files”?直接創建主庫的原始數據文件的快照。
  • 更新從庫的配置信息。參考:配置從庫。
  • 這一步的操作,取決于你在主庫上是如何創建的數據的快照的。
    若你是使用的?mysqldump?創建的快照:

    ?

    • 使用?--skip-slave-start?選項啟動從庫,以便不讓主從復制開始。
    • 像下面這樣,導入轉存的數據文件: mysql < fulldb.dump

    若你是使用第二種方案,即直接創建原始數據文件的快照的方式:

    • 將數據文件解壓到從庫的數據(data)目錄下: tar xvf dbdump.tar

      你可能需要設置這些文件的權限和所有者,以便在從庫可以獲取到這些數據文件,并且可以對其進行更新。

    • 使用?--skip-slave-start?選項啟動從庫,以便不讓主從復制開始。
  • 將主庫的二進制日志坐標信息配置到從庫。這一步用來指定從庫需要從主庫的哪一個二進制日志文件,以及從這個文件的什么位置開始復制。當然,也需要在從庫上配置連接主庫時使用的憑證和主庫的 IP 或者 域名。更多關于CHANGE MASTER TO?語句的所需的必須參數等信息,請參考:為從庫配置主庫的信息。
  • 啟動從庫: START SLAVE;
  • 執行完上面這幾步,從庫就會連接到主庫,主庫的任何更新操作,都將被發送到從庫,從庫會在已有的快照數據的基礎上,同步執行這些更新。

    如果你忘記了設置主庫的?server-id?選項信息,從庫將無法連接到主庫。

    如果你忘記了設置從庫的?server-id?選項信息,在從庫的錯誤日志中,將出現以下錯誤信息:

    Warning: You should set server-id to a non-0 value if master_host
    is set; we will force server id to 2, but this MySQL server will
    not act as a slave.

    同樣,如果從庫由于其他任何原因導致不能執行復制,你可以在錯誤日志文件中得到相關的錯誤信息。

    從庫通過使用存儲在主庫信息倉庫中的信息,保持跟蹤它已經執行了多少主庫產生的二進制日志。通過?--master-info-repository?選項,可以將倉庫信息設置在文件的表單里,或者在一個表中。當配置信息為?--master-info-repository=FILE?時,你可以在從庫的數據(data)目錄下發現兩個文件,名字分別是?master.info?和?relay-log.info?。配置信息為?--master-info-repository=TABLE?時,信息將會被保存在?mysql?數據庫的?master_slave_info表中。無論如何,不要刪除或者編輯上面提到的文件和表里的數據,除非你清楚的知道你在干什么,并且充分理解這么做代表的含義。即便如此,也應該優先使用?CHANGE MASTER TO?語句去修改復制參數。從庫可以使用語句中指定的值去自動更新狀態信息文件。更多相關信息請參考:Section 17.2.2, “Replication Relay and Status Logs”。

    注意:
    主庫信息倉庫的內容會覆蓋一些在命令行或者?my.cnf?文件中設置的選項。詳細信息請參考:Section 17.1.4, “Replication and Binary Logging Options and Variables”。

    一份主庫的快照,可以被多個從庫來使用。如果需要額外再配置一些從庫,可以使用相同的主庫快照,像之前介紹如何配置已有從庫時描述的那樣,配置這些額外增加的從庫。

    為從庫配置主庫的信息

    你必須告訴告訴從庫一些必要信息,以便從庫能夠連接到主庫進行復制。為了做到這一點,在從庫上執行下面的語句,根據你的系統上實際的值,替換語句中相應的選項值:

    CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

    注意:
    復制不能使用 Unix 套接字文件(socket file)。你必須確保能夠使用?TCP/IP?協議連接到主庫。

    CHANGE MASTER TO?語句也有一些其他參數可供配置。例如,可以通過使用此語句的其他選項,決定是否使用 SSL 協議,以便達到安全的復制。

    關于此語句的完整的選項,以及選項值允許的最大長度等信息,請參考:Section 13.4.2.1, “CHANGE MASTER TO Syntax”。

    轉載于:https://www.cnblogs.com/qinweizhi/p/5881437.html

    總結

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

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

    主站蜘蛛池模板: av网站免费播放 | 国产乱码精品一区二区三 | 黄色大片网站在线观看 | 丹丹的呻吟声1一7 | 性xxxxxxxxx| 激情av综合| 亚洲国产无线乱码在线观看 | 国产视频精品免费 | 免费黄色在线观看 | h在线网站 | 激情丁香 | 天天射夜夜操 | www.狠狠艹| 2024av| 九九99久久 | 国内精品久久久久久 | 天天干天天操天天射 | 91精品大片 | 九九色网| 成人综合在线视频 | 亚洲一区二区三区在线免费观看 | 欧美中文字幕一区二区三区 | 精久久 | 人妻夜夜爽天天爽 | 成人午夜影片 | 床上激情网站 | av电影一区二区 | 欧美一二三区在线观看 | 精品人妻久久久久一区二区三区 | 国产91丝袜 | 中文人妻av久久人妻18 | 日韩中文一区 | 中文字幕观看av | 欧美一区二区三区电影 | 好吊视频一区二区三区 | 国产农村妇女毛片精品久久 | 黄色三级网络 | 翔田千里在线播放 | 国产精品理论片 | 黑白配高清国语在线观看 | av免费观看网站 | 国产日韩视频在线观看 | 69av片| 日韩精品一区二区三区久久 | 国产精品网站在线观看 | 无码任你躁久久久久久久 | 神马午夜国产 | 久久国产精品网站 | xxxxx毛片 | 国产又黄又爽又色 | 国产乱码精品一区二区三区五月婷 | 国产网站视频 | 亚洲欧美国产毛片在线 | 国产伦一区二区三区 | 观看免费av | 黄色欧美网站 | 国产精品日本一区二区在线播放 | 亚洲区第一页 | 成人毛片在线免费观看 | 日韩精品人妻中文字幕有码 | 亚洲乱妇老熟女爽到高潮的片 | 免费在线你懂的 | 一级黄色免费观看 | 国产精品一页 | 国产嫩bbwbbw高潮 | av网站亚洲 | 九九热最新网址 | 亚洲欧美视频二区 | 夜夜夜夜夜操 | 小少妇哺乳喂奶播放 | 一区二区三区精 | 亚洲春色另类 | 94av| 久久99精品国产麻豆婷婷 | 无码人妻精品一区二区三区9厂 | 久久伊人热 | 亚洲精品国产欧美 | 91欧美在线视频 | 少妇人妻偷人精品一区二区 | 一本大道综合伊人精品热热 | 五十路毛片 | 欧美一级二级三级 | 亚洲九九爱 | 欧美特黄一级视频 | 91综合色 | 亚洲午夜精品在线 | 美女的胸给男人玩视频 | 亚洲欧洲天堂 | 日韩精品一区二区在线播放 | 免费三级大片 | 中文字幕一区二区久久人妻 | 97影音| 欧美精品一二三四 | 久久精品国产亚洲av成人 | 亚洲男女一区二区三区 | 东北老女人av | 一区二区三区四区五区av | 中文字幕啪啪 | 午夜少妇视频 |