Docker安裝mysql

mysql主從的機(jī)制主要是通過(guò)從服務(wù)器訂閱主服務(wù)器的binlog日志實(shí)現(xiàn)。
這里以一主雙從的形式演示。


image.png

解釋
這三個(gè)mysql創(chuàng)建一個(gè)docker的局域網(wǎng)用于通信使用,因?yàn)楦鱾€(gè)容器之間是互不影響的,所以他們的啟動(dòng)端口都可以是3306,對(duì)于宿主機(jī)映射的端口分別是6606,6607,6608

部署方案

1. 編寫docker-compose
version: '3.7'
services:
  mysql-master:
    image: mysql/mysql-server:5.7
    container_name: mysql_master
    ports:
    - 6606:3306
    volumes:
      - /volume/mysql-master:/var/lib/mysql
      - /volume/conf/mysql-ms/mysqld-master.cnf:/etc/my.cnf
    command:
      - "--user=root"
    environment:
      MYSQL_ROOT_PASSWORD: Yu20200416_
      MYSQL_DATABASE: spark
      MYSQL_USER: admin
      MYSQL_PASSWORD: Yu20200416_
    restart: unless-stopped
    networks:
      mysql-ms-network:
        ipv4_address: 172.25.0.101
 
  mysql-slave1:
    image: mysql/mysql-server:5.7
    container_name: mysql_slave1
    ports:
    - 6607:3306
    command:
      - "--user=root"
    volumes:
      - /volume/mysql-slave1:/var/lib/mysql
      - /volume/conf/mysql-ms/mysqld-slave1.cnf:/etc/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: Yu20200416_
      MYSQL_DATABASE: spark
      MYSQL_USER: admin
    restart: unless-stopped
    networks:
      mysql-ms-network:
        ipv4_address: 172.25.0.102
 
  mysql-slave2:
    image: mysql/mysql-server:5.7
    container_name: mysql_slave2
    ports:
      - 6608:3306
    command:
      - "--user=root"
    volumes:
      - /volume/mysql-slave2:/var/lib/mysql
      - /volume/conf/mysql-ms/mysqld-slave2.cnf:/etc/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: Yu20200416_
      MYSQL_DATABASE: spark
      MYSQL_USER: admin
    restart: unless-stopped
    networks:
      mysql-ms-network:
        ipv4_address: 172.25.0.103
 
networks:
  mysql-ms-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.25.0.0/24

2.準(zhǔn)備my.cnf文件

修改mysql-master.cnf

[mysqld]
#主數(shù)據(jù)庫(kù)端ID號(hào)
server_id = 1
#開啟二進(jìn)制日志                 
log-bin = mysql-bin
#需要復(fù)制的數(shù)據(jù)庫(kù)名,如果復(fù)制多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可                 
binlog-do-db = spark
#將從服務(wù)器從主服務(wù)器收到的更新記入到從服務(wù)器自己的二進(jìn)制日志文件中                
log-slave-updates
#控制binlog的寫入頻率。每執(zhí)行多少次事務(wù)寫入一次(這個(gè)參數(shù)性能消耗很大,但可減小MySQL崩潰造成的損失)
sync_binlog = 1
#這個(gè)參數(shù)一般用在主主同步中,用來(lái)錯(cuò)開自增值, 防止鍵值沖突
auto_increment_offset = 1
#這個(gè)參數(shù)一般用在主主同步中,用來(lái)錯(cuò)開自增值, 防止鍵值沖突
auto_increment_increment = 1
#二進(jìn)制日志自動(dòng)刪除的天數(shù),默認(rèn)值為0,表示“沒(méi)有自動(dòng)刪除”,啟動(dòng)時(shí)和二進(jìn)制日志循環(huán)時(shí)可能刪除 
expire_logs_days = 7
#將函數(shù)復(fù)制到slave 
log_bin_trust_function_creators = 1

mysqld-slave1.cnf

[mysqld]
# 從數(shù)據(jù)庫(kù)端ID號(hào)
server_id = 2
log-bin = mysql-bin
log-slave-updates
sync_binlog = 0
#log buffer將每秒一次地寫入log file中,并且log file的flush(刷到磁盤)操作同時(shí)進(jìn)行。該模式下在事務(wù)提交的時(shí)候,不會(huì)主動(dòng)觸發(fā)寫入磁盤的操作
innodb_flush_log_at_trx_commit = 0
#指定slave要復(fù)制哪個(gè)庫(kù)
replicate-do-db = spark
#MySQL主從復(fù)制的時(shí)候,當(dāng)Master和Slave之間的網(wǎng)絡(luò)中斷,但是Master和Slave無(wú)法察覺的情況下(比如防火墻或者路由問(wèn)題)。Slave會(huì)等待slave_net_timeout設(shè)置的秒數(shù)后,才能認(rèn)為網(wǎng)絡(luò)出現(xiàn)故障,然后才會(huì)重連并且追趕這段時(shí)間主庫(kù)的數(shù)據(jù)
slave-net-timeout = 60
log_bin_trust_function_creators = 1

3.啟動(dòng)mysql

將配置文件放置在指定目錄

因?yàn)槲覀兿雽ysql的my.cnf文件映射到宿主機(jī)上(否則docker會(huì)將映射的文件作為路徑處理導(dǎo)致報(bào)錯(cuò)),所以需要提前將準(zhǔn)備好的配置文件放置在我們約定的指定位置中(這里我約定的路徑為/volume/conf/mysql-ms/)

執(zhí)行docker-compose

第一次需要拉取mysql鏡像,執(zhí)行時(shí)間相對(duì)長(zhǎng)一點(diǎn)。

 docker-compose up -d
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容