[{"data":1,"prerenderedAt":1242},["ShallowReactive",2],{"content:\u002F2026\u002F02\u002Fmysql-master-slave-copy":3,"surround:\u002F2026\u002F02\u002Fmysql-master-slave-copy":1231},{"id":4,"title":5,"body":6,"categories":1209,"date":1211,"description":1212,"draft":1213,"extension":1214,"image":1215,"meta":1216,"navigation":643,"path":1218,"permalink":1215,"published":1215,"readingTime":1219,"recommend":1215,"references":1215,"seo":1224,"sitemap":1225,"stem":1226,"tags":1227,"type":1229,"updated":1211,"__hash__":1230},"content\u002Fposts\u002F2026\u002F02\u002Fmysql-master-slave-copy.md","MySQL 主从复制搭建与配置",{"type":7,"value":8,"toc":1195},"minimark",[9,14,19,23,26,32,65,70,82,85,97,101,117,121,124,128,131,135,662,773,777,782,878,883,974,977,991,994,997,1068,1071,1084,1179,1191],[10,11,13],"h2",{"id":12},"mysql主从复制原理","MySql主从复制原理",[15,16,18],"h3",{"id":17},"什么是mysql的主从复制","什么是MySql的主从复制",[20,21,22],"p",{},"主从复制,指的是在多个MySql实例下,从节点启动一个IO线程,主动向主节点去请求binlog,然后写入到slave log,启动一个Sql线程去重放执行主节点执行过的Sql语句去保证和主节点的一致性.",[15,24,25],{"id":25},"主从复制的原理图",[20,27,28],{},[29,30],"img",{"alt":29,"src":31},"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fcodepzj\u002Fimages@main\u002F20260226165030341.jpeg",[33,34,35,48,56,59,62],"ol",{},[36,37,38,39,43,44,47],"li",{},"从节点使用",[40,41,42],"code",{"code":42},"CHANGE MASTER TO","去连接主库,同时连接的账号需要有",[40,45,46],{"code":46},"REPLICATION","的权限",[36,49,50,51,55],{},"从节点启动一个",[52,53,54],"strong",{},"IO线程",",向主节点去请求获取二进制数据(binlog)",[36,57,58],{},"主节点接受到请求,向从节点发送binlog",[36,60,61],{},"从节点接受到请求之后,将binlog写入到slavelog(中继日志中)",[36,63,64],{},"从节点启动Sql线程去读取relaylog,翻译成一条条Sql语句去重放,保证和主库数据一致",[20,66,67],{},[52,68,69],{},"需要注意的是:",[71,72,73,76,79],"ul",{},[36,74,75],{},"master节点需要开启binlog以及binlog_format=ROW",[36,77,78],{},"master和slave节点最好在一个网段下",[36,80,81],{},"IO线程主要用于读取主库binlog投放到从库的slavelog,Sql线程主要用于翻译,去转换log为Sql语句去同步",[15,83,84],{"id":84},"主从复制的优点",[33,86,87,90],{},[36,88,89],{},"保证MySql的高可用性,假如数据库压力过大,导致主节点mysql宕机,从节点会补上成为主节点,防止单节点mysql崩了系统全面瘫痪",[36,91,92,93,96],{},"提高数据库的读写性能,一般采用",[40,94,95],{"code":95},"一主多从","的策略,主库负责写操作,从库负责读操作,读写分离,如果有一条sql语句需要锁表,那么并不影响主数据库的写入",[15,98,100],{"id":99},"mysql-主从复制的形式","MySQL 主从复制的形式",[71,102,103,106,109,111,114],{},[36,104,105],{},"一主一从",[36,107,108],{},"主主复制",[36,110,95],{},[36,112,113],{},"多主一从",[36,115,116],{},"级联复制",[15,118,120],{"id":119},"mysql主从复制时延","MySql主从复制时延",[20,122,123],{},"MySQL 的主从复制都是单线程的操作，主库对所有 DDL 和 DML 产生的日志写进 binlog，由于 binlog 是顺序写，所以效率很高，slave 的 SQL thread 线程将主库的 DDL 和 DML 操作事件在 slave 中重放。DML 和 DDL 的 IO 操作是随机的，不是顺序，所以成本要高很多，另一方面，由于 SQL thread 也是单线程的，当主库的并发较高时，产生的 DML 数量超过 slave 的 SQL thread 所能处理的速度，或者当 slave 中有大型 query 语句产生了锁等待，那么延时就产生了。",[10,125,127],{"id":126},"mysql主从复制安装配置","Mysql主从复制安装配置",[20,129,130],{},"这里只介绍Docker的方式安装",[15,132,134],{"id":133},"docker-composeyaml","docker-compose.yaml",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-yaml shiki shiki-themes github-light github-dark","version: \"3.8\"\nservices:\n  mysql-master:\n    container_name: mysql-master\n    image: mysql:8.0.36\n    environment:\n      MYSQL_ROOT_PASSWORD: master\n    volumes:\n      - .\u002Fdata\u002Fmysql-master-data:\u002Fvar\u002Flib\u002Fmysql\n      - .\u002Fconf\u002Fmaster\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n    ports:\n      - 3307:3306\n    networks:\n      - mysql_bridge\n  mysql-slave-1:\n    container_name: mysql-slave-1\n    image: mysql:8.0.36\n    environment:\n      MYSQL_ROOT_PASSWORD: slave1\n    volumes:\n      - .\u002Fdata\u002Fmysql-slave1-data:\u002Fvar\u002Flib\u002Fmysql\n      - .\u002Fconf\u002Fslave1\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n    ports:\n      - 3308:3306\n    networks:\n      - mysql_bridge\n  mysql-slave-2:\n    container_name: mysql-slave-2\n    image: mysql:8.0.36\n    environment:\n      MYSQL_ROOT_PASSWORD: slave2\n    volumes:\n      - .\u002Fdata\u002Fmysql-slave2-data:\u002Fvar\u002Flib\u002Fmysql\n      - .\u002Fconf\u002Fslave2\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n    ports:\n      - 3309:3306\n    networks:\n      - mysql_bridge\n\nnetworks:\n  mysql_bridge:\n","yaml","",[40,143,144,161,170,182,197,212,224,241,253,268,282,294,308,320,334,344,358,371,382,398,409,423,437,448,462,473,486,496,510,523,534,550,561,575,589,600,614,625,638,645,652],{"__ignoreMap":141},[145,146,149,153,157],"span",{"class":147,"data-line":148,"line":148},"line",1,[145,150,152],{"class":151},"s9eBZ","version",[145,154,156],{"class":155},"sVt8B",": ",[145,158,160],{"class":159},"sZZnC","\"3.8\"\n",[145,162,164,167],{"class":147,"data-line":163,"line":163},2,[145,165,166],{"class":151},"services",[145,168,169],{"class":155},":\n",[145,171,173,177,180],{"class":147,"data-line":172,"line":172},3,[145,174,176],{"class":175},"indent","  ",[145,178,179],{"class":151},"mysql-master",[145,181,169],{"class":155},[145,183,185,187,189,192,194],{"class":147,"data-line":184,"line":184},4,[145,186,176],{"class":175},[145,188,176],{"class":175},[145,190,191],{"class":151},"container_name",[145,193,156],{"class":155},[145,195,196],{"class":159},"mysql-master\n",[145,198,200,202,204,207,209],{"class":147,"data-line":199,"line":199},5,[145,201,176],{"class":175},[145,203,176],{"class":175},[145,205,206],{"class":151},"image",[145,208,156],{"class":155},[145,210,211],{"class":159},"mysql:8.0.36\n",[145,213,215,217,219,222],{"class":147,"data-line":214,"line":214},6,[145,216,176],{"class":175},[145,218,176],{"class":175},[145,220,221],{"class":151},"environment",[145,223,169],{"class":155},[145,225,227,229,231,233,236,238],{"class":147,"data-line":226,"line":226},7,[145,228,176],{"class":175},[145,230,176],{"class":175},[145,232,176],{"class":175},[145,234,235],{"class":151},"MYSQL_ROOT_PASSWORD",[145,237,156],{"class":155},[145,239,240],{"class":159},"master\n",[145,242,244,246,248,251],{"class":147,"data-line":243,"line":243},8,[145,245,176],{"class":175},[145,247,176],{"class":175},[145,249,250],{"class":151},"volumes",[145,252,169],{"class":155},[145,254,256,258,260,262,265],{"class":147,"data-line":255,"line":255},9,[145,257,176],{"class":175},[145,259,176],{"class":175},[145,261,176],{"class":175},[145,263,264],{"class":155},"- ",[145,266,267],{"class":159},".\u002Fdata\u002Fmysql-master-data:\u002Fvar\u002Flib\u002Fmysql\n",[145,269,271,273,275,277,279],{"class":147,"data-line":270,"line":270},10,[145,272,176],{"class":175},[145,274,176],{"class":175},[145,276,176],{"class":175},[145,278,264],{"class":155},[145,280,281],{"class":159},".\u002Fconf\u002Fmaster\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n",[145,283,285,287,289,292],{"class":147,"data-line":284,"line":284},11,[145,286,176],{"class":175},[145,288,176],{"class":175},[145,290,291],{"class":151},"ports",[145,293,169],{"class":155},[145,295,297,299,301,303,305],{"class":147,"data-line":296,"line":296},12,[145,298,176],{"class":175},[145,300,176],{"class":175},[145,302,176],{"class":175},[145,304,264],{"class":155},[145,306,307],{"class":159},"3307:3306\n",[145,309,311,313,315,318],{"class":147,"data-line":310,"line":310},13,[145,312,176],{"class":175},[145,314,176],{"class":175},[145,316,317],{"class":151},"networks",[145,319,169],{"class":155},[145,321,323,325,327,329,331],{"class":147,"data-line":322,"line":322},14,[145,324,176],{"class":175},[145,326,176],{"class":175},[145,328,176],{"class":175},[145,330,264],{"class":155},[145,332,333],{"class":159},"mysql_bridge\n",[145,335,337,339,342],{"class":147,"data-line":336,"line":336},15,[145,338,176],{"class":175},[145,340,341],{"class":151},"mysql-slave-1",[145,343,169],{"class":155},[145,345,347,349,351,353,355],{"class":147,"data-line":346,"line":346},16,[145,348,176],{"class":175},[145,350,176],{"class":175},[145,352,191],{"class":151},[145,354,156],{"class":155},[145,356,357],{"class":159},"mysql-slave-1\n",[145,359,361,363,365,367,369],{"class":147,"data-line":360,"line":360},17,[145,362,176],{"class":175},[145,364,176],{"class":175},[145,366,206],{"class":151},[145,368,156],{"class":155},[145,370,211],{"class":159},[145,372,374,376,378,380],{"class":147,"data-line":373,"line":373},18,[145,375,176],{"class":175},[145,377,176],{"class":175},[145,379,221],{"class":151},[145,381,169],{"class":155},[145,383,385,387,389,391,393,395],{"class":147,"data-line":384,"line":384},19,[145,386,176],{"class":175},[145,388,176],{"class":175},[145,390,176],{"class":175},[145,392,235],{"class":151},[145,394,156],{"class":155},[145,396,397],{"class":159},"slave1\n",[145,399,401,403,405,407],{"class":147,"data-line":400,"line":400},20,[145,402,176],{"class":175},[145,404,176],{"class":175},[145,406,250],{"class":151},[145,408,169],{"class":155},[145,410,412,414,416,418,420],{"class":147,"data-line":411,"line":411},21,[145,413,176],{"class":175},[145,415,176],{"class":175},[145,417,176],{"class":175},[145,419,264],{"class":155},[145,421,422],{"class":159},".\u002Fdata\u002Fmysql-slave1-data:\u002Fvar\u002Flib\u002Fmysql\n",[145,424,426,428,430,432,434],{"class":147,"data-line":425,"line":425},22,[145,427,176],{"class":175},[145,429,176],{"class":175},[145,431,176],{"class":175},[145,433,264],{"class":155},[145,435,436],{"class":159},".\u002Fconf\u002Fslave1\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n",[145,438,440,442,444,446],{"class":147,"data-line":439,"line":439},23,[145,441,176],{"class":175},[145,443,176],{"class":175},[145,445,291],{"class":151},[145,447,169],{"class":155},[145,449,451,453,455,457,459],{"class":147,"data-line":450,"line":450},24,[145,452,176],{"class":175},[145,454,176],{"class":175},[145,456,176],{"class":175},[145,458,264],{"class":155},[145,460,461],{"class":159},"3308:3306\n",[145,463,465,467,469,471],{"class":147,"data-line":464,"line":464},25,[145,466,176],{"class":175},[145,468,176],{"class":175},[145,470,317],{"class":151},[145,472,169],{"class":155},[145,474,476,478,480,482,484],{"class":147,"data-line":475,"line":475},26,[145,477,176],{"class":175},[145,479,176],{"class":175},[145,481,176],{"class":175},[145,483,264],{"class":155},[145,485,333],{"class":159},[145,487,489,491,494],{"class":147,"data-line":488,"line":488},27,[145,490,176],{"class":175},[145,492,493],{"class":151},"mysql-slave-2",[145,495,169],{"class":155},[145,497,499,501,503,505,507],{"class":147,"data-line":498,"line":498},28,[145,500,176],{"class":175},[145,502,176],{"class":175},[145,504,191],{"class":151},[145,506,156],{"class":155},[145,508,509],{"class":159},"mysql-slave-2\n",[145,511,513,515,517,519,521],{"class":147,"data-line":512,"line":512},29,[145,514,176],{"class":175},[145,516,176],{"class":175},[145,518,206],{"class":151},[145,520,156],{"class":155},[145,522,211],{"class":159},[145,524,526,528,530,532],{"class":147,"data-line":525,"line":525},30,[145,527,176],{"class":175},[145,529,176],{"class":175},[145,531,221],{"class":151},[145,533,169],{"class":155},[145,535,537,539,541,543,545,547],{"class":147,"data-line":536,"line":536},31,[145,538,176],{"class":175},[145,540,176],{"class":175},[145,542,176],{"class":175},[145,544,235],{"class":151},[145,546,156],{"class":155},[145,548,549],{"class":159},"slave2\n",[145,551,553,555,557,559],{"class":147,"data-line":552,"line":552},32,[145,554,176],{"class":175},[145,556,176],{"class":175},[145,558,250],{"class":151},[145,560,169],{"class":155},[145,562,564,566,568,570,572],{"class":147,"data-line":563,"line":563},33,[145,565,176],{"class":175},[145,567,176],{"class":175},[145,569,176],{"class":175},[145,571,264],{"class":155},[145,573,574],{"class":159},".\u002Fdata\u002Fmysql-slave2-data:\u002Fvar\u002Flib\u002Fmysql\n",[145,576,578,580,582,584,586],{"class":147,"data-line":577,"line":577},34,[145,579,176],{"class":175},[145,581,176],{"class":175},[145,583,176],{"class":175},[145,585,264],{"class":155},[145,587,588],{"class":159},".\u002Fconf\u002Fslave2\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fmy.cnf\n",[145,590,592,594,596,598],{"class":147,"data-line":591,"line":591},35,[145,593,176],{"class":175},[145,595,176],{"class":175},[145,597,291],{"class":151},[145,599,169],{"class":155},[145,601,603,605,607,609,611],{"class":147,"data-line":602,"line":602},36,[145,604,176],{"class":175},[145,606,176],{"class":175},[145,608,176],{"class":175},[145,610,264],{"class":155},[145,612,613],{"class":159},"3309:3306\n",[145,615,617,619,621,623],{"class":147,"data-line":616,"line":616},37,[145,618,176],{"class":175},[145,620,176],{"class":175},[145,622,317],{"class":151},[145,624,169],{"class":155},[145,626,628,630,632,634,636],{"class":147,"data-line":627,"line":627},38,[145,629,176],{"class":175},[145,631,176],{"class":175},[145,633,176],{"class":175},[145,635,264],{"class":155},[145,637,333],{"class":159},[145,639,641],{"class":147,"data-line":640,"line":640},39,[145,642,644],{"emptyLinePlaceholder":643},true,"\n",[145,646,648,650],{"class":147,"data-line":647,"line":647},40,[145,649,317],{"class":151},[145,651,169],{"class":155},[145,653,655,657,660],{"class":147,"data-line":654,"line":654},41,[145,656,176],{"class":175},[145,658,659],{"class":151},"mysql_bridge",[145,661,169],{"class":155},[136,663,667],{"className":664,"code":665,"language":666,"meta":141,"style":141},"language-bash shiki shiki-themes github-light github-dark","pzj@pzjmac mysql-cluster % tree -I data\n.\n├── conf\n│   ├── master\n│   │   └── my.cnf\n│   ├── slave1\n│   │   └── my.cnf\n│   └── slave2\n│       └── my.cnf\n└── docker-compose.yaml\n","bash",[40,668,669,691,696,704,715,728,737,747,756,765],{"__ignoreMap":141},[145,670,671,675,678,681,684,688],{"class":147,"data-line":148,"line":148},[145,672,674],{"class":673},"sScJk","pzj@pzjmac",[145,676,677],{"class":159}," mysql-cluster",[145,679,680],{"class":159}," %",[145,682,683],{"class":159}," tree",[145,685,687],{"class":686},"sj4cs"," -I",[145,689,690],{"class":159}," data\n",[145,692,693],{"class":147,"data-line":163,"line":163},[145,694,695],{"class":686},".\n",[145,697,698,701],{"class":147,"data-line":172,"line":172},[145,699,700],{"class":673},"├──",[145,702,703],{"class":159}," conf\n",[145,705,706,709,712],{"class":147,"data-line":184,"line":184},[145,707,708],{"class":673},"│",[145,710,711],{"class":159},"   ├──",[145,713,714],{"class":159}," master\n",[145,716,717,719,722,725],{"class":147,"data-line":199,"line":199},[145,718,708],{"class":673},[145,720,721],{"class":159},"   │",[145,723,724],{"class":159},"   └──",[145,726,727],{"class":159}," my.cnf\n",[145,729,730,732,734],{"class":147,"data-line":214,"line":214},[145,731,708],{"class":673},[145,733,711],{"class":159},[145,735,736],{"class":159}," slave1\n",[145,738,739,741,743,745],{"class":147,"data-line":226,"line":226},[145,740,708],{"class":673},[145,742,721],{"class":159},[145,744,724],{"class":159},[145,746,727],{"class":159},[145,748,749,751,753],{"class":147,"data-line":243,"line":243},[145,750,708],{"class":673},[145,752,724],{"class":159},[145,754,755],{"class":159}," slave2\n",[145,757,758,760,763],{"class":147,"data-line":255,"line":255},[145,759,708],{"class":673},[145,761,762],{"class":159},"       └──",[145,764,727],{"class":159},[145,766,767,770],{"class":147,"data-line":270,"line":270},[145,768,769],{"class":673},"└──",[145,771,772],{"class":159}," docker-compose.yaml\n",[15,774,776],{"id":775},"主从节点的mycnf","主从节点的my.cnf",[20,778,779],{},[40,780,781],{"code":781},"master\u002Fmy.cnf",[136,783,787],{"className":784,"code":785,"language":786,"meta":141,"style":141},"language-ini shiki shiki-themes github-light github-dark","[mysqld]\nserver-id=1 # mysql实例唯一标识\nlog-bin=mysql-bin # 开启binlog\nbinlog_format=ROW # ROW模式\ngtid_mode=ON # 全局事务唯一ID\nenforce_gtid_consistency=ON # 根据ID同步事务而不是文件commit滚动同步\nlog_slave_updates=ON # 接收主库日志\nbinlog_checksum=NONE # 日志校验\n","ini",[40,788,789,801,814,825,836,847,857,867],{"__ignoreMap":141},[145,790,791,795,798],{"class":147,"data-line":148,"line":148},[145,792,794],{"class":793},"sSDpw","[",[145,796,797],{"class":673},"mysqld",[145,799,800],{"class":793},"]\n",[145,802,803,807,810],{"class":147,"data-line":163,"line":163},[145,804,806],{"class":805},"szBVR","server-id",[145,808,809],{"class":155},"=1 ",[145,811,813],{"class":812},"sJ8bj","# mysql实例唯一标识\n",[145,815,816,819,822],{"class":147,"data-line":172,"line":172},[145,817,818],{"class":805},"log-bin",[145,820,821],{"class":155},"=mysql-bin ",[145,823,824],{"class":812},"# 开启binlog\n",[145,826,827,830,833],{"class":147,"data-line":184,"line":184},[145,828,829],{"class":805},"binlog_format",[145,831,832],{"class":155},"=ROW ",[145,834,835],{"class":812},"# ROW模式\n",[145,837,838,841,844],{"class":147,"data-line":199,"line":199},[145,839,840],{"class":805},"gtid_mode",[145,842,843],{"class":155},"=ON ",[145,845,846],{"class":812},"# 全局事务唯一ID\n",[145,848,849,852,854],{"class":147,"data-line":214,"line":214},[145,850,851],{"class":805},"enforce_gtid_consistency",[145,853,843],{"class":155},[145,855,856],{"class":812},"# 根据ID同步事务而不是文件commit滚动同步\n",[145,858,859,862,864],{"class":147,"data-line":226,"line":226},[145,860,861],{"class":805},"log_slave_updates",[145,863,843],{"class":155},[145,865,866],{"class":812},"# 接收主库日志\n",[145,868,869,872,875],{"class":147,"data-line":243,"line":243},[145,870,871],{"class":805},"binlog_checksum",[145,873,874],{"class":155},"=NONE ",[145,876,877],{"class":812},"# 日志校验\n",[20,879,880],{},[40,881,882],{"code":882},"slave\u002Fmy.cnf",[136,884,886],{"className":784,"code":885,"language":786,"meta":141,"style":141},"[mysqld]\nserver-id=2 # mysql实例唯一标识\nlog-bin=mysql-bin # 开启binlog\nrelay-log=relay-bin # 主库binlog副本\nbinlog_format=ROW # ROW模式\ngtid_mode=ON # 全局事务唯一ID\nenforce_gtid_consistency=ON # 根据ID同步事务而不是文件commit滚动同步\nlog_slave_updates=ON # 接收主库日志\nread_only=ON # 从库只进行写操作\nbinlog_checksum=NONE # 日志校验\n",[40,887,888,896,905,913,924,932,940,948,956,966],{"__ignoreMap":141},[145,889,890,892,894],{"class":147,"data-line":148,"line":148},[145,891,794],{"class":793},[145,893,797],{"class":673},[145,895,800],{"class":793},[145,897,898,900,903],{"class":147,"data-line":163,"line":163},[145,899,806],{"class":805},[145,901,902],{"class":155},"=2 ",[145,904,813],{"class":812},[145,906,907,909,911],{"class":147,"data-line":172,"line":172},[145,908,818],{"class":805},[145,910,821],{"class":155},[145,912,824],{"class":812},[145,914,915,918,921],{"class":147,"data-line":184,"line":184},[145,916,917],{"class":805},"relay-log",[145,919,920],{"class":155},"=relay-bin ",[145,922,923],{"class":812},"# 主库binlog副本\n",[145,925,926,928,930],{"class":147,"data-line":199,"line":199},[145,927,829],{"class":805},[145,929,832],{"class":155},[145,931,835],{"class":812},[145,933,934,936,938],{"class":147,"data-line":214,"line":214},[145,935,840],{"class":805},[145,937,843],{"class":155},[145,939,846],{"class":812},[145,941,942,944,946],{"class":147,"data-line":226,"line":226},[145,943,851],{"class":805},[145,945,843],{"class":155},[145,947,856],{"class":812},[145,949,950,952,954],{"class":147,"data-line":243,"line":243},[145,951,861],{"class":805},[145,953,843],{"class":155},[145,955,866],{"class":812},[145,957,958,961,963],{"class":147,"data-line":255,"line":255},[145,959,960],{"class":805},"read_only",[145,962,843],{"class":155},[145,964,965],{"class":812},"# 从库只进行写操作\n",[145,967,968,970,972],{"class":147,"data-line":270,"line":270},[145,969,871],{"class":805},[145,971,874],{"class":155},[145,973,877],{"class":812},[20,975,976],{},"参数详解:",[71,978,979,982,985,988],{},[36,980,981],{},"server-id: mysql唯一标识,多节点不能存在重复",[36,983,984],{},"gtid_mode: 开启全局唯一事务",[36,986,987],{},"enforce_gtid_consistency: 根据ID同步事务而不是binlog文件commit滚动同步(需要知道哪个binlog文件和offset,效率较低)",[36,989,990],{},"read_only: 只读(一般从库开启)",[15,992,993],{"id":993},"从库连接主库",[20,995,996],{},"进入主库,先创建一个含有复制权限的账号",[136,998,1002],{"className":999,"code":1000,"language":1001,"meta":141,"style":141},"language-sql shiki shiki-themes github-light github-dark","CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';\nGRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';\n","sql",[40,1003,1004,1036],{"__ignoreMap":141},[145,1005,1006,1009,1012,1015,1018,1021,1024,1027,1030,1033],{"class":147,"data-line":148,"line":148},[145,1007,1008],{"class":805},"CREATE",[145,1010,1011],{"class":805}," USER",[145,1013,1014],{"class":155}," '",[145,1016,1017],{"class":673},"repl",[145,1019,1020],{"class":155},"'@",[145,1022,1023],{"class":159},"'%'",[145,1025,1026],{"class":155}," IDENTIFIED ",[145,1028,1029],{"class":805},"BY",[145,1031,1032],{"class":159}," 'repl'",[145,1034,1035],{"class":155},";\n",[145,1037,1038,1041,1044,1047,1050,1053,1056,1059,1061,1064,1066],{"class":147,"data-line":163,"line":163},[145,1039,1040],{"class":805},"GRANT",[145,1042,1043],{"class":155}," REPLICATION SLAVE ",[145,1045,1046],{"class":805},"ON",[145,1048,1049],{"class":805}," *",[145,1051,1052],{"class":155},".",[145,1054,1055],{"class":805},"*",[145,1057,1058],{"class":805}," TO",[145,1060,1032],{"class":159},[145,1062,1063],{"class":155},"@",[145,1065,1023],{"class":159},[145,1067,1035],{"class":155},[20,1069,1070],{},"进入从库，指定主库",[136,1072,1074],{"className":999,"code":1073,"language":1001,"meta":141,"style":141},"STOP SLAVE;\n",[40,1075,1076],{"__ignoreMap":141},[145,1077,1078,1081],{"class":147,"data-line":148,"line":148},[145,1079,1080],{"class":805},"STOP",[145,1082,1083],{"class":155}," SLAVE;\n",[136,1085,1087],{"className":999,"code":1086,"language":1001,"meta":141,"style":141},"CHANGE MASTER TO\n  MASTER_HOST='mysql-master',\n  MASTER_PORT=3306, -- host使用应该是容器监听端口\n  MASTER_USER='repl',\n  MASTER_PASSWORD='repl',\n  MASTER_AUTO_POSITION=1; -- 通过全局事务唯一ID进行同步, 不依赖binlog和偏移量\n",[40,1088,1089,1100,1116,1134,1148,1161],{"__ignoreMap":141},[145,1090,1091,1094,1097],{"class":147,"data-line":148,"line":148},[145,1092,1093],{"class":155},"CHANGE ",[145,1095,1096],{"class":805},"MASTER",[145,1098,1099],{"class":805}," TO\n",[145,1101,1102,1104,1107,1110,1113],{"class":147,"data-line":163,"line":163},[145,1103,176],{"class":175},[145,1105,1106],{"class":155},"MASTER_HOST",[145,1108,1109],{"class":805},"=",[145,1111,1112],{"class":159},"'mysql-master'",[145,1114,1115],{"class":155},",\n",[145,1117,1118,1120,1123,1125,1128,1131],{"class":147,"data-line":172,"line":172},[145,1119,176],{"class":175},[145,1121,1122],{"class":155},"MASTER_PORT",[145,1124,1109],{"class":805},[145,1126,1127],{"class":686},"3306",[145,1129,1130],{"class":155},", ",[145,1132,1133],{"class":812},"-- host使用应该是容器监听端口\n",[145,1135,1136,1138,1141,1143,1146],{"class":147,"data-line":184,"line":184},[145,1137,176],{"class":175},[145,1139,1140],{"class":155},"MASTER_USER",[145,1142,1109],{"class":805},[145,1144,1145],{"class":159},"'repl'",[145,1147,1115],{"class":155},[145,1149,1150,1152,1155,1157,1159],{"class":147,"data-line":199,"line":199},[145,1151,176],{"class":175},[145,1153,1154],{"class":155},"MASTER_PASSWORD",[145,1156,1109],{"class":805},[145,1158,1145],{"class":159},[145,1160,1115],{"class":155},[145,1162,1163,1165,1168,1170,1173,1176],{"class":147,"data-line":214,"line":214},[145,1164,176],{"class":175},[145,1166,1167],{"class":155},"MASTER_AUTO_POSITION",[145,1169,1109],{"class":805},[145,1171,1172],{"class":686},"1",[145,1174,1175],{"class":155},"; ",[145,1177,1178],{"class":812},"-- 通过全局事务唯一ID进行同步, 不依赖binlog和偏移量\n",[136,1180,1182],{"className":999,"code":1181,"language":1001,"meta":141,"style":141},"START SLAVE;\n",[40,1183,1184],{"__ignoreMap":141},[145,1185,1186,1189],{"class":147,"data-line":148,"line":148},[145,1187,1188],{"class":805},"START",[145,1190,1083],{"class":155},[1192,1193,1194],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":141,"searchDepth":184,"depth":184,"links":1196},[1197,1204],{"id":12,"depth":163,"text":13,"children":1198},[1199,1200,1201,1202,1203],{"id":17,"depth":172,"text":18},{"id":25,"depth":172,"text":25},{"id":84,"depth":172,"text":84},{"id":99,"depth":172,"text":100},{"id":119,"depth":172,"text":120},{"id":126,"depth":163,"text":127,"children":1205},[1206,1207,1208],{"id":133,"depth":172,"text":134},{"id":775,"depth":172,"text":776},{"id":993,"depth":172,"text":993},[1210],"数据库","2026-02-27","介绍 MySQL 主从复制原理，并使用 Docker Compose 完成主库、从库和复制账号的配置。",false,"md",null,{"slots":1217},{},"\u002F2026\u002F02\u002Fmysql-master-slave-copy",{"text":1220,"minutes":1221,"time":1222,"words":1223},"6 min read",5.045,302700,1009,{"title":5,"description":1212},{"loc":1218},"posts\u002F2026\u002F02\u002Fmysql-master-slave-copy",[1228],"mysql","tech","70lqcUbYC6ZLORGytdIdw_tHJyG51oVu2Y6Mb7hnn04",[1232,1237],{"title":1233,"path":1234,"stem":1235,"date":1236,"type":1229,"children":-1},"Go遍历时删除特定元素","\u002F2026\u002F02\u002Fgo-delete-element-in-range","posts\u002F2026\u002F02\u002Fgo-delete-element-in-range","2026-02-20",{"title":1238,"path":1239,"stem":1240,"date":1241,"type":1229,"children":-1},"千万级 Mysql 表结构变更实战","\u002F2026\u002F03\u002Fgh-ost-migrate-mysql-online","posts\u002F2026\u002F03\u002Fgh-ost-migrate-mysql-online","2026-03-10",1786555054307]