Ошибка импорта MySQL в действиях GitHub с laravel

Я пытаюсь импортировать файл SQL с помощью следующей команды, используя рабочий процесс действий GitHub. Файл SQL содержит некоторые тестовые данные, которые в дальнейшем будут использоваться для запуска модульных тестов в laravel.

Я не могу понять, неправильный ли путь к файлу или неверная команда импорта. Я сохранил файл SQL в корневом каталоге laravel.

Я столкнулся со следующей ошибкой:

Ошибка: процесс завершен с кодом выхода 1.

Ниже приведена команда, используемая в файле .yml, который используется в рабочем процессе для laravel.

- name: Importing MYSQL file
  env:
    DB_HOST: 127.0.0.1
    DB_CONNECTION: mysql
    DB_DATABASE: test
    DB_PORT: ${{ job.services.mysql.ports[3306] }}
    DB_USER: root
    DB_PASSWORD: password
  run: mysql -u root -p password -h localhost --port=3306 test < request_data.sql

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

Обратите внимание, что миграции, которые я выполнил с использованием файла рабочего процесса, выполняются успешно.

Следующий код используется для создания службы MySQL:

jobs:
  phpunit:
    runs-on: ubuntu-latest

services:
  mysql:
    image: mysql:5.7
    env:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: test
    ports:
      - 33306:3306
    options: --health-cmd = "mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

Вот ошибка рабочего процесса:

Заранее спасибо!

Ошибка на скриншоте выше не видна. Видите ли вы какие-либо подробности в необработанных журналах?

Azeem 19.01.2023 10:26

код ошибки такой же, как я упомянул в вопросе, и дайте мне знать, как я могу проверить необработанные журналы в действиях GitHub.

Ankit 19.01.2023 11:24

Конечно. Кроме того, подтвердите, использовали ли вы то же изображение, то есть mysql:5.7 локально, и нормально ли оно работает на вашей стороне.

Azeem 19.01.2023 11:27

да, у меня такой же mysql, даже экспорт mysqldump, похоже, не работает для действий github.

Ankit 19.01.2023 11:29

Верно. Не могли бы вы также добавить небольшой файл .sql? Попробую воспроизвести на своей стороне.

Azeem 19.01.2023 11:32

Спасибо! Это полный рабочий процесс в вопросе, который вы используете? Не могли бы вы объединить это, чтобы сделать его одним полным рабочим процессом, и добавить, если чего-то не хватает? Похоже, sudo /etc/init.d/mysql start не хватает. И в файле .sql нет запроса на создание БД, то есть для создания test БД.

Azeem 19.01.2023 12:09
dropbox.com/s/ku6sav3gx9e2aoe/request_data.sql?dl=0 для примера файла .sql, который я пытаюсь импортировать
Ankit 19.01.2023 12:19

@Azeem mysql --host 127.0.0.1 --port 33306 -uroot -ppassword -e «ПОКАЗАТЬ БАЗЫ ДАННЫХ, КАК 'test'», эта команда помогает убедиться, что база данных уже создана и существует, и нам не нужно создавать базу данных

Ankit 19.01.2023 13:38

Я попытался воспроизвести этот сценарий в этом рабочем процессе (github.com/iamazeem/test/actions/runs/3960617373/workflow ) с пользовательским .sql файлом. Работает нормально ( github.com/iamazeem/test/actions/runs/3960617373/jobs/…). Что касается sudo /etc/init.d/mysql start, я обнаружил, что в раннере предустановлен MySQL, который по умолчанию отключен. И эта команда (а также есть другие варианты с командами systemctl и service) используется для запуска этого экземпляра MySQL.

Azeem 19.01.2023 18:00

Вот ссылка на ту проблему, где написано, что она отключена: github.com/actions/runner-images/issues/576 (комментарий: github.com/actions/runner-images/issues/…)

Azeem 19.01.2023 18:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
10
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести ваш сценарий с помощью небольшого .sql файла, но он отлично работает с образом mysql:5.7 Docker.

Вот полный рабочий процесс:

name: MySQL Import Test

on:
  workflow_dispatch:

jobs:
  import:
    runs-on: ubuntu-latest

    services:
      mysql:
        # https://hub.docker.com/_/mysql
        image: mysql:5.7
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: test
        ports:
          - 33306:3306
        options: --health-cmd = "mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
    - name: Import MySQL file
      env:
        SQL: |
          SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
          START TRANSACTION;
          SET time_zone = "+00:00";
          CREATE TABLE `person` (
            `id` int(11) NOT NULL,
            `name` varchar(255) NOT NULL,
            `email` varchar(255) NOT NULL
          );
          INSERT INTO `person` (`id`, `name`, `email`)
          VALUES
            (111, 'abc', '[email protected]'),
            (222, 'def', '[email protected]'),
            (333, 'ghi', '[email protected]'),
            (444, 'jkl', '[email protected]');
          ALTER TABLE `person` ADD PRIMARY KEY (`id`);
          COMMIT;
      run: |
        mysql --host 127.0.0.1 --port 33306 -uroot -ppassword -e "SHOW DATABASES LIKE 'test';" 2>/dev/null
        echo "$SQL" > person.sql
        echo "--- SQL ---"
        cat person.sql
        echo "--- --- ---"
        echo "Importing from person.sql file"
        mysql --host 127.0.0.1 --port 33306 -uroot -ppassword test < person.sql 2>/dev/null
        echo "Checking the imported data"
        mysql --host 127.0.0.1 --port 33306 -uroot -ppassword test <<< 'SELECT id,name,email FROM person;' 2>/dev/null

Выход

Database (test)
test
--- SQL ---
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE `person` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL
);
INSERT INTO `person` (`id`, `name`, `email`)
VALUES
  (111, 'abc', '[email protected]'),
  (222, 'def', '[email protected]'),
  (333, 'ghi', '[email protected]'),
  (444, 'jkl', '[email protected]');
ALTER TABLE `person` ADD PRIMARY KEY (`id`);
COMMIT;

--- --- ---
Importing from person.sql file
Checking the imported data
id  name    email
111 abc [email protected]
222 def [email protected]
333 ghi [email protected]
444 jkl [email protected]

Кроме того, команда, т. е. sudo /etc/init.d/mysql start (и ее другие варианты, например, service и systemctl), предназначена для предустановленной MySQL. Вот актуальная проблема: https://github.com/actions/runner-images/issues/576

В вашем сценарии, поскольку требуется протестировать контейнер Docker, выдача команд для локально установленного MySQL (который отключен по умолчанию) вообще не требуется.

Я также смог импортировать файл sql, используя mysql -Dtest -uroot -ppassword -h127.0.0.1 -P33306 < "request_data.sql"

Ankit 20.01.2023 06:51

Спасибо за ваши старания. вы пробовали оба пути. используя команды sql и файл sql.

Ankit 20.01.2023 06:52

@Ankit: Приятно слышать. Ваше здоровье! :)

Azeem 20.01.2023 06:55

@Ankit: Добро пожаловать! Да, мне нужно было проверить, действительно ли были импортированные данные, поэтому я использовал второй встроенный запрос вместо добавления его в файл. Тем не менее, сочетание предустановленного MySQL по умолчанию и одного через докер было хорошей находкой. :)

Azeem 20.01.2023 06:57

Я использовал локальный хост вместо 127.0.0.1 перед разрешением, и это не сработало, и я долго не замечал.

Ankit 20.01.2023 07:08

@Анкит: Верно. Кроме того, предустановленный и тот, что находится в докере, имеют разные настройки конфигурации через env vars и разные значения по умолчанию. Это тоже требовало некоторого понимания с моей стороны. Наконец, это работает. Это хорошо.

Azeem 20.01.2023 07:27

Другие вопросы по теме