1. 程式人生 > 其它 >docker初始化mysql資料及資料持久化

docker初始化mysql資料及資料持久化

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