docker初始化mysql數據及數據持久化


1.初始化默認數據

原理

當Mysql容器首次啟動時,會在 /docker-entrypoint-initdb.d/目錄下掃描 .sh、.sql、.sql.gz類型的文件。如果這些類型的文件存在,將執行它們來初始化一個數據庫。這些文件會按照字母的順序執行。默認情況下它們會初始化在啟動容器時聲明的 MYSQL_DATABASE變量定義的數據庫中,例如下面的命令會初始化一個REGION_DB 數據庫:
  docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag
如果你的啟動命令沒有指定數據庫那么就必須在數據庫DDL腳本中聲明並指定使用該數據庫。否則就會實現下面的異常:
  ERROR 1046 (3D000) at line 7: No database selected

 

操作

我們經常會在mysql容器啟動時,需要初始化一些數據庫、數據表或者其他默認數據。其實mysql早已支持我們這種需求,具體方案如下:

# 其實主要的做法就是重新build mysql鏡像

# 新建Dockerfile
FROM mysql:5.7
COPY sql/*.sql /docker-entrypoint-initdb.d/

# gantt.sql文件
create database `gantt` default character set utf8 collate utf8_general_ci;

# build鏡像(tag需要更新為自己需要鏡像tag)
docker build -t tag .

2.mysql數據持久化

數據持久化主要是將mysql中的數據內容映射到宿主機,從而保證數據的可以永久保存(down - v 后數據依然在),如果需要完全遷移數據,則需要將映射在宿主機的文件一並遷移。docker-compose.yml文件配置如下:

version: '2.3'
services:
  schedule-mysql:
    image: hub.infervision.com/dev/viewer-collection:schedule-mysql-5.7
    restart: always
    ports:
      - 3311:3306
    volumes:
      - ./mysql_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=gantt
      - MYSQL_PASSWORD=gantt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM