docker compose 部署mysql数据库
快速参考
官方镜像说明:https://hub.docker.com/_/mysql
docker-compose.yml
version: "3" services: mysql: image: mysql:5.7 container_name: mysql hostname: mysql ports: - 3306:3306 volumes: - /home/mysql/data:/var/lib/mysql - /home/mysql/conf/my.cnf:/etc/my.cnf - /etc/localtime:/etc/localtime restart: on-failure logging: driver: "json-file" options: tag: mysql cap_add: - ALL environment: MYSQL_ROOT_PASSWORD: 'yourpasswd'
my.cnf
[mysqld] user=mysql default-storage-engine=INNODB character-set-server=utf8 character-set-client-handshake=FALSE collation-server=utf8_unicode_ci init_connect='SET NAMES utf8' [client] default-character-set=utf8 [mysql] default-character-set=utf8
环境变量说明:
环境变量
启动镜像时,您可以通过在命令行上传递一个或多个环境变量来调整 MySQL 实例的配置。请注意,如果使用已包含数据库的数据目录启动容器,则以下变量都不会产生任何影响:任何预先存在的数据库在容器启动时将始终保持不变。mysqldocker run另请参阅 https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html 以获取MySQL本身遵循的环境变量的文档(尤其是像,当与此图像一起使用时已知会导致问题的变量)。MYSQL_HOST
MYSQL_ROOT_PASSWORD
此变量是必需的,并指定将为MySQL超级用户帐户设置的密码。在上面的示例中,它被设置为 。rootmy-secret-pwMYSQL_DATABASE
此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于 GRANT ALL)。MYSQL_USER,MYSQL_PASSWORD
这些变量是可选的,与创建新用户和设置该用户的密码结合使用。此用户将被授予对变量指定的数据库的超级用户权限(见上文)。这两个变量都是创建用户所必需的。MYSQL_DATABASE请注意,没有必要使用此机制来创建根超级用户,默认情况下使用该变量指定的密码创建该用户。MYSQL_ROOT_PASSWORD
MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量。设置为非空值(如 ),以允许使用 root 用户的空白密码启动容器。注意:除非您真的知道自己在做什么,否则不建议将此变量设置为 ,因为这会使您的 MySQL 实例完全不受保护,从而允许任何人获得完整的超级用户访问权限。yes yesMYSQL_RANDOM_ROOT_PASSWORD
这是一个可选变量。设置为非空值,如 ,为 root 用户生成随机初始密码(使用 )。生成的根密码将打印到 stdout ()。yespwgenGENERATED ROOT PASSWORD: .....MYSQL_ONETIME_PASSWORD
初始化完成后,将 root(而不是 !中指定的用户)用户设置为已过期,强制在首次登录时更改密码。任何非空值都将激活此设置。
注意:此功能仅在MySQL 5.6 +上受支持。在MySQL 5.5上使用此选项将在初始化期间引发适当的错误。MYSQL_USERMYSQL_INITDB_SKIP_TZINFO
默认情况下,入口点脚本会自动加载函数所需的时区数据。如果不需要,任何非空值都会禁用时区加载。CONVERT_TZ()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通