亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1. 簡介

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

演示mysql版本:5.7.16

2. 部署流程

master節(jié)點:

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

slave節(jié)點:

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

3. master節(jié)點

3.1 安裝mysql

創(chuàng)建mysql文件夾并進入文件夾(文件夾名稱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

注意:因為要把配置文件掛在到服務(wù)中去,所以要先把容器中的配置文件copy到宿主機上

1.先啟動一個用于copy文件的容器

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

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

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

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

$ mv my.cnf.fallback my.cnf

3.修改配置文件my.cnf

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

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

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

5.服務(wù)啟動完畢后,創(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é)點

安裝步驟同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 # 來自外部

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

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

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

  • MASTER_HOST:直接使用container_name
  • MASTER_LOG_FILE/MASTER_LOG_POS:直接使用安裝master步驟中的最后一步的值,其實就是指定同步的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;

管理完成后 啟動salve

START SLAVE;

最后查看slave status

SHOW SLAVE STATUS;

5. 驗證

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

經(jīng)驗證數(shù)據(jù)同步也沒有問題。

6. 可能遇到的問題

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

可能的原因:

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    docker安裝redis掛載容器卷同時開啟持久化

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

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

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

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

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

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

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

    Docker安裝MinIO詳細步驟介紹

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

    docker system命令集合的使用

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

    Docker簡單入門使用教程

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

    Docker容器互訪的三種方法

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

最新評論