最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用MyDumper重建MySQL副本的實(shí)現(xiàn)

 更新時間:2026年03月08日 09:14:22   作者:愛可生開源社區(qū)  
本文主要介紹了MyDumper重建MySQL副本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 什么是 MyDumper?

當(dāng)副本因損壞或漂移而失效時,如果無法使用 pt-table-sync,標(biāo)準(zhǔn)解決方案是從主數(shù)據(jù)庫的全新副本重建副本。傳統(tǒng)上,為了快速重建副本,我們會使用 物理備份,但在某些情況下,邏輯備份仍然必不可少。例如,當(dāng)您遷移到特定供應(yīng)商(例如:從 MariaDB 遷移到 MySQL)或存儲引擎(過去是從 MyISAM 遷移到 InnoDB,現(xiàn)在是從 InnoDB 遷移到 RocksDB)、升級到新的數(shù)據(jù)庫版本或遷移到云端解決方案時。

邏輯備份 正是在這種情況下發(fā)揮作用,它提供了可移植性和簡易性,但前提是能夠快速執(zhí)行。MyDumper 應(yīng)運(yùn)而生,成為一款必不可少的現(xiàn)代化解決方案,它兼具兩者的優(yōu)勢:邏輯轉(zhuǎn)儲的跨平臺、跨版本靈活性,以及以往只有物理方法才能實(shí)現(xiàn)的并行、多線程速度,使其成為快速重建一致性副本的理想之選。

2. 備份

第一步是進(jìn)行備份。mydumper 有多個參數(shù)可供使用,本例中我們將使用以下參數(shù):

mydumper -v 4 -o data --clear 
--regex '^(?!(mysql.|sys.))' 
--source-data

前 3 行與日志記錄和備份目錄有關(guān),第二行用于忽略 mysqlsys 模式,最后 –source-data 將指示 mydumper 將恢復(fù)后復(fù)制配置所需的所有信息保存到元數(shù)據(jù)文件中,位于 [source] 部分。

以下是輸出示例:

[source]
# Channel_Name = '' # It can be used to setup replication FOR CHANNEL
# SOURCE_LOG_FILE = "binlog.000020"
# SOURCE_LOG_POS = 6803936
#SOURCE_HOST = "172.17.0.3"
#SOURCE_PORT =
#SOURCE_USER = ""
#SOURCE_PASSWORD = ""
#SOURCE_SSL = {0|1}
executed_gtid_set = "941fdce6-47c4-11f0-87b2-0242ac110006:1-52"
SOURCE_LOG_FILE = "binlog.000020"
SOURCE_LOG_POS = 6803936
#SOURCE_AUTO_POSITION = {0|1}
myloader_exec_reset_replica = 0
myloader_exec_change_source = 0
myloader_exec_start_replica = 0

如圖所示,這些選項(xiàng)已啟用:

executed_gtid_set = "941fdce6-47c4-11f0-87b2-0242ac110006:1-52"
SOURCE_LOG_FILE = "binlog.000020"
SOURCE_LOG_POS = 6803936

但是,這些命令的執(zhí)行已被禁用:

myloader_exec_reset_replica = 0
myloader_exec_change_source = 0
myloader_exec_start_replica = 0
We can enable them, if we set --source-data=7, then the metadata will change to:
myloader_exec_reset_replica = 1
myloader_exec_change_source = 1
myloader_exec_start_replica = 1

這是自動配置復(fù)制所必需的。

3. 配置復(fù)制

默認(rèn)情況下將使用 SOURCE_LOG_FILESOURCE_LOG_POS,但如果您配置 SOURCE_AUTO_POSITION = 1,則可以設(shè)置 GTID 位置。

如您所知,要設(shè)置復(fù)制,我們需要執(zhí)行 CHANGE SOURCE 命令。但是,根據(jù)您的具體使用情況,您可能需要執(zhí)行 RESET REPLICA 命令,并且在執(zhí)行 CHANGE SOURCE 命令后,通常需要執(zhí)行 START REPLICA 命令。如果您在元數(shù)據(jù)文件中使用以下方式進(jìn)行設(shè)置,myloader 可以自動完成此操作:

myloader_exec_reset_replica = 1
myloader_exec_change_source = 1
myloader_exec_start_replica = 1

或者,您可以在 myloader 中使用 --source-data=7 作為參數(shù)。是的!myloader 也接受 --source-data 參數(shù)。

根據(jù)您的使用場景,您可能需要在元數(shù)據(jù)文件中配置以下其他選項(xiàng):

#SOURCE_HOST = "172.17.0.3"
#SOURCE_PORT =
#SOURCE_USER = ""
#SOURCE_PASSWORD = ""
#SOURCE_SSL = {0|1}
executed_gtid_set = "941fdce6-47c4-11f0-87b2-0242ac110006:1-52"
SOURCE_LOG_FILE = "binlog.000020"
SOURCE_LOG_POS = 6803936
#SOURCE_AUTO_POSITION = {0|1}

由于存在多種使用場景,如果您想從頭開始重建副本,則需要按如下方式配置:

[source]
SOURCE_HOST = "172.17.0.3"
SOURCE_PORT = 3306
SOURCE_USER = "replica"
SOURCE_PASSWORD = "r3pl1c4"
executed_gtid_set = "941fdce6-47c4-11f0-87b2-0242ac110006:1-52"
SOURCE_LOG_FILE = "binlog.000020"
SOURCE_LOG_POS = 6803936
myloader_exec_reset_replica = 1
myloader_exec_change_source = 1
myloader_exec_start_replica = 1

如果您已經(jīng)建立了一個正在運(yùn)行的復(fù)制系統(tǒng),并且想要在不更改主機(jī)或憑據(jù)的情況下重建它,那么您可以按以下方式進(jìn)行配置:

[source]
executed_gtid_set = "941fdce6-47c4-11f0-87b2-0242ac110006:1-52"
SOURCE_LOG_FILE = "binlog.000020"
SOURCE_LOG_POS = 6803936
myloader_exec_reset_replica = 0
myloader_exec_change_source = 1
myloader_exec_start_replica = 1

SSL 是 myloader 中 --source-data 參數(shù)可以設(shè)置的另一個選項(xiàng),無需在元數(shù)據(jù)文件中使用 SOURCE_SSL。完整的選項(xiàng)列表如下:exec_start_slave (1)、exec_change_master (2)、exec_reset_slave (4)、SSL (8)、auto_position (16) 和 exec_start_replica_until (32)。根據(jù)您要設(shè)置的配置和要執(zhí)行的語句,您需要將這些值相加,并將其傳遞給 --source-data 參數(shù)。

4. 恢復(fù)

配置好元數(shù)據(jù)文件后,即可執(zhí)行 myloader,其界面如下所示:

myloader -d data -v 4 
-o --max-threads-for-schema-creation=1 
-h replica_host

在日志中,你會發(fā)現(xiàn) myloader 發(fā)送了以下命令:

2025-12-18 16:57:09 [INFO] - Schema create checksum confirmed for sakila
2025-12-18 16:57:09 [INFO] - Sending reset replica
2025-12-18 16:57:09 [INFO] - Sending change replication source
2025-12-18 16:57:09 [INFO] - Sending start replica
2025-12-18 16:57:09 [INFO] - Restore completed

mydumper 會發(fā)送命令,但不會檢查輸出,這意味著如果復(fù)制配置失敗或無法啟動,您需要手動檢查并修復(fù)。但是,它會檢測到命令是否失敗,例如,如果使用了 SOURCE_USER 而不是 SOURCE_USER

2025-12-18 17:02:56 [WARNING] - Sending replication command: CHANGE REPLICATION SOURCE TO SOURCE_HOST = "172.17.0.4", SUORCE_USER = "root", SOURCE_PASSWORD = "", SOURCE_LOG_FILE = "binlog.000020", SOURCE_LOG_POS = 1362220 FOR CHANNEL ''; - ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SUORCE_USER = "root", SOURCE_PASSWORD = "", SOURCE_LOG_FILE = "binlog.000020", SO' at line 1

5. 對故障副本進(jìn)行重建

有一個有趣的用例,我們可以使用 START REPLICA UNTIL 來修復(fù)某些表的偏移,而 pt-table-sync 或重建整個副本是不可能的。

假設(shè)我們有一個源數(shù)據(jù)庫和一個副本數(shù)據(jù)庫,我們發(fā)現(xiàn)副本數(shù)據(jù)庫上的數(shù)據(jù)發(fā)生了,并且復(fù)制過程停止并出現(xiàn)如下錯誤:

LAST_ERROR_MESSAGE: Worker 1 failed executing transaction 'ANONYMOUS' at source log binlog.000020, end_log_pos 1369103; Could not execute Update_rows event on table test.test_table; Can't find record in 'test_table', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's source log binlog.000020, end_log_pos 1369103

我們檢查了二進(jìn)制日志,發(fā)現(xiàn)它因?qū)σ唤M行進(jìn)行更新而失敗:

# at 1368995
#251218 19:34:59 server id 1 end_log_pos 1369103 CRC32 0x60a481d6 Update_rows: table id 344 flags: STMT_END_F
### UPDATE `test`.`test_table`
### WHERE
### @1=12 /* INT meta=0 nullable=0 is_null=0 */
### @2=7062 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=12 /* INT meta=0 nullable=0 is_null=0 */
### @2=7063 /* INT meta=0 nullable=1 is_null=0 */
### UPDATE `test`.`test_table`
### WHERE
### @1=15 /* INT meta=0 nullable=0 is_null=0 */
### @2=7521 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=15 /* INT meta=0 nullable=0 is_null=0 */
### @2=7522 /* INT meta=0 nullable=1 is_null=0 */
### UPDATE `test`.`test_table`
### WHERE
### @1=17 /* INT meta=0 nullable=0 is_null=0 */
### @2=8706 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=17 /* INT meta=0 nullable=0 is_null=0 */
### @2=8707 /* INT meta=0 nullable=1 is_null=0 */
### UPDATE `test`.`test_table`
### WHERE
### @1=18 /* INT meta=0 nullable=0 is_null=0 */
### @2=8108 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=18 /* INT meta=0 nullable=0 is_null=0 */
### @2=8109 /* INT meta=0 nullable=1 is_null=0 */
# at 1369103

我們檢查了數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)確實(shí)發(fā)生了偏移:

源端

mysql> select count(*) from test.test_table;
+----------+
| count(*) |
+----------+
| 15 |
+----------+
1 row in set (0.00 sec)

副本

mysql> select count(*) from test.test_table;
+----------+
| count(*) |
+----------+
| 14 |
+----------+
1 row in set (0.00 sec)

使用 MyDumper,我們可以按照以下步驟重建表:

我們需要忽略該表,以便副本能夠趕上進(jìn)度。

mysql-replica> STOP REPLICA;
Query OK, 0 rows affected (0.00 sec)

mysql-replica> CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (test.test_table);
Query OK, 0 rows affected (0.00 sec)

mysql-replica> START REPLICA;
Query OK, 0 rows affected (0.00 sec)

副本更新完成后,我們需要停止副本:

mysql-replica> STOP REPLICA;
Query OK, 0 rows affected (0.00 sec)

并對源服務(wù)器進(jìn)行備份:

mydumper -v 4 -o data --clear 
-T test.test_table 
--source-data

我們使用 -T 來備份有問題的表,而 –source-data 將啟用我們需要的元數(shù)據(jù)文件上的復(fù)制變量。

然后,我們使用正確的值通過 --source-data 參數(shù)恢復(fù)表。

myloader -d data -v 4 
-o --max-threads-for-schema-creation=1 
-h replica_host 
--source-data=32

第 32 行是執(zhí)行 START REPLICA UNTIL

最后,我們移除忽略表選項(xiàng)并重新啟動副本:

mysql-replica> CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= ();
Query OK, 0 rows affected (0.00 sec)

mysql-replica> START REPLICA;
Query OK, 0 rows affected (0.00 sec)

myloader 在備份開始時執(zhí)行的 START REPLICA UNTIL 將強(qiáng)制副本在備份表的位置停止,從而使我們能夠在一致的場景中繼續(xù)復(fù)制。

6. 結(jié)論

從傳統(tǒng)的數(shù)據(jù)轉(zhuǎn)儲方法轉(zhuǎn)向 MyDumper 不僅僅意味著性能的提升,更代表著數(shù)據(jù)完整性和遷移性的現(xiàn)代化。通過將備份過程從單線程執(zhí)行的限制中解耦,數(shù)據(jù)庫管理員現(xiàn)在可以像以往處理小型測試環(huán)境一樣靈活地處理海量數(shù)據(jù)集。

將 MyDumper 集成到您的標(biāo)準(zhǔn)操作手冊中,可確保您能夠應(yīng)對各種不可預(yù)測的情況 —— 無論是緊急副本重建還是計(jì)劃內(nèi)的架構(gòu)遷移。在數(shù)據(jù)量持續(xù)呈指數(shù)級增長的時代,擁有一款兼具邏輯靈活性和并行速度的工具至關(guān)重要,而 MyDumper 正是這樣一款工具。將其保留在您的工具箱中,下次遇到“僅邏輯恢復(fù)”場景時,您將擁有顯著的競爭優(yōu)勢。

到此這篇關(guān)于使用MyDumper重建MySQL副本的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MyDumper重建MySQL副本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于mysql實(shí)現(xiàn)group by取各分組最新一條數(shù)據(jù)

    基于mysql實(shí)現(xiàn)group by取各分組最新一條數(shù)據(jù)

    這篇文章主要介紹了基于mysql實(shí)現(xiàn)group by取各分組最新一條數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • MySQL 觸發(fā)器的使用和理解

    MySQL 觸發(fā)器的使用和理解

    這篇文章主要介紹了MySQL 觸發(fā)器的使用和理解,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-02-02
  • Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    前幾天發(fā)現(xiàn)由于MySQL的數(shù)據(jù)庫太大,默認(rèn)安裝的/var盤已經(jīng)再也無法容納新增加的數(shù)據(jù),只能想辦法轉(zhuǎn)移數(shù)據(jù)的目錄。網(wǎng)上有很多相關(guān)的文章寫到轉(zhuǎn)移數(shù)據(jù)庫目錄的文章,但轉(zhuǎn)載的過程中還會有一些錯誤,因?yàn)榇蟛糠秩烁揪蜎]測試過,這篇文章是本文測試過整理好后分享給大家。
    2016-11-11
  • Mybatis報(bào)錯: org.apache.ibatis.exceptions.PersistenceException解決辦法

    Mybatis報(bào)錯: org.apache.ibatis.exceptions.PersistenceException

    這篇文章主要介紹了Mybatis報(bào)錯: org.apache.ibatis.exceptions.PersistenceException解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • MySQL 如何分析查詢性能

    MySQL 如何分析查詢性能

    這篇文章主要介紹了MySQL 如何分析查詢性能,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-05-05
  • MySQL觸發(fā)器概念、原理與用法詳解

    MySQL觸發(fā)器概念、原理與用法詳解

    這篇文章主要介紹了MySQL觸發(fā)器概念、原理與用法,結(jié)合實(shí)例形勢詳細(xì)分析了mysql觸發(fā)器相關(guān)概念、原理、創(chuàng)建、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • MySQL組提交group commit詳解

    MySQL組提交group commit詳解

    這篇文章主要介紹了MySQL組提交group commit知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • mysql觸發(fā)器一個表改變另一個表也改變問題

    mysql觸發(fā)器一個表改變另一個表也改變問題

    這篇文章主要介紹了mysql觸發(fā)器一個表改變另一個表也改變問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行的流程詳解

    mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行的流程詳解

    這篇文章主要給大家介紹了關(guān)于mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-11-11
  • SQL group by去重復(fù)且按照其他字段排序的操作

    SQL group by去重復(fù)且按照其他字段排序的操作

    這篇文章主要介紹了SQL group by去重復(fù)且按照其他字段排序的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

增城市| 西乌| 东丰县| 盐津县| 静海县| 伊春市| 铁力市| 特克斯县| 泰来县| 青铜峡市| 名山县| 临武县| 庆安县| 黑山县| 赤水市| 明光市| 二连浩特市| 五常市| 嫩江县| 丹寨县| 靖江市| 大理市| 嘉荫县| 余庆县| 淳化县| 广平县| 南丰县| 曲松县| 太白县| 夏河县| 普宁市| 青河县| 霍林郭勒市| 砀山县| 浦东新区| 天峨县| 景泰县| 常宁市| 噶尔县| 藁城市| 手游|