无法在windows 10上初始化mysql数据库

yr9zkbsy  于 2021-06-25  发布在  Mysql
关注(0)|答案(4)|浏览(556)

使用laradock
系统信息:
docker版本:17.10.0-ce,内部版本f4ffd25
操作系统:windows 10主页
当我跑的时候 docker-compose up -d mysql 我犯了个错误。以下是docker日志
[注]basedir设置为/usr/
[警告]语法'--symbolic links/-s'已弃用,将在将来的版本中删除
[警告]“no \u zero \u date”、“no \u zero \u in \u date”和“error \u for \u division \u by \u zero”sql模式应与严格模式一起使用。在将来的版本中,它们将与strict模式合并。
[错误]--指定了初始化,但数据目录中有文件。正在中止。
[错误]正在中止
我试过删除 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

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

更新2
在我删除之后 mysql 文件夹位于 ~/.laradock/data 我有以下错误。命令发出后,它会在下面的图像中生成文件。当我重新运行返回前面提到的错误时。
[注]basedir设置为/usr/
[警告]语法'--symbolic links/-s'已弃用,将在将来的版本中删除
[警告]“no \u zero \u date”、“no \u zero \u in \u date”和“error \u for \u division \u by \u zero”sql模式应与严格模式一起使用。在将来的版本中,它们将与strict模式合并。
[警告]设置小写\u case \u table \u names=2,因为/var/lib/mysql/的文件系统不区分大小写
[警告]您需要使用--log bin使--log slave更新生效。
libnuma:警告:/sys未装入或无效。假设一个节点:没有这样的文件或目录mbind:不允许操作
[错误]innodb:文件操作中的操作系统错误号22。
[错误]innodb:错误号22表示“无效参数”
[错误]innodb:file./ib\u logfile101:'aio write'返回操作系统错误122。无法继续操作
[错误]innodb:无法继续操作。

**我在Windows7机器上试过了,它还在工作。

6mzjoqzu

6mzjoqzu1#

我的windows10enterprise也有同样的问题,我找不到完美的解决方案,因为这似乎是我的windows版本问题-我在其他windows(8&10professional)上成功运行了相同的映像。我的临时工作是完全从docker compose文件中删除/var/lib/mysql挂载,从而允许在容器中创建和修改数据库数据文件。
我使用kitematics,它可以在任何时候重新启动并重新连接我创建的容器,就像在容器退出时我不会丢失数据一样。如果你不使用kitematics,这就是它的用途。在运行docker compose之后,将创建一个映像并创建一个容器来运行它,我避免在创建的映像上使用run,因为这将创建一个新的容器,我坚持按顺序运行以下命令

docker ps -a                 # this command will get container_id of all container, those that are running and those that are not
docker start <container_id>  # start container from background
docker attach <container_id> # attach container to standard input

通过这些docker命令,即使在退出和重新启动后,我的数据也被保存在容器中

备份

现在,每当我想移动数据时,我都会将容器提交到一个映像中,并将映像保存到本地存储中

docker commit <container_id> <backup_image_name>:<1_31_2017> # I use date to tag it
docker save -o <local_storage_tar_name> <backup_image_name>

还原

每当我需要恢复mysql容器在我的电脑上或一个新的编程实习生

cd <dir_containing_the_tar_file>
docker load -o <local_storage_tar_name>

此解决方案供您更新

File ./ib_logfile101: 'aio write' returned OS error 122. Cannot continue operation

我希望这对别人有帮助

u1ehiz5o

u1ehiz5o2#

除了上述andrewd的响应之外,您还应该更改 my.cnf 这样在启动时就不会被忽略。你可以运行下面的命令,

sudo chmod 400 my.cnf

在跑步前做这个 docker-compose up -d

bwitn5fc

bwitn5fc3#

禁用aio

当我从virtualbox的guest debian操作系统启动一个容器并在windows10的共享文件夹中创建数据库文件时,这为我修复了aio错误。
问题似乎是,aio在共享文件夹上不受支持,或者至少在某些版本的windows上不受支持。这似乎发生在我从windows10pro搬回家后,我的主机崩溃了。
详情:
全部
在mysql中为zfs禁用aio
以下是一些选项:
选项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

选项3——在构建中向my.cnf文件添加一个选项

innodb_use_native_aio=0

选项4-不要在本地文件系统上保存数据库。(可能会破坏数据库,不推荐)
只需删除docker配置中包含mysql db的卷。当然,如果你做了一个docker组装或者破坏了你的容器,你的db会被删除,所以就这样。

g52tjvyc

g52tjvyc4#

我不确定,但尝试此步骤。这是因为数据文件夹。
尝试删除docker图像。使用docker images列出所有图像,然后使用docker rmi imagename删除mysql和laradock mysql。别忘了用docker volume rm volumename删除docker卷也转到cd~/.laradock/data删除mysql文件夹。
然后尝试docker编写mysql进行调试。如果没有错误,您可以尝试docker compose up-d mysql

相关问题