В Kubuntu 18 я создаю докер для приложения laravel 6 с определенным mysql:

  mysql:
    container_name: "vanilla-crm-db"
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "MYSQL_ROOT_PASSWORD"
      MYSQL_DATABASE: "vanilla-crm-dev"
      MYSQL_USER: "MYSQL_USER"
      MYSQL_PASSWORD: "MYSQL_PASSWORD"
    ports:
      - "3330:3306"
    volumes:
      - "./docker/mysql/data:/var/lib/mysql"

И у меня это работает. Я использую MySql Workbench 6.3 для доступа к БД. Текст Я делаю http-тесты, и мне нужно создать для этого новую базу данных и загрузить в нее дамп моей базы данных. Имя этой базы данных записано в config / database.php в блоке mysql_testing.

Я открываю Workbench и пытаюсь создать новую базу данных: https://prnt.sc/unjie8 Но я не нахожу опцию «Создать базу данных», но вижу опцию «Создать новую схему» и в предварительном просмотре sql-инструкции я вижу команду

CREATE SCHEMA `vanilla-crm-testing` ;

Я ожидала,

Create database ...

Команда. Это то же самое?

И ошибка следующая:

Operation failed: There was an error while applying the SQL script to the database.
Executing:
CREATE SCHEMA `vanilla-crm-testing` ;

ERROR 1044: Access denied for user 'vanilla-crm-usr'@'%' to database 'vanilla-crm-testing'
SQL Statement:
CREATE SCHEMA `vanilla-crm-testing`

Какой правильный способ создать тестовую базу данных?

ОБНОВЛЕНО: Я попытался создать новую базу данных в консоли mysql, например:

mysql
CREATE DATABASE  vanilla-crm-testing;

Но я получил ошибку в командной строке докера:

$ docker-compose exec app bash
root@09649d3a2b81:/app# mysql
bash: mysql: command not found

В моем приложении Docker в Dockerfile есть:

FROM php:7.3-apache
...

    RUN apt-get update && apt-get install --no-install-recommends -y \
      apt-utils ghostscript jq libicu-dev libmagick++-dev libpq-dev libfreetype6-dev libjpeg62-turbo-dev zlib1g-dev libzip-dev git zip && \
      docker-php-ext-install intl && \
      docker-php-ext-install opcache && \
      docker-php-ext-install pdo_mysql && \

И больше никаких команд mysql. Есть ли еще какие-то пакеты, которые мне нужно установить в Dockerfile, чтобы иметь консоль mysql под докером?

ОБНОВЛЕНО №2: Я вхожу в bash командой:

docker-compose exec mysql bash

root@f216ef80c104:/# uname -a 
Linux f216ef80c104 4.15.0-118-generic #119-Ubuntu SMP Tue Sep 8 12:30:01 UTC 2020 x86_64 GNU/Linux

Где mysql - имя_контейнера в docker-compose.yml

Обычно я вхожу в консоль mysql с командой:

mysql -u root -h localhost -p

Но каков должен быть формат этой команды в консоли докера? Я пробовал несколько способов и потерпел неудачу ...

ОБНОВЛЕНО №3: Я установил DBeaver версии 7.2.1.202009201907 и вошел в моя база данных и попытался создать новую базу данных для тестирования. У меня ошибка: https://prnt.sc/uol0z7

Как это исправить? Должен ли я добавить еще несколько правильных определений контейнеров mysql?

Благодарность!

0
mstdmstd 25 Сен 2020 в 10:40

1 ответ

Лучший ответ

Чтобы ответить на ваш вопрос, похоже, ваша основная проблема заключается в том, что вы пытаетесь создать новую тестовую базу данных, но вы входите в систему с пользователем без полномочий root. Пользователь без полномочий root имеет очень мало прав для выполнения некоторых операций. Вот почему вы получили это сообщение об ошибке и не можете создать новую базу данных. Чтобы решить эту проблему, попробуйте войти в систему с пользователем root и убедитесь, что ваша конфигурация Dbeaver верна:

host: 127.0.0.1
port: <Exposed MySQL port based on your docker-compose, e.g: 3330>
username: root
password: <MYSQL_ROOT_PASSWORD from your docker-compose>

С пользователем root вы сможете создавать любую новую базу данных. Другое дело, если вы хотите подключиться с помощью команды mysql cli, убедитесь, что вы также указали правильный порт для контейнера докеров. Команда должна быть такой:

mysql -u root -h 127.0.0.1 -P <Exposed MySQL port based on your docker-compose, e.g: 3330> -p

Надеюсь, это поможет и решит вашу проблему. :)

1
Dharma Saputra 28 Сен 2020 в 00:08