基于docker 的mysql主從復(fù)制晰房,讀寫分離

(參考原文鏈接https://www.cnblogs.com/taosim/articles/4244576.html)

數(shù)據(jù)庫復(fù)制 replication 的實(shí)現(xiàn)原理

主服務(wù)器凡運(yùn)行語句 , 都產(chǎn)生一個(gè)二進(jìn)制日志 binlog

從服務(wù)器不斷讀取主服務(wù)器的 binlog

從主服務(wù)讀取到的 binlog, 轉(zhuǎn)換為自身可執(zhí)行的 relaylog,

執(zhí)行 relaylog

實(shí)現(xiàn)步驟 :

首先確保主服務(wù)器打開二進(jìn)制日志功能 .這樣 , 主服務(wù)器一旦有數(shù)據(jù)變化 , 立即產(chǎn)生二進(jìn)制日志 .

從服務(wù)器也需要開啟二進(jìn)制日志和 relay 日志功能 .這樣可以從主服務(wù)器讀取 binlog, 并產(chǎn)生 relaylog

在主服務(wù)器建立一個(gè)從服務(wù)器的賬號 , 并授予數(shù)得上權(quán)限 .

指定從服務(wù)對應(yīng)的主服務(wù)器 , 開啟從服務(wù)器 .

實(shí)現(xiàn)過程

服務(wù)器準(zhǔn)備:

10.3.136.128 主服務(wù)器 master

10.3.136.129 從服務(wù)器slave

1.為了簡化MySQL的安裝,我這里使用的docker-compose啟動服務(wù)器

docker-compose.yml的內(nèi)容為

version: '3.1'

services:

? db:

? ? # 目前 latest 版本為 MySQL8.x

? ? image: mysql

? ? restart: always

? ? environment:

? ? ? MYSQL_ROOT_PASSWORD: 123456

? ? command:

? ? ? --default-authentication-plugin=mysql_native_password

? ? ? --character-set-server=utf8mb4

? ? ? --collation-server=utf8mb4_general_ci

? ? ? --explicit_defaults_for_timestamp=true

? ? ? --lower_case_table_names=1

? ? ports:

? ? ? - 3306:3306

? ? volumes:

? ? ? - ./data:/var/lib/mysql? # 這里主要是為了將容器中的數(shù)據(jù)持久化到磁盤上

然后運(yùn)行兩個(gè)虛擬機(jī)上的容器:docker-compose up -d

2.使用Navicat遠(yuǎn)程連接數(shù)據(jù)庫娜庇,兩個(gè)數(shù)據(jù)庫均連接成功

3.配置Master(主)

(1)通過docker exec -it 容器ID /bin/bash命令進(jìn)入到Master容器內(nèi)部甫何,

(2)cd /etc/mysql切換到/etc/mysql目錄下

(3)使用apt-get install vim命令安裝vim

如果出現(xiàn)如下問題:

Readingpackagelists...?

DoneBuilding dependency tree? ? ??

?Reading state information...?

DoneE:Unable to locatepackagevim

(4)執(zhí)行apt-get update颤诀,然后再次執(zhí)行apt-get install vim即可成功安裝vim

(5)使用vim編輯my.cnf对湃,在my.cnf中添加如下配置:

server-id=128

log-bin=mysql-bin

(6)配置完成之后崖叫,需要重啟mysql服務(wù)使配置生效。使用service mysql restart完成重啟拍柒。重啟mysql服務(wù)時(shí)會使得docker容器停止心傀,我們還需要docker start mysql-master啟動容器

(7)mysql -u root -p進(jìn)入mysql

在Master數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)同步用戶拆讯,授予用戶 slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限剧包,用于在主從庫之間同步數(shù)據(jù)。

CREATE USER 'repl'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';

4.配置Slave(從)

(1)和配置Master(主)一樣往果,在Slave配置文件my.cnf中添加如下配置:

##設(shè)置server_id,注意要唯一

server-id=129

## 開啟二進(jìn)制日志功能,以備Slave作為其它Slave的Master時(shí)使用

log-bin=mysql-slave-bin

## relay_log配置中繼日志

relay_log=edu-mysql-relay-bin

(2)配置完成后也需要重啟mysql服務(wù)和docker容器一铅,操作和配置Master(主)一致陕贮。

5.鏈接Master(主)和Slave(從)

(1)在Master進(jìn)入mysql,執(zhí)行show master status;


File和Position字段的值后面將會用到潘飘,在后面的操作完成之前肮之,需要保證Master庫不能做任何操作掉缺,否則將會引起狀態(tài)變化,F(xiàn)ile和Position字段的值變化戈擒。

(2)在Slave 中進(jìn)入 mysql眶明,執(zhí)行

change master to master_host='10.3.136.128', master_user='repl', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 2270, master_connect_retry=30;

命令說明:

master_host?:即Master的虛擬主機(jī)IP

master_port:Master的端口號,指的是容器的端口號

master_user:用于數(shù)據(jù)同步的用戶

master_password:用于同步的用戶的密碼

master_log_file:指定 Slave 從哪個(gè)日志文件開始復(fù)制數(shù)據(jù)筐高,即上文中提到的 File 字段的值

master_log_pos:從哪個(gè) Position 開始讀搜囱,即上文中提到的 Position 字段的值

master_connect_retry:如果連接失敗,重試的時(shí)間間隔柑土,單位是秒,默認(rèn)是60秒

(3)在Slave 中的mysql終端執(zhí)行show slave status \G;用于查看主從同步狀態(tài)稽屏。

正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是No狐榔,因?yàn)槲覀冞€沒有開啟主從復(fù)制過程。使用start slave開啟主從復(fù)制過程薄腻,然后再次查詢主從同步狀態(tài)show slave status \G;收捣。


SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明主從復(fù)制已經(jīng)開啟被廓。此時(shí)可以測試數(shù)據(jù)同步是否成功。

主從復(fù)制排錯:

使用start slave開啟主從復(fù)制過程后嫁乘,如果SlaveIORunning一直是Connecting,則說明主從復(fù)制一直處于連接狀態(tài)蜓斧,這種情況一般是下面幾種原因造成的仓蛆,我們可以根據(jù) Last_IO_Error提示予以排除。

(1)網(wǎng)絡(luò)不通

檢查ip,端口

(2)密碼不對

檢查是否創(chuàng)建用于同步的用戶和用戶密碼是否正確

(3)pos不對

檢查Master的 Position

我在配置的時(shí)候出現(xiàn)的問題:

一挎春、mysql版本問題導(dǎo)致的權(quán)限問題:

2.docker克隆導(dǎo)致的UUID重復(fù)問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市直奋,隨后出現(xiàn)的幾起案子能庆,更是在濱河造成了極大的恐慌脚线,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渠旁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顾腊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杂靶,“玉大人,你說我怎么就攤上這事伪煤。” “怎么了抱既?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長防泵。 經(jīng)常有香客問我,道長捷泞,這世上最難降的妖魔是什么足删? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任锁右,我火速辦了婚禮,結(jié)果婚禮上咏瑟,老公的妹妹穿的比我還像新娘。我一直安慰自己码泞,他們只是感情好兄旬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布余寥。 她就那樣靜靜地躺著,像睡著了一般宋舷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祝蝠,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天汹来,我揣著相機(jī)與錄音,去河邊找鬼。 笑死坟岔,一個(gè)胖子當(dāng)著我的面吹牛谒兄,可吹牛的內(nèi)容都是我干的社付。 我是一名探鬼主播承疲,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鸥咖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啼辣?” 一聲冷哼從身側(cè)響起啊研,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鸥拧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后富弦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟娱,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕柜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盏缤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛾找,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出打毛,到底是詐尸還是另有隱情柿赊,我是刑警寧澤幻枉,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站熬甫,受9級特大地震影響胰挑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞻颂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贡这。 院中可真熱鬧,春花似錦盖矫、人聲如沸丽惭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湃望。三九已至换衬,卻和暖如春喜爷,著一層夾襖步出監(jiān)牢的瞬間冗疮,已是汗流浹背檩帐。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工术幔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湃密,地道東北人诅挑。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓泛源,卻偏偏與公主長得像,于是被迫代替她去往敵國和親达箍。 傳聞我的和親對象是個(gè)殘疾皇子没龙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容