无法在Windows 10上初始化MySQL数据库

Sau*_*nam 11 mysql docker laradock

使用Laradock

系统信息:

  • Docker版本:17.10.0-ce,构建f4ffd25
  • 操作系统:Windows 10 Home

当我跑步时,docker-compose up -d mysql我得到了错误.以下是docker日志

[注意]基础设置为/ usr /

[警告]语法'--symbolic-links/-s'已弃用,将在以后的版本中删除

[警告]'NO_ZERO_DATE','NO_ZERO_IN_DATE'和'ERROR_FOR_DIVISION_BY_ZERO'sql模式应该与严格模式一起使用.它们将在未来版本中与严格模式合并.

[错误] - 指定了初始化但数据目录中包含文件.中止.

[错误]中止

我尝试删除mysql文件夹下~/.laradock\data,但没有工作.

更新1

laradock Dockerfile下的MySQL容器

mysql:
  build:
    context: ./mysql
    args:
      - MYSQL_VERSION=${MYSQL_VERSION}
  environment:
    - MYSQL_DATABASE=${MYSQL_DATABASE}
    - MYSQL_USER=${MYSQL_USER}
    - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    - TZ=${WORKSPACE_TIMEZONE}
  volumes:
    - ${DATA_SAVE_PATH}/mysql:/var/lib/mysql
    - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
  ports:
    - "${MYSQL_PORT}:3306"
  networks:
    - backend
Run Code Online (Sandbox Code Playgroud)

MySQL Dockerfile

ARG MYSQL_VERSION=8.0
FROM mysql:${MYSQL_VERSION}

MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>

#####################################
# Set Timezone
#####################################

ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN chown -R mysql:root /var/lib/mysql/

ADD my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]

EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)

更新2

我删除mysql文件夹后,~/.laradock/data我得到以下错误.在命令之后,它生成下图中的文件.当我重新运行回复上面提到的上一个错误时.

[注意]基础设置为/ usr/

[警告]语法'--symbolic-links/-s'已弃用,将在以后的版本中删除

[警告]'NO_ZERO_DATE','NO_ZERO_IN_DATE'和'ERROR_FOR_DIVISION_BY_ZERO'sql模式应该与严格模式一起使用.它们将在未来版本中与严格模式合并.

[警告]设置lower_case_table_names = 2,因为/ var/lib/mysql /的文件系统不区分大小写

[警告]您需要使用--log-bin使--log-slave-updates工作.

libnuma:警告:/ sys未挂载或无效.假设有一个节点:没有这样的文件或目录mbind:不允许操作

[错误] InnoDB:文件操作中的操作系统错误号22.

[错误] InnoDB:错误号22表示"无效参数"

[错误] InnoDB:文件./ib_logfile101:'aio write'返回操作系统错误122.无法继续操作

[错误] InnoDB:无法继续运行.

在此输入图像描述

**我尝试在Windows 7机器上工作.

And*_*ewD 24

禁用AIO

当我从Virtualbox的来宾Debian OS启动容器并在Windows 10上的共享文件夹上创建数据库文件时,当我收到AIO错误时,这就解决了这个问题.

问题似乎是共享文件夹或至少某些版本的Windows不支持AIO.在我的主机崩溃之后,从Windows 10 Pro转移到Home后,似乎已经发生了这种情况.

详情如下:

以下是一些选项:

选项1 - 像这样启动容器:

docker run -it mysql --innodb_use_native_aio=0
Run Code Online (Sandbox Code Playgroud)

选项2 - 将命令添加到docker-compose文件中:

 command: --innodb_use_native_aio=0
Run Code Online (Sandbox Code Playgroud)

在上下文中,这是我工作的docker-compose.yml的相关部分:

services:
   db:
     image: ${MYSQL_IMAGE}
     command: "--innodb_use_native_aio=0"
     volumes:
       - ${DB_DATA_PATH}:/var/lib/mysql
     ports:
        - ${MYSQL_PORT}:3306
Run Code Online (Sandbox Code Playgroud)

选项3 - 在您的构建中为my.cnf文件添加一个选项

innodb_use_native_aio=0
Run Code Online (Sandbox Code Playgroud)

选项4 - 不要将数据库保留在本地文件系统上.(可以破坏您的数据库,不推荐)

只需删除包含mysql db的docker配置中的卷.当然,如果您使用docker-compose down或以其他方式销毁容器,您的数据库将被删除,所以就是这样.