【发布时间】:2020-02-19 16:16:00
【问题描述】:
我有一个 docker-compose.yml 和一个 MariaDB 数据库服务,看起来像这样:
version: '2'
services:
db:
container_name: misp_db
image: mariadb
restart: unless-stopped
volumes:
- ${DATA_DIR}/db:/var/lib/mysql
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
在启动容器时,我注意到以下错误:
[ERROR] Missing system table mysql.roles_mapping; please run mysql_upgrade to create it
[ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position 14 to have type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT'), found type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_B
[ERROR] mysqld: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
我可以通过运行 docker exec -it db /bin/bash 来获得一个 shell,然后运行 mysql_upgrade -p 并输入我配置的 MySQL root 密码来解决这个问题,但这应该是自动的。
如何在 Docker Compose 中执行此操作?
【问题讨论】:
-
你不想固定你的mysql版本吗?现在您总是在获取最新版本,如果确实有更改,则会导致错误。您可以编写一个 bash 脚本来检查升级作为 docker-compose 文件中的命令,但我认为固定版本是一个更明智的解决方案。如果某些应用程序依赖于某个版本的mariadb,它可能会由于版本更新而突然崩溃。
-
一个字符串,而不是数组:
SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,AN...'
标签: mysql docker docker-compose mariadb