搭建MySQL集群

本文MySQL集群采用一主多從的架構所袁,即一個master節(jié)點多個slave節(jié)點鳄哭,master負責寫數(shù)據(jù),slave節(jié)點負責讀操作纲熏。使用mycat作為MySQL中間件向外提供讀寫服務妆丘。使用phpmyadmin提供外部服務,整體架構如下:


架構

1 搭建MySQL集群

這里采用1主2從的結構局劲,一般在一主多從的結構中勺拣,slave節(jié)點在2-4個之間,如果slave節(jié)點多了鱼填,會影響master的性能药有。操作步驟如下:

  • 創(chuàng)建3個MySQL容器
  • 配置Master節(jié)點
  • 配置Slave節(jié)點

1.1 創(chuàng)建MySQL容器

本文采用docker-compose創(chuàng)建MySQL容器,使用docker-compose需要創(chuàng)建docker-compose.yml.env 2個文件,其中 docker-compose.yml是配置文件文件愤惰,是必需的苇经。.env 是docker-compose的環(huán)境變量文件,是可選的宦言。配置文件可以讀取環(huán)境變量文件中定義的變量扇单,方便擴展。

創(chuàng)建一個docker目錄奠旺,并在docker目錄下創(chuàng)建mysql目錄蜘澜,~/docker/mysql作為本項目的根目錄。在mysql根目錄下响疚,創(chuàng)建master鄙信,slave1和slave2目錄,用于存放3個mysql實例忿晕。并在根目錄下装诡,創(chuàng)建docker-compose的配置文件和環(huán)境變量文件。

mkdir -p ~/docker/mysql/master ~/docker/mysql/slave1 ~/docker/mysql/slave2
cd ~/docker/mysql
touch .env docker-compose.yml

目錄結構如下:

?  mysql tree -L 1 -a
.
├── .env    #docker-compose環(huán)境變量
├── docker-compose.yml #docker-compose配置文件
├── master  # 存儲master實例
├── slave1  # 存儲slave1實例
└── slave2  # 存儲slave2實例

3 directories, 2 files

設置環(huán)境變量

?  mysql vim .env

# 使用的MySQL版本
MYSQL_VERSION=mysql:5.7.30
# MySQL root用戶密碼
MYSQL_ROOT_PASSWORD=123456
# MySQL 實例存儲的根目錄
MYSQL_HOME=/Users/zebra/docker/mysql

# master配置
MASTER=master
MASTER_PORT=33061

# salve1配置
SLAVE1=slave1
SLAVE1_PORT=33062

# slave2配置
SLAVE2=slave2
SLAVE2_PORT=33063

設置配置文件docker-compose.yml

version: '3'

services: 
    master: 
        restart: always 
        image: ${MYSQL_VERSION}
        container_name: ${MASTER}
        environment: 
            # root密碼
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            # 使用環(huán)境變量設置MySQL的時區(qū)
            TZ: Asia/Shanghai
        ports:
            - ${MASTER_PORT}:3306
        volumes:
            - ${MYSQL_HOME}/master/data:/var/lib/mysql
            - ${MYSQL_HOME}/master/etc/conf.d:/etc/mysql/conf.d
        command: 
            # 設置忽略大小寫
            - --lower_case_table_names=1
            # 設置默認字符集
            - --character-set-server=utf8mb4
            - --collation-server=utf8mb4_general_ci
            # 設置最大接收的數(shù)據(jù)包
            - --max_allowed_packet=128M
    slave1: 
        restart: always 
        image: ${MYSQL_VERSION}
        container_name: ${SLAVE1}
        environment: 
            # root密碼
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            # 使用環(huán)境變量設置MySQL的時區(qū)
            TZ: Asia/Shanghai
        links: 
            - ${MASTER}
        ports:
            - ${SLAVE1_PORT}:3306
        volumes:
            - ${MYSQL_HOME}/slave1/data:/var/lib/mysql
            - ${MYSQL_HOME}/slave1/etc/conf.d:/etc/mysql/conf.d
        command: 
            # 設置忽略大小寫
            - --lower_case_table_names=1
            # 設置默認字符集
            - --character-set-server=utf8mb4
            - --collation-server=utf8mb4_general_ci
            # 設置最大接收的數(shù)據(jù)包
            - --max_allowed_packet=128M
    slave2: 
        restart: always 
        image: ${MYSQL_VERSION}
        container_name: ${SLAVE2}
        environment: 
            # root密碼
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            # 使用環(huán)境變量設置MySQL的時區(qū)
            TZ: Asia/Shanghai
        links: 
            - ${MASTER}
        ports:
            - ${SLAVE2_PORT}:3306
        volumes:
            - ${MYSQL_HOME}/slave2/data:/var/lib/mysql
            - ${MYSQL_HOME}/slave2/etc/conf.d:/etc/mysql/conf.d
        command: 
            # 設置忽略大小寫
            - --lower_case_table_names=1
            # 設置默認字符集
            - --character-set-server=utf8mb4
            - --collation-server=utf8mb4_general_ci
            # 設置最大接收的數(shù)據(jù)包
            - --max_allowed_packet=128M

docker-compose.yml文件中践盼,定義了3個MySQL容器鸦采,其中2個slave容器使用links關聯(lián)了master容器,這樣可以在后續(xù)的操作中使用master主機名代替其ip地址宏侍。

在上面的配置文件赖淤,我們使用volumes選項將容器中的目錄掛載到本地。每個節(jié)點都有2個目錄谅河,分別是:

  • data目錄咱旱,映射容器中/var/lib/mysql目錄,用于存儲MySQL實例
  • etc/conf.d 目錄绷耍,映射容器中/etc/mysql/conf.d目錄吐限,用于存儲MySQL的配置文件

1.2 設置MySQL配置文件

既然知道了MySQL的配置文件存放的地方,那么我們就可以設置MySQL的配置褂始,讓其開啟主從模塊诸典。首先設置master的配置文件,在master目錄下創(chuàng)建etc/conf.d目錄崎苗。

# 創(chuàng)建conf.d目錄
mkdir -p master/etc/conf.d

# 編輯my.cnf配置文件
vim master/etc/conf.d/my.cnf

#my.cnf 內(nèi)容

[mysqld]
# 主服務器唯一ID
server-id=1
# 啟用binlog日志
log-bin=mysql-bin
# 要復制的數(shù)據(jù)庫,這里的數(shù)據(jù)庫名為testdb,如果有多個庫狐粱,可以設置多個binlog-do-db項
binlog-do-db=testdb
# 不需要復制的數(shù)據(jù)庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

在master的配置文件中,我們設置的要復制的數(shù)據(jù)庫名為testdb胆数,其他需要注意的是肌蜻,在MySQL集群中server-id不能重復,這里我們將master的server-id設置為1(后面的slave1設置為2必尼,slave2設置為3)蒋搜。

slave1的my.cnf文件在slave1/etc/conf.d目錄中(需要自己創(chuàng)建)篡撵,配置如下:

[mysqld]
# 主服務器唯一ID
server-id=2

同理,slave2節(jié)點的my.cnf如下:

[mysqld]
# 主服務器唯一ID
server-id=3

1.3 運行MySQL容器

通過上面的配置豆挽,我們就可以通過docker-compose 啟動MySQL容器了育谬,不過,在啟動之前帮哈,我們先來看看目錄的結構:

?  mysql tree -a .
.
├── .env                                    # docker-compose 環(huán)境變量文件
├── docker-compose.yml      # docker-compose 配置文件
├── master
│   └── etc
│       └── conf.d
│           └── my.cnf      # mysql配置文件
├── slave1
│   └── etc
│       └── conf.d
│           └── my.cnf      # mysql配置文件
└── slave2
    └── etc
        └── conf.d
            └── my.cnf      # mysql配置文件

9 directories, 5 files

在mysql根目錄中執(zhí)行如下語句膛檀,docker-compose會在當前目錄中讀取.evndocker-compose.yml文件來啟動docker容器。

?  mysql docker-compose up -d
Creating network "mysql_default" with the default driver
Creating master ... done
Creating slave1 ... done
Creating slave2 ... done

docker-compose up 命令是啟動容器但汞,-d選項表示后臺運行容器宿刮,如果要關閉容器使用docker-compose down命令互站。使用tree命令查看目錄結構

?  mysql tree -adL 2 .
.
├── master
│   ├── data        # 數(shù)據(jù)庫掛載點
│   └── etc
├── slave1
│   ├── data        # 數(shù)據(jù)庫掛載點
│   └── etc
└── slave2
    ├── data        # 數(shù)據(jù)庫掛載點
    └── etc

9 directories

可以看到目錄中多了一個data目錄私蕾,該目錄是我們在配置文件中通過volumes選項映射出來的容器卷,它將容器中的數(shù)據(jù)庫文件保存在本地目錄胡桃,避免容器銷毀后踩叭,數(shù)據(jù)也跟著銷毀。

1.4 初始化MySQL集群

現(xiàn)在翠胰,容器已經(jīng)啟動了容贝。之前我們在my.cnf配置中做了一部分集群的設置,但僅僅設置集群中的每個節(jié)點id之景,并開啟了master主機的binary log日志斤富。我們還需要解決的是:

  • master節(jié)點允許什么用戶復制哪些數(shù)據(jù)庫
  • slave節(jié)點通過什么用戶到哪里去復制數(shù)據(jù)庫

登錄master節(jié)點,使用grant語句锻狗,將所有數(shù)據(jù)庫的所有對象的replication slave 權限满力,授權給slave用戶,并且slave用戶可以使用網(wǎng)絡地址訪問轻纪,其密碼是123456油额。

mysql> grant replication slave on *.* to 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

查看master狀態(tài):

mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000003 |      430 | testdb       | mysql,information_schema |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

記住文件FilePosition參數(shù)的值,F(xiàn)ile參數(shù)是binlog日志的文件刻帚,也是slave要拷貝的文件潦嘶。position代表要slave拷貝的起點,如果在maste上執(zhí)行SQL語句崇众,Position的值會發(fā)生變化掂僵,所以確定了position后,先暫時不要操作master顷歌。

登錄slave節(jié)點锰蓬,使用如下語句配置slave節(jié)點的連接信息,包括登錄master的用戶名衙吩、密碼互妓、端口信息,以及剛剛在master上查詢的file和position參數(shù)。

change master to master_host='master',
 master_user='slave', 
 master_password='123456',
 master_port=3306,
 master_log_file='mysql-bin.000003',
 master_log_pos= 430,
 master_connect_retry=30;

因為在docker-compose.yml中使用了link冯勉,所以這里的master_host 參數(shù)使用的是master的主機名澈蚌。查看slave狀態(tài):

mysql> show slave status \G;
*************************** 1. row ***************************
         Slave_IO_State: 
            Master_Host: master
            Master_User: slave
            Master_Port: 3306
          Connect_Retry: 30
        Master_Log_File: mysql-bin.000003
    Read_Master_Log_Pos: 430
         Relay_Log_File: 9e185c56ef5e-relay-bin.000001
          Relay_Log_Pos: 4
  Relay_Master_Log_File: mysql-bin.000003
       Slave_IO_Running: No
      Slave_SQL_Running: No
  ...

我們僅僅是設置了連接信息,還沒有啟動slave灼狰,所以可以看到Slave_IO_RunningSlave_SQL_Running兩個線程都是No狀態(tài)宛瞄。執(zhí)行start slave語句:

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

啟動slave后,Slave_IO_RunningSlave_SQL_Running兩個線程都是Yes狀態(tài)交胚。

到此份汗,MySQL集群已搭建完成。Master創(chuàng)建testdb庫后蝴簇,slave會同步該庫杯活。

2 搭建MyCAT中間件

Mycat是使用Java語言進行編寫開發(fā),使用前需要先安裝Java運行環(huán)境(JRE),由于Mycat中使用了jdk7中的一些特性熬词,所以要求必須在JDK7以上的版本上運行旁钧。

使用Mycat可以:

  • 數(shù)據(jù)庫分片(垂直和水平)
  • 讀寫分離

本文只涉及到讀寫分離特性,更多的內(nèi)容可參考MyCAT官網(wǎng) 互拾。

2.1 目錄準備

在mysql目下創(chuàng)建一個mycat目錄歪今,作為mycat節(jié)點的根目錄,用于存放Mycat配置和日志等數(shù)據(jù)颜矿。我們使用DockerFile文件生成Mycat鏡像寄猩,所以需要創(chuàng)建Dockerfile文件。同時骑疆,到Mycat官網(wǎng)下載Mycat安裝包(這里重命名為Mycat.tar.gz)田篇,地址如下:

http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

目錄結構如下:

?  mycat tree -L 1 
.
├── Dockerfile          # dockerfile 文件
└── mycat.tar.gz    # mycat 安裝包

因為后面啟動mycat容器時,我們需要將mycat的配置文件目錄conf作為數(shù)據(jù)卷掛載到容器中封断,所以這里需要先將mycat安裝包解壓斯辰,并復制配置文件目錄。

# 解壓mycat.tar.gz坡疼,解壓后的目錄為mycat
?  mycat tar -zxf mycat.tar.gz 

# 移動mycat/conf目錄到根目錄的conf
?  mycat mv mycat/conf conf

# 刪除mycat目錄
?  mycat rm -rf mycat

創(chuàng)建一個logs目錄彬呻,用于存放mycat日志。

?  mycat mkdir logs

目錄完成后柄瑰,結構如下:

?  mycat tree -L 1
.
├── Dockerfile          # dockerfile文件
├── conf                        # mycat配置文件目錄
├── logs                        # mycat日志目錄
└── mycat.tar.gz        # mycat安裝包

2.2 制作Dockerfile文件

編輯Dockerfile文件闸氮,內(nèi)容如下

FROM openjdk:8

ADD ./mycat.tar.gz /usr/local/
ENV MYCAT_HOME=/usr/local/mycat
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console","&"]

使用openjdk:8作為基礎鏡像,將mycat根目錄的安裝文件添加到鏡像的/usr/local目錄下教沾,因為使用了ADD命令蒲跨,壓縮包會自動解壓,設置環(huán)境變量MYCAT_HOME授翻,暴露端口8066和9066或悲,8066是客戶端使用端口孙咪,9066為mycat管理端口。默認提供一個啟動命令巡语,使用 console選項運行在前臺翎蹈,保證容器啟動后不會被退出。

2.3 配置Mycat

在mycat的配置在conf目錄下:

  • server.xml 配置文件包含了mycat服務器參數(shù)男公,以及用戶授權信息
  • schema.xml 配置文件包含荤堪,邏輯庫、邏輯表以及分片的定義
  • rule.xml 配置文件包含枢赔,分片規(guī)則的配置

2.3.1 配置schema.xml

配置mycat/conf/schema.xml文件:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1" >
  </schema>
    <dataNode name="dn1" dataHost="localhost1" database="testdb" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="master:3306" user="root" password="123456" >
            <readHost host="hostS1" url="slave1:3306" user="root" password="123456" />
            <readHost host="hostS2" url="slave2:3306" user="root" password="123456" />
        </writeHost>
    </dataHost>
</mycat:schema>

以上是schema的配置澄阳,更多配置可以參考官網(wǎng)mycat權威指南第7章。

schema標簽定義邏輯庫

schema 標簽用于定義 MyCat 實例中的邏輯庫

  • name屬性為邏輯庫取名踏拜,這里為TESTDB
  • checkSQLschema 屬性表示是否會去掉sql語句的schema前綴
  • sqlMaxLimit 屬性碎赢,當sql語句沒有設置limit時,會默認加上 limit 100执隧,防止查詢過多的結果
  • dataNode 屬性用于指定邏輯庫要綁定到那個dataNode數(shù)據(jù)節(jié)點上揩抡。值為dataNode的name户侥,一個邏輯庫只能綁定到一個數(shù)據(jù)節(jié)點上镀琉。

schema邏輯庫標簽中還可以定義邏輯表table標簽,一個邏輯表可以指定多個數(shù)據(jù)節(jié)點蕊唐,這里沒有配置屋摔。

dataNode標簽定義數(shù)據(jù)節(jié)點

數(shù)據(jù)節(jié)點就是一個數(shù)據(jù)分片,dataNode主要是向schema標簽和table標簽提供引用替梨。dataNode數(shù)據(jù)節(jié)點共3個屬性:

  • name 屬性钓试,為數(shù)據(jù)節(jié)點提供一個名字,方便schema和table引用副瀑。
  • dataHost屬性弓熏,表示該數(shù)據(jù)節(jié)點對應的dataHost數(shù)據(jù)主機標簽,值為dataHost標簽的name屬性
  • database屬性糠睡,指定到MySQL實例的具體數(shù)據(jù)庫上挽鞠,因為前面我們在搭建MySQL集群時,使用的是testdb數(shù)據(jù)庫狈孔,所以這里的值為testdb信认。

dataHost標簽定義數(shù)據(jù)主機

dataHost代表多個MySQL實例的集合,這些數(shù)據(jù)庫實例包括寫主機(master均抽,定義在writeHost上)和讀主機(slave嫁赏,定義在readHost上)。

  • name 屬性油挥,指定數(shù)據(jù)主機的名稱潦蝇,方便dataNode引用款熬。
  • maxCon MySQL實例連接池的最大連接數(shù)
  • minCon MySQL實例連接池的最小連接數(shù)
  • balance 屬性表示負載均衡的類型
    • balance = "0" 不開啟讀寫分離,所有的讀寫操作都發(fā)到送寫主機上
    • balance = "1" 開啟讀寫分離(常用)攘乒,所有寫操作都發(fā)送給第一個寫主機上(如果定義了多個寫主機华烟,后備寫主機 stand by writeHost),所有的讀操作通過負載均衡分配到其他主機持灰,即所有的readHost和后備寫主機盔夜。
    • balance = "2" 開啟讀寫分離,所有寫操作都發(fā)送到寫主機上堤魁,讀操作隨機到所有主機上喂链。也就是說,寫主機也要承擔讀的任務妥泉。
    • balance = "3" 開啟讀寫分離椭微,讀操作隨機到讀主機上。
  • writeType 屬性盲链,表示寫主機的類型
    • writeType="0" 所有寫操作發(fā)送到配置的第一個 writeHost蝇率,第一個掛了切到還生存的第二個 writeHost, 重新啟動后以切換后的為準刽沾。
    • writeType="1" 所有寫操作都隨機的發(fā)送到配置的 writeHost(已廢棄)
  • switchType 屬性本慕,寫主機切換方式
    • -1 表示不自動切換。
    • 1 默認值侧漓,自動切換锅尘。
    • 2 基于 MySQL 主從同步的狀態(tài)決定是否切換。

heartbeat標簽定義心跳檢測

這個標簽內(nèi)指明用于和后端數(shù)據(jù)庫進行心跳檢查的語句布蔗。例如,MYSQL 可以使用 select user()藤违,Oracle 可以 使用 select 1 from dual 等。

writeHost 標簽定義寫主機

  • host 屬性纵揍,定義寫主機名稱顿乒,一般Master主機名為為*M1,讀主機命名*S1
  • url 屬性泽谨,后端實例連接地址璧榄,如果是使用 native 的 dbDriver,則一般為 address:port 這種形式隔盛。用 JDBC 或其他的 dbDriver犹菱,則需要特殊指定。當使用 JDBC 時則可以這么寫:jdbc:mysql://localhost:3306/吮炕。因為這里我們使用docker-compose啟動Mycat容器,所以地址可以用主機名代理龙亲,這里master:3306 表示master數(shù)據(jù)庫容器陕凹。
  • userpassword 是數(shù)據(jù)庫實例的用戶名密碼驾孔。

readHost標簽定義讀主機盗痒,其屬性與writeHost標簽相同,需要注意的是,readHost是包裹在writeHost標簽內(nèi)蹦玫。

2.3.2 配置server.xml

server.xml 保存了所有 mycat 需要的系統(tǒng)配置信息阻肿,這里我們只關系user標簽摸吠。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    
  <!--上面的內(nèi)容省略-->
  
    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</property>
        <property name="defaultSchema">TESTDB</property>
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
        <property name="defaultSchema">TESTDB</property>
    </user>
</mycat:server>

默認情況寸痢,mycat為我們創(chuàng)建了兩個用戶紊选,root和user,root的密碼為123456。shecma屬性表示該用戶能夠操作的邏輯數(shù)據(jù)庫趣些,對應的是schema.xml的schema標簽中的name值仿荆,這里是TESTDB。如果有多個數(shù)據(jù)庫坏平,這里需要配置多個schema屬性。

2.4 修改docker-compose配置文件

回到mysql目錄锦亦,編輯 .env 環(huán)境變量文件舶替,添加mycat根目錄以方面docker-compose.yml文件調(diào)用

# 在.env 文件中添加MYCAT_HOME變量,指定mycat的家目錄

# mycat 配置
MYCAT_HOME=/Users/zebra/docker/mysql/mycat

編輯 docker-compose.yml 配置文件

version: '3'

services: 
  master: ...
  slave1: ...
  slave2: ...
  mycat:
    restart: always
    build: ./mycat
    image: mycat:v1
    container_name: mycat
    links: 
        - ${MASTER}
        - ${SLAVE1}
        - ${SLAVE2}
    ports:
        - 8066:8066
        - 9066:9066
    volumes: 
        - ${MYCAT_HOME}/conf:/usr/local/mycat/conf
        - ${MYCAT_HOME}/logs:/usr/local/mycat/logs

在services中杠园,增加mycat節(jié)點顾瞪,build選項指定Dockerfile文件地址,這里使用相對路徑抛蚁,表示在當前yml配置文件目錄中的mycat目錄里陈醒。image為構建后的鏡像名稱(如果沒有改鏡像就構建,有就直接調(diào)用該鏡像)瞧甩。links選項表示mycat容器需要連接master钉跷,slave1和slave2容器(前面我們在mycat的schema.xml的配置中使用到了這些容器)。volumes 將本地數(shù)據(jù)卷掛載到容器中肚逸,這里掛載了配置目錄和日志目錄爷辙。

3 啟動MySQL集群

現(xiàn)在彬坏,已經(jīng)配置好了Mycat,我們使用docker-compose up -d 啟動所有容器膝晾。如果之前啟動過栓始,使用docker-compose down 停止后在啟動。

?  mysql docker-compose up -d
Creating network "mysql_default" with the default driver
Building mycat
Step 1/5 : FROM openjdk:8
 ---> b190ad78b520
Step 2/5 : ADD ./mycat.tar.gz /usr/local/
 ---> 7561bd31c7c9
Step 3/5 : ENV MYCAT_HOME=/usr/local/mycat
 ---> Running in a6ed86e20223
Removing intermediate container a6ed86e20223
 ---> 2aa61a702465
Step 4/5 : EXPOSE 8066 9066
 ---> Running in 164d908610bb
Removing intermediate container 164d908610bb
 ---> ee971db034c9
Step 5/5 : CMD ["/usr/local/mycat/bin/mycat", "console","&"]
 ---> Running in 2518532eaa00
Removing intermediate container 2518532eaa00
 ---> 03b97ffc1ad2
Successfully built 03b97ffc1ad2
Successfully tagged mycat:v1
WARNING: Image for service mycat was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating master ... done
Creating slave1 ... done
Creating slave2 ... done
Creating mycat  ... done

可以看到血当,在啟動時幻赚,因為本地沒有 mycat:v1 的鏡像,所以臊旭,compose會先構建該鏡像坯屿。如果mycat的鏡像已存在,docker-compose會直接使用該鏡像巍扛,如果修改了進行的Dockerfile文件领跛,可以使用docker-compose build 重新構建,或在啟動時撤奸,通過--build選項重新構建吠昭。

外部程序可以通過8066端口連接Mycat中間件的邏輯庫TESBD。

4 添加phpmyadmin應用

docker-compose.yml中添加phpmyadmin應用

version: '3'

services: 
  master: ...
  slave1: ...
  slave2: ...
  mycat: ...
  phpmyadmin:
    restart: always
    image: phpmyadmin/phpmyadmin:5.0
    container_name: myadmin
    links: 
        - master
    ports: 
        - 7500:80
    environment: 
        PMA_PORT: 3306
        PMA_HOST: master

phpmyadmin使用5.0target胧瓜,連接master容器矢棚,并80端口與宿主機的7500端口相連接。這里需要注意的是府喳,phpmyadmin如果直接連接mycat中間件蒲肋,不能正常工作,需要連接mysql容器钝满。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兜粘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弯蚜,更是在濱河造成了極大的恐慌孔轴,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎捺,死亡現(xiàn)場離奇詭異路鹰,居然都是意外死亡,警方通過查閱死者的電腦和手機收厨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門晋柱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诵叁,你說我怎么就攤上這事雁竞。” “怎么了黎休?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵浓领,是天一觀的道長玉凯。 經(jīng)常有香客問我,道長联贩,這世上最難降的妖魔是什么漫仆? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮泪幌,結果婚禮上盲厌,老公的妹妹穿的比我還像新娘。我一直安慰自己祸泪,他們只是感情好吗浩,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著没隘,像睡著了一般懂扼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上右蒲,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天阀湿,我揣著相機與錄音,去河邊找鬼瑰妄。 笑死陷嘴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的间坐。 我是一名探鬼主播灾挨,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竹宋!你這毒婦竟也來了劳澄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逝撬,失蹤者是張志新(化名)和其女友劉穎浴骂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宪潮,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年趣苏,在試婚紗的時候發(fā)現(xiàn)自己被綠了狡相。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡食磕,死狀恐怖尽棕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彬伦,我是刑警寧澤滔悉,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布伊诵,位于F島的核電站,受9級特大地震影響回官,放射性物質發(fā)生泄漏曹宴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一歉提、第九天 我趴在偏房一處隱蔽的房頂上張望笛坦。 院中可真熱鬧,春花似錦苔巨、人聲如沸版扩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礁芦。三九已至,卻和暖如春悼尾,著一層夾襖步出監(jiān)牢的瞬間柿扣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工诀豁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窄刘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓舷胜,卻偏偏與公主長得像娩践,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烹骨,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359