摘要:的線程和線程上會(huì)同時(shí)有兩個(gè)線程在工作,線程從得到數(shù)據(jù)文件,放到被稱爲(wèi)文件中進(jìn)行記錄。中繼日誌是指的線程從獲取的二進(jìn)制日誌文件,將其保留在上。將所在的主機(jī)名,日誌文件名,以及日誌文件中處理的信息稱爲(wèi)位置信息。
原文見(jiàn)https://github.com/Junnplus/blog/issues/...
Mysql 的主從複製原理見(jiàn)下圖
Replication 是一個(gè)異步的複製過(guò)程,所謂異步,是指系統(tǒng)更新到 Master 的內(nèi)容並一定會(huì)及時(shí)的反映到 Slave 上。
Slave 上會(huì)同時(shí)有兩個(gè)線程在工作, I/O 線程從 Master 得到數(shù)據(jù)(Binary Log 文件),放到被稱爲(wèi)
Relay Log 文件中進(jìn)行記錄。另一方面,SQL 線程則將 Relay Log 讀取並執(zhí)行。
爲(wèi)什麼要有兩個(gè)線程?這是爲(wèi)了降低同步的延遲。因爲(wèi) I/O 線程和 SQL 線程都是相對(duì)很耗時(shí)的操作。
Master 會(huì)生成二進(jìn)制日誌 Binary Log, Slave 會(huì)生成中繼日誌 Relay Log。
二進(jìn)制日誌之記錄修改數(shù)據(jù)的語(yǔ)句,不記錄查詢類的語(yǔ)句。
中繼日誌是指 Slave 的 I/O 線程從 Master 獲取的二進(jìn)制日誌文件,將其保留在 Slave 上。不同二進(jìn)制日誌的是,當(dāng)不需要,中繼日誌會(huì)被 SQL 線程自動(dòng)刪除。
Slave 會(huì)記錄同步了多少 Master 數(shù)據(jù),以便斷點(diǎn)同步。
將 Master 所在的主機(jī)名,日誌文件名,以及日誌文件中處理的信息稱爲(wèi)位置信息。
docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name=master mysql
master.cnf
[mysqld] server-id = 1 log-bin=mysql-bin binlog-ignore-db=mysql # binlog-do-db # binlog_format=mixed
# 都是可選操作,下同
將 master.cnf 複製到容器內(nèi)的 /etc/mysql/conf.d 裏面
docker cp master.cnf master:/etc/mysql/conf.d創(chuàng)建 Slave 容器
docker run -d --link master:master -e MYSQL_ROOT_PASSWORD=123456 --name=slave mysql
slave.cnf
[mysqld] server-id = 2 # relay_log = relay_bin # relay-log-index = relay-bin.index # read-only=1 # 除非有SUPER權(quán)限,否則只讀 # super-read-only=1 # SUPER權(quán)限也是只讀
將 slave.cnf 複製到容器內(nèi)的 /etc/mysql/conf.d 裏面
docker cp slave.cnf slave:/etc/mysql/conf.d重啓 Master 和 Slave 容器
docker restart master slave配置 Master 和 Slave
進(jìn)入容器操作
docker exec -it master mysql -uroot -p123456 # 進(jìn)入 Master 容器 docker exec -it slave mysql -uroot -p123456 # 進(jìn)入 Slave 容器
在 Master 容器中創(chuàng)建同步帳號(hào)並授權(quán)
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO repl@"%" IDENTIFIED BY "repl";
在 Slave 容器中連接 Master 並啓動(dòng) slave
CHANGE MASTER TO MASTER_HOST="master", MASTER_USER="repl", MASTER_PASSWORD="repl"; start slave;
可以檢查一下 Slave 是否正常工作
show slave statusG
如果 Slave_SQL_Running_State 是 Slave has read all relay log; waiting for more updates 表示正常運(yùn)行。
測(cè)試 Master/Slave 同步docker exec master mysql -uroot -p123456 -e "CREATE DATABASE test" docker exec slave mysql -uroot -p123456 -e "SHOW DATABASES"簡(jiǎn)單思考
如果 Master 已有數(shù)據(jù),怎麼新增 Slave? 參考
如果已有 Master/Slave ,怎麼增加 Slave? 參考
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/26576.html
摘要:原文地址本文對(duì)應(yīng)代碼用部署基于的例子。此外,將設(shè)置為模式這樣就不能在上執(zhí)行寫操作了。最后正式啟動(dòng)驗(yàn)證到上看看是否存在如果有就說(shuō)明從復(fù)制到了上。版本在上也提供了,操作過(guò)程和上述一致,只不過(guò)容器名字會(huì)有變化。 原文地址:https://chanjarster.github.io... 本文對(duì)應(yīng)代碼:github 用Docker部署基于GTID的MySQL Master-Slave Repl...
摘要:配置主庫(kù)和備庫(kù)。主庫(kù)當(dāng)前的二進(jìn)制日志文件,和獲得數(shù)據(jù)快照時(shí)在該二進(jìn)制日志文件中的偏移量。它能夠在備份時(shí)不阻塞服務(wù)器的操作,因此可以在不影響主庫(kù)的情況下設(shè)置備庫(kù)。 showImg(https://segmentfault.com/img/bVbqOEk?w=720&h=480); 正所謂理論造航母,現(xiàn)實(shí)小帆船。單有理論,不動(dòng)手實(shí)踐,學(xué)到的知識(shí)猶如空中樓閣。接下來(lái),我們一起來(lái)看下如何一步步...
摘要:配置主庫(kù)和備庫(kù)。主庫(kù)當(dāng)前的二進(jìn)制日志文件,和獲得數(shù)據(jù)快照時(shí)在該二進(jìn)制日志文件中的偏移量。它能夠在備份時(shí)不阻塞服務(wù)器的操作,因此可以在不影響主庫(kù)的情況下設(shè)置備庫(kù)。 showImg(https://segmentfault.com/img/bVbqOEk?w=720&h=480); 正所謂理論造航母,現(xiàn)實(shí)小帆船。單有理論,不動(dòng)手實(shí)踐,學(xué)到的知識(shí)猶如空中樓閣。接下來(lái),我們一起來(lái)看下如何一步步...
閱讀 2462·2023-05-11 16:55
閱讀 3573·2021-08-10 09:43
閱讀 2690·2019-08-30 15:44
閱讀 2515·2019-08-29 16:39
閱讀 647·2019-08-29 13:46
閱讀 2078·2019-08-29 13:29
閱讀 986·2019-08-29 13:05
閱讀 752·2019-08-26 13:51