Son aktivite 9 months ago

此 docker-compose.yml 配置 MySQL 8.0,透過環境變數管理使用者帳密,並使用 Volume 持久化資料庫資料,確保資料不因容器重啟而遺失。適用於開發及測試環境,可搭配 .env 檔案提升安全性。

Revizyon 300f4c801a0e248a354d66eedeba7b234dab5c5e

.env Ham
1MYSQL_USER=user
2MYSQL_PASSWORD=password
3MYSQL_ROOT_PASSWORD=rootpassword
README.md Ham
變數 作用 預設值
MYSQL_DATABASE 預設建立的資料庫 myapp
MYSQL_USER 普通使用者帳號 user
MYSQL_PASSWORD 普通使用者密碼 password
MYSQL_ROOT_PASSWORD Root 使用者密碼 rootpassword
docker exec -it mysql-container mysql -uroot -p
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'max_connections';
docker-compose.yml Ham
1services:
2 mysql:
3 container_name: mysql-container
4 image: mysql:8.0
5 ports:
6 - "3306:3306"
7 environment:
8 MYSQL_DATABASE: myapp
9 MYSQL_USER: ${MYSQL_USER}
10 MYSQL_PASSWORD: ${MYSQL_PASSWORD}
11 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
12 volumes:
13 - ./mysql_data:/var/lib/mysql
14 - ./mysql_data/my.cnf:/etc/mysql/my.cnf
15 restart: always
16
my.cnf Ham
1# ./mysql_data/my.cnf
2
3[mysqld]
4# 最大連線數:如果硬體夠強,可以考慮提高,不過 150 是個穩妥的選擇
5max_connections = 150
6
7# 表快取:如果資料表很多,可以稍微調高這個值,同時記得調整 open_files_limit
8table_open_cache = 500
9
10# InnoDB 緩衝池:建議設成可用記憶體的 70-80%,記憶體夠用的話可以再調高
11innodb_buffer_pool_size = 512M
12
13# Redo 日誌容量:256M 對於寫入量中等或較高的環境通常夠用,如果寫入特別多可考慮調高
14innodb_redo_log_capacity = 256M
15
16# 日誌同步:1 能確保資料安全(ACID),但效能會稍微受影響;如果可以接受風險,調成 2 也行
17innodb_flush_log_at_trx_commit = 1
18
19# binlog 同步:設成 1 可以確保 binlog 跟資料庫保持一致,除非追求極致效能,否則建議用 1
20sync_binlog = 1
21
22# 關於儲存過程和觸發器:這樣設定可以避免一些權限上的麻煩
23log_bin_trust_function_creators = 1
24
25# 認證機制:為了相容舊版用戶端,用這個方式不錯,但長遠來看建議跟進預設設定
26authentication_policy = 'mysql_native_password'
27
28# 關閉 DNS 解析:這樣可以讓連線更快些
29skip-name-resolve
30
mysql_database_table_info.sql Ham
1SELECT TABLE_SCHEMA AS DATABASE_NAME,
2 TABLE_NAME,
3 TABLE_ROWS AS RECORDS,
4 ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS SIZE_MB
5FROM INFORMATION_SCHEMA.TABLES
6ORDER BY DATABASE_NAME, SIZE_MB DESC;
7