Son aktivite 9 months ago

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

timmy bu gisti düzenledi 9 months ago. Düzenlemeye git

1 file changed, 12 insertions

mysql_show_variables.sql(dosya oluşturuldu)

@@ -0,0 +1,12 @@
1 + SHOW VARIABLES
2 + WHERE Variable_name IN (
3 + 'max_connections',
4 + 'table_open_cache',
5 + 'innodb_buffer_pool_size',
6 + 'innodb_redo_log_capacity',
7 + 'innodb_flush_log_at_trx_commit',
8 + 'sync_binlog',
9 + 'log_bin_trust_function_creators',
10 + 'authentication_policy',
11 + 'skip_name_resolve'
12 + );

timmy bu gisti düzenledi 9 months ago. Düzenlemeye git

1 file changed, 19 insertions, 2 deletions

my.cnf

@@ -1,12 +1,29 @@
1 1 # ./mysql_data/my.cnf
2 2
3 3 [mysqld]
4 + # 最大連線數:如果硬體夠強,可以考慮提高,不過 150 是個穩妥的選擇
4 5 max_connections = 150
5 - table_open_cache = 400
6 +
7 + # 表快取:如果資料表很多,可以稍微調高這個值,同時記得調整 open_files_limit
8 + table_open_cache = 500
9 +
10 + # InnoDB 緩衝池:建議設成可用記憶體的 70-80%,記憶體夠用的話可以再調高
6 11 innodb_buffer_pool_size = 512M
12 +
13 + # Redo 日誌容量:256M 對於寫入量中等或較高的環境通常夠用,如果寫入特別多可考慮調高
7 14 innodb_redo_log_capacity = 256M
15 +
16 + # 日誌同步:1 能確保資料安全(ACID),但效能會稍微受影響;如果可以接受風險,調成 2 也行
8 17 innodb_flush_log_at_trx_commit = 1
9 - sync_binlog = 0
18 +
19 + # binlog 同步:設成 1 可以確保 binlog 跟資料庫保持一致,除非追求極致效能,否則建議用 1
20 + sync_binlog = 1
21 +
22 + # 關於儲存過程和觸發器:這樣設定可以避免一些權限上的麻煩
10 23 log_bin_trust_function_creators = 1
24 +
25 + # 認證機制:為了相容舊版用戶端,用這個方式不錯,但長遠來看建議跟進預設設定
11 26 authentication_policy = 'mysql_native_password'
27 +
28 + # 關閉 DNS 解析:這樣可以讓連線更快些
12 29 skip-name-resolve

Timmy bu gisti düzenledi 9 months ago. Düzenlemeye git

5 files changed, 52 insertions

.env(dosya oluşturuldu)

@@ -0,0 +1,3 @@
1 + MYSQL_USER=user
2 + MYSQL_PASSWORD=password
3 + MYSQL_ROOT_PASSWORD=rootpassword

README.md(dosya oluşturuldu)

@@ -0,0 +1,16 @@
1 + | 變數 | 作用 | 預設值 |
2 + | --------------------- | ---------------- | -------------- |
3 + | `MYSQL_DATABASE` | 預設建立的資料庫 | `myapp` |
4 + | `MYSQL_USER` | 普通使用者帳號 | `user` |
5 + | `MYSQL_PASSWORD` | 普通使用者密碼 | `password` |
6 + | `MYSQL_ROOT_PASSWORD` | Root 使用者密碼 | `rootpassword` |
7 +
8 +
9 + ```bash
10 + docker exec -it mysql-container mysql -uroot -p
11 + ```
12 +
13 + ```sql
14 + SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
15 + SHOW VARIABLES LIKE 'max_connections';
16 + ```

docker-compose.yml(dosya oluşturuldu)

@@ -0,0 +1,15 @@
1 + services:
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

my.cnf(dosya oluşturuldu)

@@ -0,0 +1,12 @@
1 + # ./mysql_data/my.cnf
2 +
3 + [mysqld]
4 + max_connections = 150
5 + table_open_cache = 400
6 + innodb_buffer_pool_size = 512M
7 + innodb_redo_log_capacity = 256M
8 + innodb_flush_log_at_trx_commit = 1
9 + sync_binlog = 0
10 + log_bin_trust_function_creators = 1
11 + authentication_policy = 'mysql_native_password'
12 + skip-name-resolve

mysql_database_table_info.sql(dosya oluşturuldu)

@@ -0,0 +1,6 @@
1 + SELECT 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
5 + FROM INFORMATION_SCHEMA.TABLES
6 + ORDER BY DATABASE_NAME, SIZE_MB DESC;
Daha yeni Daha eski