首页 > 解决方案 > MySQL Docker 容器中止 - [错误] [MY-011087]

问题描述

该容器由 Apache-PHP、MySQL、Nodejs 和 phpmyadmin DBMS 组成。在我的 docker-compose.yml 文件中,我设置了一个卷来保存 MySQL 数据库服务器的数据。如果您构建应用程序、创建数据库、添加数据等,一切正常。转动它,停止它。再次旋转,一切正常。

这是问题:

我在我的 Mac 机器上构建了一个应用程序,并附带了应用程序创建到 CRUD 的数据库/数据。我正在使用 GitHub 一个遥控器。当我在工作的(Windows)机器上拉下遥控器时,MySQL 数据库服务器无法启动。

dbServer      | 2021-04-22T14:07:58.964842Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.23) starting as process 1
dbServer      | 2021-04-22T14:07:58.985910Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
dbServer      | 2021-04-22T14:07:59.793149Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
dbServer      | 2021-04-22T14:07:59.810522Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('2').
dbServer      | 2021-04-22T14:07:59.810867Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
dbServer      | 2021-04-22T14:07:59.811096Z 0 [ERROR] [MY-010119] [Server] Aborting

其他 Mac 用户可以毫无问题地启动。我设法让它在 Windows 机器上工作的唯一方法是在推送时忽略数据量,但是当你拉动并启动容器时,你必须使用 SQL 脚本构建数据库结构。

这是 MySQL 容器的 docker-compose.yml 文件中的代码:

version: "3"

database:
    build:
      context: "./bin/${DATABASE}"
    container_name: '${DATABASE_HOST_NAME}'
    networks:
      - backend
    ports:
      - "127.0.0.1:${HOST_MACHINE_MYSQL_PORT}:3306"
    volumes: 
      - ${MYSQL_DATA_DIR}:/var/lib/mysql
      - ${MYSQL_LOG_DIR}:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

我已经尝试使服务器值lower_case_table_names = '2'匹配在 Mac 主机上创建的数据字典,但我假设由于容器是基于 Linux 的,它只是立即将服务器设置重置为“0”并失败。

有没有一种快速简便的方法来解决此问题,而无需备份/擦除所有内容并从头开始?

任何帮助表示赞赏。

标签: mysqldocker

解决方案


推荐阅读