欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker-Compose實(shí)現(xiàn)Mysql主從的示例代碼

 更新時(shí)間:2022年06月10日 09:11:43   作者:張鐵牛  
本文主要介紹了Docker-Compose實(shí)現(xiàn)Mysql主從的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 簡(jiǎn)介

通過(guò)使用docker-compose 搭建一個(gè)主從數(shù)據(jù)庫(kù),本示例為了解耦 將兩個(gè)server拆分到了兩個(gè)compose文件中,當(dāng)然也可以放到一個(gè)compose文件中

演示mysql版本:5.7.16

2. 部署流程

master節(jié)點(diǎn):

  • 安裝mysql-server
  • 修改配置
  • 創(chuàng)建用于同步的賬號(hào)并授權(quán)
  • 檢查相關(guān)配置

slave節(jié)點(diǎn):

  • 安裝mysql-server
  • 修改配置
  • 選擇主節(jié)點(diǎn)
  • 檢查相關(guān)配置并驗(yàn)證同步功能

3. master節(jié)點(diǎn)

3.1 安裝mysql

創(chuàng)建mysql文件夾并進(jìn)入文件夾(文件夾名稱mysql)

創(chuàng)建docker-compose文件內(nèi)容如下

# docker-compose.yml
version: '3'
services:
  mysql:
    restart: "no"
    image: mysql:5.7.16
    container_name: mysql-master
    volumes:
      - ./datadir:/var/lib/mysql
      - ./conf/mysql:/etc/mysql
    environment:
      - "MYSQL_ROOT_PASSWORD=123456"
      - "TZ=Asia/Shanghai"
    ports:
      - 3306:3306
    networks:
      - mysql-net
networks:
  mysql-net:
    driver: bridge

注意:因?yàn)橐雅渲梦募煸诘椒?wù)中去,所以要先把容器中的配置文件copy到宿主機(jī)上

1.先啟動(dòng)一個(gè)用于copy文件的容器

$ docker run --name mysql-temp -e MYSQL_ROOT_PASSWORD=root --rm -d  mysql:5.7.16

2.將mysql-temp容器中的配置文件copy出來(lái),現(xiàn)在conf文件夾中就是mysql自帶的所有配置文件

$ docker cp mysql-temp:/etc/mysql conf

因?yàn)楫?dāng)前conf目錄中的my.cnf還是個(gè)link,所以直接使用當(dāng)前目錄中的備份文件作為主要的配置文件

$ mv my.cnf.fallback my.cnf

3.修改配置文件my.cnf

在文件的最下方加入配置信息

[mysqld]
log-bin=mysql-bin # 開(kāi)啟 binlog
server-id=1 # 當(dāng)前server在cluster中的id,必須保證在cluster中唯一
#只保留7天的二進(jìn)制日志,以防磁盤(pán)被日志占滿(可選)
expire-logs-days = 7
#不備份的數(shù)據(jù)庫(kù) (可選)
binlog-ignore-db=information_schema  
binlog-ignore-db=performation_schema
binlog-ignore-db=sys

4.啟動(dòng)mysql服務(wù),通過(guò)輸出內(nèi)容得知真實(shí)的網(wǎng)絡(luò)名稱為mysql_mysql-net,也就是當(dāng)前所在文件夾的名稱拼接了文件中指定的網(wǎng)絡(luò)名稱

5.服務(wù)啟動(dòng)完畢后,創(chuàng)建用于同步的用戶并授權(quán)

創(chuàng)建的用戶名稱為slave密碼為123456

CREATE USER 'slave' @'%' IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave' @'%';
#刷新權(quán)限
FLUSH PRIVILEGES;

6.查看master狀態(tài)信息

SHOW MASTER STATUS;
#查看Mater數(shù)據(jù)有哪些slave
select * from information_schema.processlist as p where p.command = 'Binlog Dump'; 

4. slave節(jié)點(diǎn)

安裝步驟同master相同,只把需要修改的展示一下,當(dāng)前的目錄結(jié)構(gòu)如下

docker-compose.yaml 主要修改了網(wǎng)絡(luò)相關(guān)的信息和container_name(網(wǎng)絡(luò)名稱上面有解釋)

version: '3'
services:
  mysql:
    restart: "no"
    image: mysql:5.7.16
    container_name: mysql-slave
    volumes:
      - ./datadir:/var/lib/mysql
      - ./conf:/etc/mysql
    environment:
      - "MYSQL_ROOT_PASSWORD=123456"
      - "TZ=Asia/Shanghai"
    ports:
      - 3307:3306
    networks:
      - mysql_mysql-net
networks:
  mysql_mysql-net:
    external: true # 來(lái)自外部

my.cnf添加的內(nèi)容如下:

[mysqld]
server-id=2
relay_log=relay-log
#開(kāi)啟只讀 意味著當(dāng)前的數(shù)據(jù)庫(kù)用作讀,當(dāng)然這也只會(huì)影響到非root的用戶,如果使用root用戶操作本庫(kù)是不會(huì)有影響的
read_only=ON

設(shè)置完成后啟動(dòng)salve server,連接slave并關(guān)聯(lián)master節(jié)點(diǎn)

  • MASTER_HOST:直接使用container_name
  • MASTER_LOG_FILE/MASTER_LOG_POS:直接使用安裝master步驟中的最后一步的值,其實(shí)就是指定同步的bin-log文件名稱和Offset
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

管理完成后 啟動(dòng)salve

START SLAVE;

最后查看slave status

SHOW SLAVE STATUS;

5. 驗(yàn)證

在master上創(chuàng)建test數(shù)據(jù)庫(kù)并創(chuàng)建user表,刷新查看salve庫(kù),出現(xiàn)了對(duì)應(yīng)的庫(kù)表

經(jīng)驗(yàn)證數(shù)據(jù)同步也沒(méi)有問(wèn)題。

6. 可能遇到的問(wèn)題

SHOW SLAVE STATUS時(shí)發(fā)現(xiàn) slave_io_running=No salve_sql_running=No,可能的原因有很多,可以查看如下的字段中輸出的內(nèi)容

可能的原因:

  • 主從網(wǎng)絡(luò)不通
  • 兩臺(tái)節(jié)點(diǎn)的server-id重復(fù),直接修改對(duì)應(yīng)的id即可
  • 數(shù)據(jù)庫(kù)的uuid相同(可能是因?yàn)閿?shù)據(jù)庫(kù)文件是直接copy過(guò)來(lái)的導(dǎo)致的),在對(duì)應(yīng)的庫(kù)下生成不同于master的uuid到auto.cnf中即可
  • sql執(zhí)行失敗,可能是slave剛添加進(jìn)來(lái),也沒(méi)有master庫(kù)的數(shù)據(jù)庫(kù)instance,導(dǎo)致操作對(duì)應(yīng)的庫(kù)時(shí)slave這邊根本沒(méi)有對(duì)應(yīng)的instance或者table又或是記錄,引發(fā)的報(bào)錯(cuò)。這個(gè)只能具體問(wèn)題具體解決了
  • master和slave的MASTER_LOG_FILE/MASTER_LOG_POS值設(shè)置的有問(wèn)題,在slave節(jié)點(diǎn)上STOP SLAVE;然后重新連接下master即可

7. 同步部分?jǐn)?shù)據(jù)庫(kù)實(shí)例或表

在master節(jié)點(diǎn)上添加配置【可選】(如果只希望從庫(kù)讀取到部分實(shí)例)

在my.cnf文件中加入如下配置

#需要同步的數(shù)據(jù)庫(kù)名 有多個(gè)庫(kù)添加多行即可
binlog-do-db=test
binlog-do-db=test1
#排除的數(shù)據(jù)庫(kù)
binlog-ignore-db=sys

salve端:在my.cnf文件中加入如下配置,這樣的話salve只會(huì)讀取配置的db或table,master對(duì)其他db的操作也不會(huì)影響slave

#如果salve庫(kù)名稱與master庫(kù)名相同,使用本配置 
replicate-do-db=test
#如果master庫(kù)名[test]與salve庫(kù)名[test001]不同,使用以下配置[需要做映射] 
#replicate-rewrite-db = test -> test001
#如果不是要全部同步[默認(rèn)全部同步],則指定需要同步的表 
#replicate-wild-do-table=test.user
#replicate-wild-do-table=test.role

到此這篇關(guān)于Docker-Compose實(shí)現(xiàn)Mysql主從的示例代碼的文章就介紹到這了,更多相關(guān)Docker-Compose Mysql主從內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 編寫(xiě)Dockerfile和構(gòu)建自定義鏡像的步驟與技巧

    編寫(xiě)Dockerfile和構(gòu)建自定義鏡像的步驟與技巧

    Docker已經(jīng)成為現(xiàn)代應(yīng)用程序開(kāi)發(fā)和部署的重要工具之一,在Docker中,Dockerfile是定義和構(gòu)建自定義鏡像的鍵文件,本文將深入解讀Dockerfile的編寫(xiě)和自定義鏡像的構(gòu)建過(guò)程,并分享一些實(shí)用的技巧和最佳實(shí)踐,需要的朋友可以參考下
    2023-07-07
  • Docker images導(dǎo)出和導(dǎo)入操作

    Docker images導(dǎo)出和導(dǎo)入操作

    這篇文章主要介紹了Docker images導(dǎo)出和導(dǎo)入操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • docker安裝redis掛載容器卷同時(shí)開(kāi)啟持久化

    docker安裝redis掛載容器卷同時(shí)開(kāi)啟持久化

    本文主要介紹了docker安裝redis掛載容器卷同時(shí)開(kāi)啟持久化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • docker搭建dnsmasq服務(wù)的實(shí)現(xiàn)

    docker搭建dnsmasq服務(wù)的實(shí)現(xiàn)

    本文將指導(dǎo)讀者如何使用Docker搭建DNSmasq服務(wù),通過(guò)簡(jiǎn)單的步驟和詳細(xì)的說(shuō)明,幫助讀者快速在Docker環(huán)境中部署DNSmasq,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • docker空間爆滿導(dǎo)致的進(jìn)入容器失敗的解決方案

    docker空間爆滿導(dǎo)致的進(jìn)入容器失敗的解決方案

    這篇文章主要介紹了docker空間爆滿導(dǎo)致的進(jìn)入容器失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • MongoDB docker集群配置小結(jié)

    MongoDB docker集群配置小結(jié)

    本文主要介紹了MongoDB docker集群配置小結(jié),主要包括如何配置MongoDB的三個(gè)節(jié)點(diǎn),以及如何使用Docker Compose快速搭建集群,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Docker安裝MinIO詳細(xì)步驟介紹

    Docker安裝MinIO詳細(xì)步驟介紹

    大家好,本篇文章主要講的是Docker安裝MinIO詳細(xì)步驟介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • docker system命令集合的使用

    docker system命令集合的使用

    本文主要介紹了docker system命令集合的使用,主要包括清理沒(méi)有使用的數(shù)據(jù),包括鏡像數(shù)據(jù),已經(jīng)停止的容器等等,具有一定的參考價(jià)值,感興趣的可以了解下
    2021-10-10
  • Docker簡(jiǎn)單入門(mén)使用教程

    Docker簡(jiǎn)單入門(mén)使用教程

    這篇文章主要介紹了Docker簡(jiǎn)單入門(mén)教程,幫助大家開(kāi)始學(xué)習(xí)docker容器,感興趣的朋友可以了解下
    2020-08-08
  • Docker容器互訪的三種方法

    Docker容器互訪的三種方法

    這篇文章主要介紹了Docker容器互訪的三種方法,幫助大家更好的理解和使用docker容器,感興趣的朋友可以了解下。
    2020-09-09

最新評(píng)論