Не удается инициализировать базу данных 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: не удается продолжать операция.
** я попробовал в машине 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