Не удается инициализировать базу данных MySQL в Windows 10

используя Laradock

Информация О Системе:

  • версия Docker: 17.10.0-ce, build f4ffd25
  • ОС: Windows 10 Главная

когда я запускаю docker-compose up -d mysql Я получаю ошибку. Ниже приведены журналы docker

[Примечание] Basedir установлен в /usr/

[предупреждение] синтаксис '--symbolic-links/-s' устарел и будет удален в будущем выпуске

[предупреждение] Режимы sql "NO_ZERO_DATE", "NO_ZERO_IN_DATE" и "ERROR_FOR_DIVISION_BY_ZERO" должны использоваться со строгим режимом. Они будут объединены со strict mode в будущем выпуске.

[ERROR] --initialize указано, но в каталоге данных есть файлы. Прерывание.

[ошибка] прерывание

Я попытался удалить под ~/.laradockdata и не работал.

обновление 1

MySQL Контейнер под laradock Dockerfile

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

после удаления под ~/.laradock/data Я получаю следующую ошибку. После команды он генерирует файлы в изображении ниже. Когда я повторяю, возвращая предыдущую ошибку, упомянутую выше.

[Примечание] Basedir установлен в /usr/

[предупреждение] синтаксис '--symbolic-links/ - s ' является осуждается и будет удален в будущем выпуске

[предупреждение] режимы sql "NO_ZERO_DATE", "NO_ZERO_IN_DATE" и "ERROR_FOR_DIVISION_BY_ZERO" должны использоваться со строгим режимом. Они будут объединены со strict mode в будущем выпуске.

[предупреждение] установка 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: не удается продолжать операция.

enter image description here

** я попробовал в машине windows 7 и ее работе.

3 ответов


отключить AIO

это исправило это для меня, когда я получил ошибку AIO, как вы сделали, когда я запускал контейнер из гостевой ОС Debian из Virtualbox и создавал файлы базы данных в общей папке в Windows 10.

проблема заключается в том, что AIO не поддерживается в общих папках или, по крайней мере, в некоторых версиях Windows. Кажется, это произошло для меня после того, как я переехал из 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

3 -- Добавьте опцию в свой my.cnf-файл в вашей сборке

innodb_use_native_aio=0

Вариант 4-Не сохраняйте свою БД в локальной файловой системе.(Может уничтожить вашу БД, не рекомендуется)

просто удалите том в конфигурации docker, который содержит вашу БД mysql. Конечно, ваша БД будет удалена, если вы сделаете docker-compose down или иным образом уничтожите свой контейнер, так что это так.


у меня была та же проблема с моим Windows 10 Enterprise, я не мог найти идеальное решение вокруг него, потому что это, кажется, моя проблема с версией Windows - я успешно запустил тот же образ на других окнах (8 & 10 professional). Моя временная работа заключалась в том, чтобы полностью удалить /var/lib/mysql mount из файла docker-compose, позволяющего создавать и изменять файлы данных базы данных в самом контейнере.

Я использую 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

надеюсь, это кому-то поможет


Я не уверен, но попробуйте этот шаг.Это из-за папки data.

Попробуйте удалить изображение docker. Список всех изображений, используя настройки изображения затем удалите mysql & laradock mysql, используя docker RMI imagename. Не забудьте удалить том docker с помощью docker volume RM volumename Также команда CD ~/.laradock / data удалите папку mysql.

попробуйте docker-составить mysql для отладки. Если нет ошибок, вы можете попробовать docker-compose up-d mysql