mysql 基于docker-compose配置主從復(fù)制(一主一從)

MySQL主從復(fù)制有那些好處

1、做數(shù)據(jù)的熱備亿傅,作為后備數(shù)據(jù)庫媒峡,主數(shù)據(jù)庫服務(wù)器故障后,可切換到從數(shù)據(jù)庫繼續(xù)工作葵擎,避免數(shù)據(jù)丟失谅阿。
2酬滤、架構(gòu)的擴展签餐。業(yè)務(wù)量越來越大,I/O訪問頻率過高盯串,單機無法滿足氯檐,此時做多庫的存儲,降低磁盤I/O訪問的頻率体捏,提高單個機器的I/O性能冠摄。
3、讀寫分離几缭,使數(shù)據(jù)庫能支撐更大的并發(fā)河泳。

MySQL復(fù)制過程

  • master將改變記錄到二進制日志(binary log)。這些記錄過程叫做二進制日志事件奏司,binary log events乔询;

  • slave將master的binary log events拷貝到它的中繼日志(relay log)樟插;

  • slave重做中繼日志中的事件韵洋,將改變應(yīng)用到自己的數(shù)據(jù)庫中。MySQL復(fù)制是異步的且串行化的

操作之前需要注意的地方

  • master和slave都在一臺linux上黄锤,IP是192.168.10.11
  • master 端口為33065搪缨;slave端口為33066
  • 工程目錄是 /data/docker/mysql
  • 默認創(chuàng)建了test庫
  • 兩個mysql的賬號密碼均為 root
  • 我這里使用的mysql版本是mysql5.7

搭建過程

1、目錄結(jié)構(gòu)


image.png
image.png

2鸵熟、編輯 docker-compose.yml

version: '2'
services:
 mysql-master:
   image: "docker.io/mysql:5.7"
   environment:
    - "MYSQL_ROOT_PASSWORD=root"
    - "MYSQL_DATABASE=test"
   volumes:
    - "./master/data:/var/lib/mysql"
    - "./master/my.cnf:/etc/mysql/my.cnf"
   links:
    - mysql-slave
   ports:
    - "33065:3306"
   restart: always
   hostname: mysql-master
 mysql-slave:
   image: "docker.io/mysql:5.7"
   environment:
    - "MYSQL_ROOT_PASSWORD=root"
    - "MYSQL_DATABASE=test"
   volumes:
    - "./slave/data:/var/lib/mysql"
    - "./slave/my.cnf:/etc/mysql/my.cnf"
   ports:
    - "33066:3306"
   restart: always
   hostname: mysql-slave

3副编、編輯master的配置文件
vi /data/docker/mysql/master/my.cnf

binlog-do-db=test 指定需要主從備份的數(shù)據(jù)庫為test庫

[mysqld]
## server_id,一般設(shè)置為IP流强,注意要唯一
server_id=1
log_bin=mysql-bin
## 需要主從復(fù)制的數(shù)據(jù)庫
binlog-do-db=test
## 復(fù)制過濾:也就是指定哪個數(shù)據(jù)庫不用同步(mysql庫一般不同步)
binlog-ignore-db=mysql
## 為每個session分配的內(nèi)存痹届,在事務(wù)過程中用來存儲二進制日志的緩存
binlog_cache_size=1M
## 主從復(fù)制的格式(mixed,statement,row呻待,默認格式是statement。建議是設(shè)置為row队腐,主從復(fù)制時數(shù)據(jù)更加能夠統(tǒng)一)
binlog_format=row
## 二進制日志自動刪除/過期的天數(shù)蚕捉。默認值為0,表示不自動刪除柴淘。
expire_logs_days=7
## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤迫淹,避免slave端復(fù)制中斷。
## 如:1062錯誤是指一些主鍵重復(fù)为严,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062

4敛熬、編輯slave的配置文件
vi /data/docker/mysql/slave/my.cnf

binlog-do-db=test 指定需要主從備份的數(shù)據(jù)庫為test庫

[mysqld]
## 設(shè)置server_id,一般設(shè)置為IP第股,注意要唯一
server_id=2
## 需要主從復(fù)制的數(shù)據(jù)庫
replicate-do-db=test
## 復(fù)制過濾:也就是指定哪個數(shù)據(jù)庫不用同步(mysql庫一般不同步)
binlog-ignore-db=mysql
## 開啟二進制日志功能应民,以備Slave作為其它Slave的Master時使用
log_bin = mysql-bin
## 為每個session 分配的內(nèi)存,在事務(wù)過程中用來存儲二進制日志的緩存
binlog_cache_size=1M
## 主從復(fù)制的格式(mixed,statement,row炸茧,默認格式是statement)
binlog_format=row
## 二進制日志自動刪除/過期的天數(shù)瑞妇。默認值為0,表示不自動刪除梭冠。
expire_logs_days=7
## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤辕狰,避免slave端復(fù)制中斷。
## 如:1062錯誤是指一些主鍵重復(fù)控漠,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062
## relay_log配置中繼日志
relay_log=replicas-mysql-relay-bin
## log_slave_updates表示slave將復(fù)制事件寫進自己的二進制日志
log_slave_updates=1
## 防止改變數(shù)據(jù)(除了特殊的線程)
read_only=1

5蔓倍、設(shè)置目錄文件權(quán)限
在/data/docker/mysql下執(zhí)行授權(quán)

chmod 644 -R *

6、啟動mysql服務(wù)

docker-compose up
image.png

啟動成功盐捷!

7偶翅、在master里準備數(shù)據(jù),創(chuàng)建test表碉渡;并插入三條數(shù)據(jù)



SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL COMMENT 'id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1);
INSERT INTO `test` VALUES (2);
INSERT INTO `test` VALUES (3);

SET FOREIGN_KEY_CHECKS = 1;

8聚谁、在master中查看binlog的版本參數(shù)

show master status;
image.png

File 和 Position兩個參數(shù)會在下面用到

9、在slave中執(zhí)行命令

change master to master_host='192.168.10.11',master_port=33065,master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=1259;
  • master_host master的ip
  • master_port master的端口
  • master_user master 用戶名
  • master_password master 密碼
  • master_log_file master中此時的File 參數(shù)
  • master_log_pos master中此時的Position 參數(shù)

salve中啟動主從復(fù)制

start slave;

查看從機的復(fù)制狀態(tài)

show slave status;
image.png

Waiting for master to send event 即等待主服務(wù)器發(fā)送事件滞诺;現(xiàn)在到master里新增一條記錄
下面兩個參數(shù)都是YES形导,則說明主從配置成功!Slave_IO_Running:Yes和Slave_SQL_Running:Yes


image.png
INSERT INTO `test`.`test`(`id`) VALUES (4);

slave再次執(zhí)行

show slave status;
image.png

提示slave中test表不存在习霹,難道m(xù)ysql在主從復(fù)制過程中只是同步變更朵耕,而之前master中已經(jīng)存在的表結(jié)構(gòu)和表數(shù)據(jù)不會被同步?那么就先將master中的表結(jié)構(gòu)和數(shù)據(jù)一起復(fù)制到slave中淋叶,然后進行insert:


image.png

同步成功Q植堋!

10、同步停止方式
slave 中執(zhí)行

stop slave;

注意事項

1处嫌、在停止一次主從復(fù)制后如果需要再次啟用栅贴,需要再次到master中執(zhí)行show master status; 生成最新的File 和 Position
2、開啟同步后熏迹,master中已經(jīng)存在的表結(jié)構(gòu)和表數(shù)據(jù)不會被同步到slave中筹误;將master中的數(shù)據(jù)遷移至slave,之后就可以實現(xiàn)同步了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末癣缅,一起剝皮案震驚了整個濱河市厨剪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌友存,老刑警劉巖祷膳,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屡立,居然都是意外死亡直晨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門膨俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勇皇,“玉大人,你說我怎么就攤上這事焚刺×舱” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵乳愉,是天一觀的道長兄淫。 經(jīng)常有香客問我,道長蔓姚,這世上最難降的妖魔是什么捕虽? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮坡脐,結(jié)果婚禮上泄私,老公的妹妹穿的比我還像新娘。我一直安慰自己备闲,他們只是感情好晌端,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浅役,像睡著了一般斩松。 火紅的嫁衣襯著肌膚如雪伶唯。 梳的紋絲不亂的頭發(fā)上觉既,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼瞪讼。 笑死钧椰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的符欠。 我是一名探鬼主播嫡霞,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼希柿!你這毒婦竟也來了诊沪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曾撤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泡挺,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡煌抒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了装悲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昏鹃。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诀诊,靈堂內(nèi)的尸體忽然破棺而出洞渤,到底是詐尸還是另有隱情,我是刑警寧澤属瓣,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布您宪,位于F島的核電站,受9級特大地震影響奠涌,放射性物質(zhì)發(fā)生泄漏宪巨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一溜畅、第九天 我趴在偏房一處隱蔽的房頂上張望捏卓。 院中可真熱鬧,春花似錦慈格、人聲如沸怠晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒜田。三九已至,卻和暖如春选泻,著一層夾襖步出監(jiān)牢的瞬間冲粤,已是汗流浹背美莫。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梯捕,地道東北人厢呵。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像傀顾,于是被迫代替她去往敵國和親襟铭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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