【问题标题】:MariaDB Docker Start FailsMariaDB Docker 启动失败
【发布时间】:2017-05-11 20:23:19
【问题描述】:

我正在尝试使用 Docker 1.13.1 启动 MariaDB。

docker run -d --name mariadb -e MYSQL_ROOT_PASSWORD=password -p 3306:3306   -p 4567:4567/udp   -p 4567-4568:4567-4568   -p 4444:4444   -v /mnt/data/mysql:/var/lib/mysql mariadb:10.1 chown -R mysql:mysql /var/lib/mysql && mysqld --user=mysql --wsrep-new-cluster

启动后得到如下输出:

2017-05-11 20:04:55 139780804880320 [Note] mysqld (mysqld 10.1.23-MariaDB-1~jessie) starting as process 6 ...
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: The InnoDB memory heap is disabled
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Compressed tables use zlib 1.2.8
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Using Linux native AIO
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Using SSE crc32 instructions
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Completed initialization of buffer pool
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2017-05-11 20:04:55 139780804880320 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2017-05-11 20:04:56 139780804880320 [Warning] InnoDB: New log files created, LSN=45883
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Doublewrite buffer not found: creating new
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Doublewrite buffer created
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: 128 rollback segment(s) are active.
2017-05-11 20:04:56 139780804880320 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Foreign key constraint system tables created
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Creating tablespace and datafile system tables.
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Tablespace and datafile system tables created.
2017-05-11 20:04:56 139780804880320 [Note] InnoDB: Waiting for purge to start
2017-05-11 20:04:56 139780804880320 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.35-80.0 started; log sequence number 0
2017-05-11 20:04:56 139780029413120 [Note] InnoDB: Dumping buffer pool(s) not yet started
2017-05-11 20:04:56 139780804880320 [Note] Plugin 'FEEDBACK' is disabled.
2017-05-11 20:04:56 139780804880320 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2017-05-11 20:04:56 139780804880320 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
2017-05-11 20:04:56 139780804880320 [Note] Server socket created on IP: '::'.
2017-05-11 20:04:56 139780804880320 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

mysql 用户拥有该目录并能够创建 ibdata1 和相关文件。我不知道它是否无法创建其他表和/或为什么无法读取它们?

【问题讨论】:

    标签: docker mariadb


    【解决方案1】:

    修复:

    docker run -d --name mariadb -e MYSQL_ROOT_PASSWORD=password -p 3306:3306   -p 4567:4567/udp   -p 4567-4568:4567-4568   -p 4444:4444   -v /mnt/data/mysql:/var/lib/mysql mariadb:10.1 /bin/bash -c 'chown -R mysql:mysql /var/lib/mysql && mysqld --user=mysql --wsrep-new-cluster'
    

    问题是&& 之后的所有内容都没有作为命令行插入容器内,而是在主机 shell 中插入外部,除非正确引用为 /bin/bash (/bin) 的 -c 选项的参数/sh 也是有效的)。

    【讨论】:

      【解决方案2】:

      我在启动脚本中解决了这个问题,该脚本在 docker 映像中作为我的 ENTRYPOINT 的一部分运行:

      chmod -R ug+rw /var/lib/mysql
      chown -R mysql:mysql /var/lib/mysql
      service mysql start
      

      这样,我避免了所有的卷安装,并且可以简单地在我的普通容器中使用读写层。这是为一个开源项目构建一个开发人员容器,所以我正在尝试制作一个一体化的容器供我的开发人员使用。可能有更清洁的方法来解决这个问题 - 但这对我有用。

      【讨论】:

        猜你喜欢
        • 2021-09-27
        • 2017-10-22
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 2021-06-18
        • 2021-02-07
        • 2021-09-21
        相关资源
        最近更新 更多