Начальная загрузка кластера Percona Xtradb в Docker выдает ошибку: Не удается открыть и заблокировать таблицы привилегий: таблица «mysql.user» не существует

Моя цель — запустить установку Percona XtraDB в контейнере Docker. Для этого я написал следующую конфигурацию.

Докерфайл:

FROM ubuntu:wily
ENV DEBIAN_FRONTEND noninteractive
#
# ENVIRONMENT INSTALL
#
RUN apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get install -y wget curl netcat python-dev python-setuptools python-software-properties vim
RUN easy_install j2cli
COPY my.cnf.j2 /templates/
COPY docker-entrypoint.sh /
RUN chmod +x docker-entrypoint.sh /
#
# PERCONA XTRADB CLUSTER INSTALL
#
RUN echo "deb http://repo.percona.com/apt wily main" >>     /etc/apt/sources.list.d/percona.list
RUN echo "deb-src http://repo.percona.com/apt wily main" >>     /etc/apt/sources.list.d/percona.list
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
RUN apt-get update && apt-get install -y percona-xtradb-cluster-56
ENTRYPOINT ["/docker-entrypoint.sh"]

докер-entrypoint.sh

#!/bin/bash -e
j2 /templates/my.cnf.j2 > /etc/mysql/my.cnf
exec bash

мой.cnf.j2

[mysqld]
user=mysql
default_storage_engine=InnoDB
basedir=/usr
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
innodb_autoinc_lock_mode=2
log_queries_not_using_indexes=1
max_allowed_packet=128M
binlog_format=ROW
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_node_address={{node_ip}}
wsrep_cluster_name="mycluster"
wsrep_cluster_address=gcomm://
wsrep_node_name={{node_name}}
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="test:test"

!includedir /etc/mysql/conf.d/

wsrep_cluster_address=gcomm:// обычно содержит список из 3 узлов WAN-IP, я удалил их из соображений конфиденциальности.

Построение изображения отлично работает с:

docker build --rm -t test .

Запуск также отлично работает с:

docker run --name Test1 -e "node_ip=127.0.0.1" -e "node_name=Test1" -p 3306:3306 -p 4567:4567 -p 4444:4444 -p 4568:4568 -i -t test

Переменная node_ip указывает на WAN-IP моего сервера, я установил для нее значение 127.0.0.1 только из соображений конфиденциальности.

Но когда я пытаюсь загрузить mysql в контейнер с помощью:

/etc/init.d/mysql bootstrap-pxc

Я получаю эту ошибку:

2016-03-28 09:24:09 354 [Note] Server hostname (bind-address): '*'; port: 3306
2016-03-28 09:24:09 354 [Note] IPv6 is available.
2016-03-28 09:24:09 354 [Note]   - '::' resolves to '::';
2016-03-28 09:24:09 354 [Note] Server socket created on IP: '::'.
2016-03-28 09:24:09 354 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
160328 09:24:09 mysqld_safe mysqld from pid file /var/lib/mysql/8605688929d8.pid ended

Как я могу решить эту проблему, чтобы запустить XtraDB в моем контейнере?


person Octavia Kitsune    schedule 28.03.2016    source источник
comment
если вы не используете mysql_install_db, есть ли для этого причина? (его нужно будет запустить, а затем chown mysql.mysql -R /var/lib/mysql)   -  person Oneiroi    schedule 29.03.2016


Ответы (2)


mysql_install_db chown mysql.mysql -R /var/lib/mysql service mysql start

Вышеупомянутое работает без проблем, пожалуйста, проверьте это.

person Oneiroi    schedule 29.03.2016

Это может быть проблема с разрешениями. Попробуйте добавить следующее после вашего заявления FROM:

RUN useradd mysql \
    && mkdir /var/lib/mysql \
    && chown -R mysql:mysql /var/lib/mysql
person Cole Tierney    schedule 28.03.2016
comment
К сожалению не помогло, проблема та же. - person Octavia Kitsune; 28.03.2016