mysql - Docker-compose / init.sql 没有正确执行
问题描述
我正在尝试通过 设置本地 MySQL 实例docker-compose
,它看起来像这样:
version: '3'
services:
database:
image: mysql:latest
ports:
- '3306:3306'
command: '--init-file /data/application/init.sql'
command: 'mysqld --default-authentication-plugin=mysql_native_password'
volumes:
- './init.sql:/data/application/init.sql'
- './data:/var/lib/mysql'
env_file:
- ./.env
expose:
- '3306'
# cap_add:
# - SYS_NICE
environment:
- MYSQL_ROOT_PASSW="${MYSQL_ROOT_PASSWORD}"
- MYSQL_DATABASE="${MYSQL_DATABASE}"
- MYSQL_USER="${MYSQL_USER}"
- MYSQL_ROOT_USER="${MYSQL_ROOT_USER}"
- MYSQL_PASSWORD="${MYSQL_PASSWORD}"
# network_mode: host
使用以下init.sql脚本,它应该负责创建数据库和设置表:
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS `listings`(
id INTEGER
,PRIMARY KEY (id)
);
容器被构建并正常启动:
Attaching to so-feed-parse_database_1
database_1 | 2019-12-12 14:58:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
database_1 | 2019-12-12 14:58:39+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
database_1 | 2019-12-12 14:58:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
database_1 | 2019-12-12 14:58:39+00:00 [Note] [Entrypoint]: Initializing database files
database_1 | 2019-12-12T14:58:39.976524Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
database_1 | 2019-12-12T14:58:39.976669Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.18) initializing of server in progress as process 46
database_1 | 2019-12-12T14:58:41.624212Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
database_1 | 2019-12-12 14:58:44+00:00 [Note] [Entrypoint]: Database files initialized
database_1 | 2019-12-12 14:58:44+00:00 [Note] [Entrypoint]: Starting temporary server
database_1 | 2019-12-12T14:58:44.542746Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
database_1 | 2019-12-12T14:58:44.542845Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.18) starting as process 95
database_1 | 2019-12-12T14:58:45.012478Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
database_1 | 2019-12-12T14:58:45.016362Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
database_1 | 2019-12-12T14:58:45.054899Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.18' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
database_1 | 2019-12-12 14:58:45+00:00 [Note] [Entrypoint]: Temporary server started.
database_1 | 2019-12-12T14:58:45.128416Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock'
database_1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
database_1 | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
database_1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
database_1 | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
database_1 | 2019-12-12 14:58:47+00:00 [Note] [Entrypoint]: Creating database "test"
database_1 | 2019-12-12 14:58:47+00:00 [Note] [Entrypoint]: Creating user "utest"
database_1 | 2019-12-12 14:58:47+00:00 [Note] [Entrypoint]: Giving user "utest" access to schema "test"
database_1 |
database_1 | 2019-12-12 14:58:47+00:00 [Note] [Entrypoint]: Stopping temporary server
database_1 | 2019-12-12T14:58:47.355373Z 14 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.18).
database_1 | 2019-12-12T14:58:49.162768Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.18) MySQL Community Server - GPL.
database_1 | 2019-12-12 14:58:49+00:00 [Note] [Entrypoint]: Temporary server stopped
database_1 |
database_1 | 2019-12-12 14:58:49+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
database_1 |
database_1 | 2019-12-12T14:58:49.662509Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
database_1 | 2019-12-12T14:58:49.662675Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.18) starting as process 1
database_1 | 2019-12-12T14:58:50.034163Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
database_1 | 2019-12-12T14:58:50.036925Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
database_1 | 2019-12-12T14:58:50.062397Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.18' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
database_1 | 2019-12-12T14:58:50.222174Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
现在,登录到服务器后,show databases;
给出以下输出(尝试use test;
输出unknown database
:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| "test" |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
手动执行初始化脚本就像一个魅力,不知道它是否可能取决于--init-file
命令。
编辑:这个问题中
的 OP遵循类似的方法,不使用command: '--init-file'
而是将 init.sql 文件安装在./init.sql:/docker-entrypoint-initdb.d/init.sql
. 重新洗牌后,我的 docker-compose.yml 围绕 db 现在已正确创建。我不太清楚为什么会发生这种情况......
解决方案
参考这里https://onexlab-io.medium.com/docker-compose-mysql-initdb-4c3388047dea
注意: mysql5.7 MYSQL_SERVICE_USER 如果设置 MYSQL_SERVICE_USER 为user
,则不会执行启动
推荐阅读
- java - 调用 Object.getClass() 本身是否使用反射?
- android - 我的应用程序在启动时崩溃(java.lang.RuntimeException:无法获取提供程序)
- r - Rmongo查询函数给出错误
- c# - WPF - 在调整纵横比时缩放以保持水平填充
- swift - 如何将用户添加到 Firebase 编号数组
- python - 打印开箱单
- python - 我如何从大量数据中提取特定的行集以查找统计操作。每组两边都加1?
- javascript - 在 App.js 和 routes.js 中使用 Route 的区别
- python - Matplotlib:如何减少轴标签的数量以使其更清晰?
- python - 在 keras 中将自动编码器与任何分类器一起使用的最佳方法