1. 需求场景
在开发和测试环境中,或者研究型的环境,对于数据库的安全和稳定性可以稍低一些,那么我们可以通过docker快速部署MySQL服务,降低部署的时间成本。
2. 脚本
- 2.1 目录结构和文件说明
├── conf
│ └── my.cnf # MySQL配置文件
├── db # 数据库数据文件目录
├── docker-compose.yml # docker-compose.yml文件
└── logs # 日志存放目录
- 2.2 docker-compose.yml
version: '3'
services:
mysql:
restart: always
privileged: true
image: mysql:8.0
container_name: mysqlServer33106
volumes:
- ./db:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/logs
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: "Abc123654"
MYSQL_USER: "test"
MYSQL_PASSWORD: "Abc123654"
MYSQL_INITDB_SKIP_TZINFO: "Asia/Shanghai"
ports:
- 33106:3306
network_mode: "bridge"
- 2.3 my.cnf
###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# MySQL8 的密码认证插件
default_authentication_plugin=mysql_native_password
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 允许最大连接数
max_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0
max_allowed_packet=16M
# 设置时区
default-time_zone='+8:00'
# binlog 配置
log-bin = /logs/mysql-bin.log
expire-logs-days = 90
max-binlog-size = 500M
# server-id 配置
server-id = 1
###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
- 2.4 启动容器
启动容器(守护进程):docker-compose up -d
查看容器:docker-compose ps
重启容器:docker-compose restart
清理容器:docker-compose down
注意的坑!!!
第一次启动容器时候的账号密码,会记录在 ./db 目录下,所以当你想要在相同的目录下启动新容器(并设置了新密码),务必将./db 下所有文件删除掉,这样才能用docker-compose.yml中新密码连接数据库。
3. 总结
容器化部署MySQL建议仅用于RD或者开发和测试环境,对于相对重要的数据做好数据备份。生产中可以用公有云的RDS实例,或者在宿主机上部署。
原文链接:https://blog.csdn.net/oschina_41731918/article/details/122837753
标签:8.0,compose,容器,MySQL,mysql,######,docker From: https://www.cnblogs.com/zhouXX/p/16795526.html