Как запустить sql скрипт в linux

Обновлено: 05.07.2024

Я хочу выполнить текстовый файл, содержащий запросы SQL, в MySQL.

Я попытался запустить source/Desktop/test.sql и получил ошибку:

mysql>. \home\sivakumar\Desktop\test.sql ОШИБКА: не удалось открыть файл '\ home\sivakumar\Desktop\test.sql', ошибка: 2

Есть идеи, что я делаю не так?

ОТВЕТЫ

Ответ 1

Если вы в командной строке MySQL mysql> , вам нужно объявить файл SQL как source .

Ответ 2

У вас довольно много вариантов:

  • используйте клиент командной строки MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Установите инструменты GUI MySQL и откройте свой файл SQL, затем выполните его
  • Используйте phpmysql, если база данных доступна через ваш веб-сервер

Ответ 3

вы можете выполнить инструкции mysql, которые были записаны в текстовом файле, используя следующую команду:

если ваша база данных еще не создана, сначала войдите в свой mysql, используя:

который должен это сделать!

Ответ 4

Все лучшие ответы хороши. Но на всякий случай кто-то хочет запустить запрос из текстового файла на удаленном сервере И сохранить результаты в файл (вместо показа на консоли), вы можете сделать это:

Надеюсь, это поможет кому-то.

Ответ 5

Мой любимый вариант сделать это будет:

Я использую это таким образом, потому что, когда вы связываете это с "", вы избегаете неправильного пути и ошибок с пробелами и - и, возможно, больше проблем с символами, с которыми я не сталкивался.

С комментарием @elcuco я предлагаю использовать эту команду вместе с [пробелом], поэтому она говорит bash игнорировать сохранение в истории, это будет работать из коробки в большинстве bash.

если ваша команда все еще сохраняется в истории, просмотрите следующие решения:

дополнительная безопасность редактирования

На всякий случай, если вы хотите быть более безопасным, вы можете использовать следующую команду и ввести пароль в командной строке:

Ответ 6

Я пришел сюда, ища этот ответ, и вот что я нашел, работает для меня лучше: Примечание. Я использую Ubuntu 16.xx

mysql -u <your_user> - p

Надеюсь это поможет.

Ответ 7

Укажите путь к файлу .sql как:

See In The Image:

Ответ 8

Не указывать одинарные кавычки.

Если приведенная выше команда не работает, скопируйте файл на диск c: и повторите попытку. как показано ниже,

Ответ 9

Никогда не рекомендуется передавать аргумент пароля непосредственно из командной строки, он сохраняется в файле

/.bash_history и может быть доступен из других приложений.

Используйте это вместо:

Ответ 10

Ответ 11

Скорее всего, вам просто нужно изменить косую черту /blackslash: от

Таким образом, команда будет следующей:

Ответ 12

используйте следующее из командной строки mysql -

Не используйте цитату. Даже если путь содержит пробел (''), используйте никакую цитату вообще.

Ответ 13

Так как mysql -u yourusername -p yourpassword yourdatabase < text_file не работал на удаленном сервере (Amazon EC2).

Сначала убедитесь, что база данных создана.

Ответ 14

В будущем, я нашел, что это работает против вышеупомянутых методов под Windows в консоли msql:

Если ваш корневой диск не называется "c", тогда просто обменивайтесь тем, что вы вызываете. Сначала попробуйте обратную косую черту, если они не работают, попробуйте косую черту. Если они также не работают, убедитесь, что у вас есть полный путь к файлу, расширение .sql для имени файла, и если ваша версия настаивает на полуколонах, убедитесь в этом и повторите попытку.

Ответ 15

вместо перенаправления я бы сделал следующее

Это выполнит файл path-to-sql-file

Ответ 16

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

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

Ответ 17

Так много способов сделать это.

Если вы получаете ошибки из командной строки, убедитесь, что вы ранее запустили

Это должно быть выполнено из каталога mysqld.exe, отсюда и CD.

Надеюсь, что это полезно, а не просто излишне.

Ответ 18

Вы можете использовать SQLyog Выполнить SQL script для выполнения файла .sql. Выберите файл и нажмите "Выполнить".:-) Вы получаете 30-дневную бесплатную пробную версию.

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

Файл должен находиться на клиентском хосте, где вы используете mysql. Имя файла должно быть абсолютным путем, указывающим полное имя файла, или имя пути, которое указано относительно каталога, в котором вы вызывали mysql. Например, если вы запустили mysql на компьютере под управлением Windows в каталоге C:\mysql, а ваш файл script - my_commands.sql в каталоге C:\scripts, обе следующие команды SOURCE сообщают mysql выполнить SQL-запросы в файл:

mysql > SOURCE C:\scripts\my_commands.sql;

Другой способ выполнить файл script - это присвоить ему имя в командной строке mysql. Вызвать mysql и использовать < оператор перенаправления ввода, чтобы указать файл для чтения ввода запроса:

PostgreSQL (произносится «Пост-Грэс-Кью-Эл») — свободная объектно-реляционная система управления базами данных (СУБД).

Установка

После установки

После установки проверьте версию установленного PostgreSQL

postgres (PostgreSQL) 9.2.24

Расположение файлов с настройками, например, postgresql.conf можно получить выполнив

Password: config_file ------------------------------------- /var/lib/pgsql/data/postgresql.conf (1 row)

В этом примере директория, которая содержит настройки это

Полезно изучить её содержание

total 48 drwx------. 7 postgres postgres 67 Jun 9 22:54 base drwx------. 2 postgres postgres 4096 Jun 9 23:19 global drwx------. 2 postgres postgres 18 Jun 9 13:54 pg_clog -rw-------. 1 postgres postgres 4371 Jun 10 01:23 pg_hba.conf -rw-------. 1 postgres postgres 1636 Jun 9 13:54 pg_ident.conf drwx------. 2 postgres postgres 58 Jun 10 00:00 pg_log drwx------. 4 postgres postgres 36 Jun 9 13:54 pg_multixact drwx------. 2 postgres postgres 18 Jun 9 14:14 pg_notify drwx------. 2 postgres postgres 6 Jun 9 13:54 pg_serial drwx------. 2 postgres postgres 6 Jun 9 13:54 pg_snapshots drwx------. 2 postgres postgres 25 Jun 10 02:06 pg_stat_tmp drwx------. 2 postgres postgres 18 Jun 9 13:54 pg_subtrans drwx------. 2 postgres postgres 6 Jun 9 13:54 pg_tblspc drwx------. 2 postgres postgres 6 Jun 9 13:54 pg_twophase -rw-------. 1 postgres postgres 4 Jun 9 13:54 PG_VERSION drwx------. 3 postgres postgres 60 Jun 9 13:54 pg_xlog -rw-------. 1 postgres postgres 19889 Jun 10 01:43 postgresql.conf -rw-------. 1 postgres postgres 45 Jun 9 14:14 postmaster.opts -rw-------. 1 postgres postgres 92 Jun 9 14:14 postmaster.pid

Подключение к БД

Чтобы получить доступ к базам данных можно воспользоваться стандартной консолью psql.

Если Вы хотите подключиться из bash в Windows не забудьте добавить местоположение psql.exe (у меня это C:\Program Files\PostgreSQL\12\bin) в PATH

Как это делается описано в статье PATH

psql.exe -h localhost -p 5433 -U postgres

sudo su - postgres
psql

psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1)) Type "help" for help.

Если БД на локальном хосте

psql -h 127.0.0.1 -d DATABASENAME -U DATABASEUSERNAME

Получить данные о подключении

You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

Список существующих БД

Список уже существующих на сервере баз данных можно получить командой

Обратите внимание на столбцы Encoding, Collate и Ctype. Знание кодировок может Вам пригодиться в будущем.

Создать базу данных

Создадим базу данных heihei_ru_db с кодировкой utf8

Создадим базу данных heihei с кодировкой utf8 и укажем значения для Collate, Ctype и Template

Проверим, что получилось

Если я в bash сделаю

То получу сразу четыре доступные кодировки

C
C.UTF-8
en_US.utf8
POSIX

Но создать БД, например, с en_US.utf8 у меня не получается

Приводит к ошибке

ERROR: invalid locale name: "en_US.UTF-8"

Если Вы знаете как решить эту проблему - отпишитесь в комментариях к статье.

UPD: Выполнил такую же команду в Ubuntu и база успешно создана

Удалить базу данных

Чтобы удалить базу данных воспользуйтесь командой

DROP DATABASE db_name;

Проверить кодировки

Проверить кодировку сервера можно командой

server_encoding ----------------- UTF8 (1 row)

Проверить кодировку клиента

client_encoding ----------------- WIN1252 (1 row)

Когда вы находитесь в интерактивном режиме PostgreSQL в консоле появляется префикс

Где db это название текущей базы данных

Показать адрес текущей директории

Вернуться в PostgreSQL можно выполнив

Зайти в БД

Чтобы начать работу с базой данных нужно знать её имя, например пусть Вам нужна база даныых, которую назвали просто HeiHei_ru_DB

You are now connected to database "HeiHei_ru_DB" as user "postgres".

Если вы работаете в Linux и база данных находится на том же хосте можно выполнить

psql -h 127.0.0.1 -d DATABASENAME -U DATABASEUSERNAME

Чтобы посмотреть список таблиц введите

List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
public | person | table | postgres
(1 row)

Чтобы посмотреть всю таблицу person уже можно использовать стандартный

SELECT * FROM person;

Запуск скрипта из файла

Сперва проверим, что с переменными окружения всё впорядке.

Для этого введём в консоль psql.exe нажмём Enter и проверим что bash не жалуется на неизвестную команду.

Если жалуется - прочитайте мои советы в статье Системная переменная PATH

Пишем скрипт script.sql

CREATE TABLE person ( id int, first_name VARCHAR(50), last_name VARCHAR(50), gender VARCHAR(5), date_of_birth DATE )

Применим этот скрипт к базе данных HeiHei_ru_DB

У меня postgres запущен локально на порту 5433. У Вас может быть на 5432 - проверьте.

cat script.sql | psql.exe -h localhost -p5433 -U postgres HeiHei_ru_DB

Password for user postgres:
CREATE TABLE

Саме время сделать что-то более близкое к реальному скрипту

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

CREATE TABLE booking_sites ( id BIGSERIAL NOT NULL PRIMARY KEY, company_name VARCHAR(50) NOT NULL, origin_country VARCHAR(50) NOT NULL, age VARCHAR(3) NOT NULL, date_of_birth DATE NOT NULL, website_url VARCHAR(50) );

Теперь запустим этот скрпит уже не в тестовую а в рабочую базу данных heihei (которая совпадает с названием сайта HeiHei.ru, но если написать .ru будет синтаксическая ошибка ERROR: syntax error at or near ".")

cat booking_sites.sql | psql.exe -h localhost -p5433 -U postgres heihei

Password for user postgres:
CREATE TABLE

Содержание базы данных

В предыдущем параграфе мы создали в базе данных heihei таблицу booking_sites

Убедимся в том, что скрипт отработал удачно

Перейдём в базу данных heihei и проверим создалась ли таблица

You are now connected to database "heihei" as user "postgres".

List of relations Schema | Name | Type | Owner --------+---------------+-------+---------- public | booking_sites | table | postgres (1 row)

Описание таблицы

Если таблица создана какое-то время назад. Вы могли уже забыть, какие конкретно столбцы она содержит.

Пользователи

Получить список пользователей

List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication | <>

Изменение таблицы

Когда нужно обновить название столбца таблицы используем команду ALTER

Предположим полю website_url не хватает 50 символов. Увеличим длину до 60.

ALTER TABLE booking_sites ALTER column website_url TYPE VARCHAR(60);

Задания SQL Server используются для регулярного выполнения одинаковой последовательности команд в базе данных SQL Server. В этом учебнике представлен пример создания задания агента SQL Server в Linux с помощью Transact-SQL и SQL Server Management Studio (SSMS).

  • Установка агента SQL Server в Linux
  • Создание задания для выполнения ежедневного резервного копирования базы данных
  • Планирование и запуск задания
  • Выполнение тех же действий в SSMS (необязательно)

Известные проблемы с агентом SQL Server в Linux см. в заметках о выпуске.

предварительные требования

Для работы с этим руководством необходимо выполнить следующие условия.

  • Компьютер Linux со следующими необходимыми компонентами:
    • SQL Server (RHEL, SLES или Ubuntu) с программами командной строки.

    Следующие компоненты являются необязательными.

      Компьютер Windows с SSMS:
        для дополнительных действия с SSMS.

      Включение агента SQL Server

      Чтобы использовать агент SQL Server в Linux, нужно сначала включить его на компьютере, где уже установлен SQL Server.

      1. Чтобы включить агент SQL Server, сделайте следующее.
      1. Перезапустите SQL Server с помощью следующей команды.

      Начиная с версии SQL Server 2017 с накопительным пакетом обновления 4, агент SQL Server включается в пакет mssql-server и по умолчанию отключен. Сведения о настройке агента в версиях, предшествующих накопительному пакету обновления 4, см. в статье Установка агента SQL Server в Linux.

      Создание образца базы данных

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

      На компьютере Linux откройте сеанс терминала bash.

      Используйте sqlcmd для выполнения команды CREATE DATABASE Transact-SQL.

      Убедитесь, что база данных создана, выведя список баз данных на сервере.

      Создание задания с помощью Transact-SQL

      Приведенные ниже шаги позволяют создать задание агента SQL Server в Linux с помощью команд Transact-SQL. Это задание выполняет ежедневное резервное копирование образца базы данных SampleDB.

      Для выполнения этих команд можно использовать любой клиент T-SQL. Например, в Linux можно использовать sqlcmd или Visual Studio Code. С удаленного сервера Windows Server вы также можете выполнять запросы в SQL Server Management Studio (SSMS) или использовать пользовательский интерфейс для управления заданиями, как описано в следующем разделе.

      Используйте sp_add_job для создания задания Daily SampleDB Backup .

      Вызовите sp_add_jobstep, чтобы создать шаг задания, создающий резервную копию базы данных SampleDB .

      Затем создайте ежедневное расписание для задания с помощью sp_add_schedule.

      Подключите расписание задания к заданию с помощью sp_attach_schedule.

      Используйте sp_add_jobserver, чтобы назначить задание целевому серверу. В этом примере целевым объектом является локальный сервер.

      Запустите задание с помощью sp_start_job.

      Создание задания с использованием SSMS

      Кроме того, с помощью SQL Server Management Studio (SSMS) в Windows можно удаленно создавать задания и управлять ими.

      Запустите SSMS в Windows и подключитесь к своему экземпляру SQL Server в Linux. Дополнительные сведения см. в статье Управление SQL Server в Linux с помощью SSMS.

      Убедитесь, чтобы создан образец базы данных с именем SampleDB.

      Убедитесь, что агент SQL установлен и настроен правильно. Найдите знак "плюс" рядом с агентом SQL Server в обозревателе объектов. Если агент SQL Server не включен, попробуйте перезапустить службу mssql-server в Linux.

      Проверка установки агента SQL Server

      Создание задания

      Присвойте заданию имя и создайте шаг задания.

      Создание шага задания

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

      Подсистема заданий

      Действие шага задания

      Создайте расписание задания.

      Снимок экрана: диалоговое окно "Новое задание" с выделенными параметрами "Расписания" и "Создать".

      Снимок экрана: диалоговое окно "Новое задание" с выделенной кнопкой "ОК".

      Запустите ваше задание.

      Next Steps

      В этом руководстве вы узнали, как выполнять следующие задачи:

      • Установка агента SQL Server в Linux
      • Использование Transact-SQL и системных хранимых процедур для создания заданий
      • Создание задания, выполняющего ежедневное резервное копирование базы данных
      • Использование пользовательского интерфейса SSMS для создания заданий и управления ими

      Далее вы можете изучить другие возможности для создания заданий и управления ими.

      Если на экране появляется приветствие mysql, то всё прошло ok.

      Для выхода из командной строки mysql можно написать exit, в linux достаточно нажать ctrl+C. Теперь можно писать любые mysql-запросы. Чтобы запрос выполнился, в конце обязательно нужно поставит точку с запятой ";". При написании длинных запросов удобно делать enter`ом переход на следующую строку. А после полного написание запроса поставить ";" и нажать "enter".

      Для работы с конкретной базой данных нужно её выбрать с помощью оператора use. Показать все базы данных:

      Результатом будет что то вроде этого:

      Выбрать базу данных jeka:

      Посмотреть названия всех таблиц в конкретной базе данных (после выполнения use):

      Просмотреть структуру таблицы (имена и тип полей):

      Достать информацию о юзере с >

      Бэкап структуры таблицы, а точнее sql-запрос на её создание

      Если в конце запроса поставить не ; а \G, то результат будет показан другим образом - иногда весьма удобно, если таблица имеет много полей:

      mysql использования /G вместо; дебаг запроса.

      Посмотреть, какие запросы выполняются в данный момент на сервере MySQL:

      Учтите, что будут отображены еще не выполненные (активные) запросы, поэтому show processlist; актуальная команды только для нагруженных БД, в других случаях маловероятно, что команда что то покажет.

      Подробнее о том, как изменять структуру mysql-таблиц (alter table).

      Что делать если вижу знаки вопросов вместо текста в MySQL?

      Это проблема с кодировкой. Вероятно в my.ini файле mysql-сервера не добавлено:

      Нужно добавить в .ini файл либо выполнить в консоли команду "SET NAMES utf8", после чего во время текущей сессии отображаться русский текст в mysql-консоли будет без проблем:

      Как сделать бэкап базы mysql через консоль Linux?

      Сделать бэкап базы database в файл dump_name.sql

      [username] – имя пользователя который имеет доступ к базе данных.
      [password] – пароль пользователя.
      [database] – имя базы данных.
      [dump_name.sql] – имя файла, дампа на выходе.

      Развернуть базу из файла через командную строку

      [username] – имя пользователя который имеет доступ к базе данных.
      [password] – пароль пользователя.
      [database] – имя базы данных.
      [dump_to_restore.sql] – имя файла, из которого поднимаем базу

      Сделать дамп структуры одной таблицы mysql (без данных):

      Например, задампим таблицу users из базы данных mydatabase:

      Развернуть mysql-dump в БД с именем database_name:

      Ещё одна интересная штука. Выполнять из консоли, не требуется предварительно подключаться к mysql (mysql>). Вывести список таблиц базы данных, не подключаясь непосредственно к mysql:

      Заключение

      Может показаться, что писать запросы в командной строке не удобно. Но это заблуждение. На слабых машинах phpmyadmin работает не так шустро как хотелось бы. Тем более не на всех серверах стоят морды с phpmyadmin, adminer и т.д. Linux + mysql в терминале реально повысили мою производительность.

      Поисковые запросы , по которым приходили пользователи


      Дата добавления: 9 лет назад mysql

      Комментарии 2

      Viktor, спасибо. Судя по скринам, штука интересная.
      Правда, уж больно много зависимостей она имеет.. Как решу проблему с зависимостями, отпишусь.

      SQL*Plus - программа для работы с СУБД Oracle посредством командной строки. Используя SQL*Plus можно выполнять команды SQL и PL/SQL в интерактивном режиме или используя сценарий.

      Основное преимущество SLQ*Plus - доступность, т.к. инструмент доступен практически всегда, когда в системе установлен Oracle. При этом это достаточно мощный инструмент, используя который можно решать различные задачи на удаленных машинах.

      К написанию этой статьи меня подтолкнула книга "Oracle SQL*Plus: The Definitive Guide, 2nd Edition", написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.

      При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.

      Область возможного использования SQLplus при этом гораздо шире, например - построение отчетов, в том числе в формате HTML.

      Параметры, подключение к базе, запуск скриптов

      Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:

      Выполнение SQL запросов

      Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.

      Запрос может быть выполнен тремя способами:

      • точка с запятой в конце запроса
      • строка с слешем "/" после запроса
      • пустая строка после запроса (будет помещен в буфер, но не выполнен немедленно)

      Выполнение PL/SQL блоков

      Пример PL/SQL блока:

      Правила выполнения PL/SQL блоков:

      • Первое слово в PL/SQL блоке должно быть из списка: BEGIN, DECLARE, CREATE PROCEDURE,
        CREATE FUNCTION, CREATE TRIGGER, CREATE PACKAGE, CREATE TYPE, CREATE TYPE BODY. Регистр не важен.
      • Блок может состоять из нескольких строк
      • Можно вставлять /* комментарии */, они также могут быть на несколько строк
      • Пустые строки не разрешены внутри блока

      Сигнал к выполнению блока может быть подан двумя путями:

      • Строка, содержащая только слеш "/" после блока - выполнить сразу
      • Строка, содержащая точку "." после блока - поместить в буфер. Содержимое буфера может быть выведено командой LIST и выполнено, путем указания одиночного слеша "/" или команды RUN.

      Одиночное выражение PL/SQL может быть выполнено, используя:

      В случае ошибок, при выполнении процедуры, можно отобразить их выполнив команду:

      Работа с переменными

      Переменные могут быть заданы двумя способами:

      Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.

      Если была определена &&variable, и скрипт запущен повтороно в ходе той же сессии работы с SQLplus - будет использовано старое значение переменной. Чтобы этого избежать - можно запрашивать интерактивный ввод в скрипте принудительно, испольтзуя команду:

      ACCEPT можно использовать для валидации:

      Для ввода дат в определенном формате:

      SQL*Plus поддерживает четыре типа переменных: CHAR, NUMBER, BINARY_FLOAT, and BINARY_DOUBLE. При вводе с клавиатуры переменная будет типа CHAR.

      Несмотря на это, можно использовать NEW_VALUE, чтобы задать числовую переменную, полученную как результат запроса.

      Bind-переменные могут использоваться для передачи данных между PL/SQL и SQL блоками:

      Присвоить bind-переменной значение &-переменной:

      Вывести значение bind-переменной:

      Присвоить &-переменной значение bind-переменной:

      Получаем OUT-параметр процедуры в bind-переменную:

      Условное выполнение в SQLplus:

      Пример скрипта, принимающего несколько переменных на вход в формате c возможностью задать дефолтные значения:

      Настройки выполнения скриптов

      Действуют на протяжении сессии в SQLplus.

      Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:

      Читайте также: