用 Docker 為自己建立一個測試用 Mysql 資料庫


利用Mysql官方提供Sakila資料庫的schema以及data,來做一個Docker mysql server容器。

先下載sakila-db並解壓縮。

檔案結構:

.
└── sakila-db
    ├── sakila.mwb
    ├── sakila-data.sql
    └── sakila-schema.sql

建立一個檔案,叫作docker-compose.yml,裡面如下:

version: "3.9"
services:
  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: always
    tty: true
    environment:
      MYSQL_DATABASE: sakila
      MYSQL_ROOT_PASSWORD: root 
      MYSQL_USER: ${USER}
      MYSQL_PASSWORD: password
    ports: 
      - "3306:3306"
    volumes:
      - ./sakila-db:/docker-entrypoint-initdb.d

其中,

MYSQL_ROOT_PASSWORD : root的密碼,root擁有最高權限。

MYSQL_DATABASE : 資料庫名稱,選擇性的變數。

MYSQL_USER : 使用者名稱,選擇性的變數。對於 MYSQL_DATABASE 有最高權限。

MYSQL_PASSWORD : 使用者密碼

放進/docker-entrypoint-initdb.d的檔案會在container建立時,按照字母順序執行 .sh, .sql 以及 .sql.gz為副檔名的檔案。所以如果要執行sakila的腳本,volumes下面可以寫 ./sakila-db:/docker-entrypoint-initdb.d,只是裡面的檔名要改成schema會先執行的名稱。

目前的檔案結構:

.
├── docker-compose.yml
└── sakila-db
    ├── sakila.mwb
    ├── sakila-1-schema.sql
    └── sakila-2-data.sql

開始建置:

docker-compose up -d
docker exec -it mysql-db mysql -u ${USER} -p sakila

輸入完密碼後,應該能成功登入contianer 的 mysql

執行SHOW TABLES;後,會看到如下:

+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+

表示資料庫建立成功,現在可以開始使用資料。

docker  mysql  sql 

See also