創(chuàng)建目錄結(jié)構(gòu)
目錄結(jié)構(gòu)如下
docker/docker-compose.yml
docker/mysql/data
docker/mysql/my.cnf
docker/redis/data
docker/redis/redis.conf
編寫 my.cnf 文件
[client]
port = 3306
socket = /var/lib/mysql/data/mysql.sock
[mysqld]
# 針對5.7版本執(zhí)行g(shù)roup by字句出錯問題解決
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 一般配置選項(xiàng)
basedir = /var/lib/mysql
datadir = /var/lib/mysql/data
port = 3306
socket = /var/lib/mysql/data/mysql.sock
lc-messages-dir = /usr/share/mysql # 務(wù)必配置此項(xiàng),否則執(zhí)行sql出錯時,只能顯示錯誤代碼而不顯示具體錯誤消息
character-set-server=utf8
back_log = 300
max_connections = 3000
max_connect_errors = 50
table_open_cache = 4096
max_allowed_packet = 32M
#binlog_cache_size = 4M
max_heap_table_size = 128M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
query_cache_size = 64M
query_cache_limit = 4M
ft_min_word_len = 8
thread_stack = 512K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
#log-bin=mysql-bin
long_query_time = 6
server_id=1
innodb_buffer_pool_size = 256M
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
編寫 redis.conf 文件
此處省略
編寫 docker-compose.yml 文件
version: '3'
services:
mysql:
hostname: mysql
image: mysql:5.7.26
# network_mode: "host" # 如果需要容器使用宿主機(jī)IP(內(nèi)網(wǎng)IP)状蜗,則可以配置此項(xiàng)
container_name: mysql # 指定容器名稱救拉,如果不設(shè)置此參數(shù),則由系統(tǒng)自動生成
restart: unless-stopped # 設(shè)置容器自啟模式
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 設(shè)置utf8字符集
environment:
- TZ=Asia/Shanghai # 設(shè)置容器時區(qū)與宿主機(jī)保持一致
- MYSQL_ROOT_PASSWORD=root # 設(shè)置root密碼
volumes:
- /etc/localtime:/etc/localtime:ro # 設(shè)置容器時區(qū)與宿主機(jī)保持一致
- ./mysql/data:/var/lib/mysql/data # 映射數(shù)據(jù)庫保存目錄到宿主機(jī),防止數(shù)據(jù)丟失
- ./mysql/my.cnf:/etc/mysql/my.cnf # 映射數(shù)據(jù)庫配置文件
ports:
- "3306:3306"
redis:
hostname: redis
image: redis:5.0.4
container_name: redis
restart: unless-stopped
command: redis-server /etc/redis.conf # 啟動redis命令
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro # 設(shè)置容器時區(qū)與宿主機(jī)保持一致
- ./redis/data:/data
- ./redis/redis.conf:/etc/redis.conf
ports:
- "6379:6379"
創(chuàng)建并啟動容器
如果文件名就叫做docker-compose.yml
則可以不適用-f
選項(xiàng)指定文件路勁,up
選項(xiàng)啟動容器,-d
選項(xiàng)以守護(hù)模式運(yùn)行
docker-compose -f docker-compose.yml up -d
如果要批量停止容器并清除容器盛霎,可以使用down
命令
docker-compose -f docker-compose.yml down
如果要重新構(gòu)建容器,可以使用--build
選項(xiàng)
docker-compose -f docker-compose.yml up --build -d
啟動成功后伸蚯,可使用以下命令查看容器運(yùn)行狀態(tài)
docker ps -a
如果啟動失敗摩渺,可以查看容器日志信息獲取幫助
docker logs 容器名詞或容器ID # 既docker-compose.yml文件參數(shù)container_name指定的值
mysql 執(zhí)行 group by 語句出錯
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'db_test.t.id'; this is incompatible with sql_mode=only_full_group_by