Запускаем mysql в docker

Поддавшись современным тенденциям я решил попробовать перенести один из своих проектов в docker. В интернете пишут, что это очень просто, работает стабильно, но оказалось что это не совсем так.

Первое, что я захотел сделать — это поднять nginx + php-fpm + mariaBD в трёх разных контейнерах. С nginx и php-fpm вообще никаких проблем не было, а вот mariaBD(mysql) никак не поднималась.

В логах постоянно появлялись ошибки:

$ winpty docker run —volumes-from docker-mariadb-data -e MYSQL_ROOT_PASSWORD=user -p 3306:3306 -d mariadb

$ docker logs 34f8e5e53db5
2016-01-28 7:46:26 140139439015872 [Note] mysqld (mysqld 10.1.10-MariaDB-1~jessie) starting as process 1 …
2016-01-28 7:46:26 140139439015872 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: The InnoDB memory heap is disabled
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Memory barrier is not used
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using Linux native AIO
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using SSE crc32 instructions
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Completed initialization of buffer pool
2016-01-28 7:46:26 140139439015872 [Warning] InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in ‘Invalid argument’ on Linux on tmpfs, see MySQL Bug#26662.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Highest supported file format is Barracuda.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: 128 rollback segment(s) are active.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Waiting for purge to start
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1600739
2016-01-28 7:46:26 140138654959360 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-01-28 7:46:26 140139439015872 [Note] Plugin ‘FEEDBACK’ is disabled.
2016-01-28 7:46:26 140139439015872 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2016-01-28 7:46:26 140139439015872 [Note] Recovering after a crash using tc.log
2016-01-28 7:46:26 140139439015872 [ERROR] Can’t init tc log
2016-01-28 7:46:26 140139439015872 [ERROR] Aborting

Спустя час проб и ошибок я разобрался что к чему.

Проблема проявляется только на windows.

Решение:

При создании контейнера указываем

    volumes:
- ./config:/etc/mysql/conf.d
- ./data:/var/lib/mysql

И создаем файл local.cnf в папке ./config

[mysqld]
innodb_flush_method=O_DSYNC

Leave a Comment