一尘不染

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

docker

Using Laradock

System Info:

  • Docker版本:17.10.0-ce,构建f4ffd25
  • OS:Windows 10 Home

When I run docker-compose up -d mysql 遇到错误。以下是
docker日志

[Note] Basedir set to /usr/

[Warning] The syntax ‘–symbolic-links/-s’ is deprecated and will be removed
in a future release

[Warning] ‘NO_ZERO_DATE’, ‘NO_ZERO_IN_DATE’ and ‘ERROR_FOR_DIVISION_BY_ZERO’
sql modes should be used with strict mode. They will be merged with strict
mode in a future release.

[ERROR] –initialize specified but the data directory has files in it.
Aborting.

[ERROR] Aborting

I have tried deleting mysql folder under ~/.laradock\data and didn’t work.

Update 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

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

Update 2

After I delete mysql folder under ~/.laradock/data 出现以下错误。命令后,它将在下图中生成文件。当我重新运行时
,返回上面提到的先前的错误。

[Note] Basedir set to /usr/

[Warning] The syntax ‘–symbolic-links/-s’ is deprecated and will be removed
in a future release

[Warning] ‘NO_ZERO_DATE’, ‘NO_ZERO_IN_DATE’ and ‘ERROR_FOR_DIVISION_BY_ZERO’
sql modes should be used with strict mode. They will be merged with strict
mode in a future release.

[Warning] Setting lower_case_table_names=2 because file system for
/var/lib/mysql/ is case insensitive

[Warning] You need to use –log-bin to make –log-slave-updates work.

libnuma: Warning: /sys not mounted or invalid. Assuming one node: No such
file or directory mbind: Operation not permitted

[ERROR] InnoDB: Operating system error number 22 in a file operation.

[ERROR] InnoDB: Error number 22 means ‘Invalid argument’

[ERROR] InnoDB: File ./ib_logfile101: ‘aio write’ returned OS error 122.
Cannot continue operation

[ERROR] InnoDB: Cannot continue operation.

我在Windows 7机器上尝试了它的工作原理。


阅读 819

收藏
2020-06-17

共1个答案

一尘不染

Disable AIO

这就像我从Virtualbox的来宾Debian OS 启动容器并在Windows 10的共享文件夹上创建数据库文件时遇到的AIO错误一样,为我解决了该问题。

问题似乎是共享文件夹或至少某些Windows版本不支持AIO 。
我的主机崩溃后,从Windows 10 Pro 迁移到家庭版后,对我来说似乎发生了这种情况。

有关详细信息:

以下是一些选项::

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

docker run -it mysql --innodb_use_native_aio=0

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

 command: --innodb_use_native_aio=0

上下文中,这是我正在工作的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

Option 3 – add an option to your my.cnf file in your build

innodb_use_native_aio=0

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

只需在包含mysql
db的docker配置中删除该卷即可。当然,如果您做一个docker-compose或
破坏您的容器,您的数据库将被删除,就是这样。

2020-06-17