Using Laradock
System Info:
When I run docker-compose up -d mysql 遇到错误。以下是 docker日志
docker-compose up -d mysql
[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
[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.
mysql
~/.laradock\data
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 出现以下错误。命令后,它将在下图中生成文件。当我重新运行时 ,返回上面提到的先前的错误。
~/.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.
[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机器上尝试了它的工作原理。
这就像我从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或 破坏您的容器,您的数据库将被删除,就是这样。