Как импортировать файл SQL с помощью командной строки в MySQL?

2036

У меня есть .sqlфайл с экспортом из phpMyAdmin. Я хочу импортировать его на другой сервер с помощью командной строки.

У меня установлена Windows Server 2008 R2. Я поместил .sqlфайл на диск C , и я попробовал эту команду

database_name < file.sql

Это не работает. Я получаю синтаксические ошибки.

  • Как я могу импортировать этот файл без проблем?
  • Нужно ли сначала создавать базу данных?
Jaylen
источник
7
возможный дубликат Восстановить файл дампа MYSQL с командной строкой
Билл Карвин
2
возможный дубликат stackoverflow.com/questions/11407349/…
AZinkey
8
Что с этими двойными парнями? Это действительно полезный вопрос со своей целью
Валентино Перейра
@ValentinoPereira вы проверили исходные даты вопроса, прежде чем определить дубликаты, ребята
AZinkey
Можете ли вы поделиться воспроизводимым примером? database < file.sqlне похоже на какую-либо команду для меня, и если вы видите некоторые синтаксические ошибки, пожалуйста, поделитесь ими
Nico Haase

Ответы:

3776

Пытаться:

mysql -u username -p database_name < file.sql

Проверьте параметры MySQL .

Примечание-1: лучше использовать полный путь к файлу SQL file.sql.

Примечание-2: Используйте -Rи --triggersдля сохранения процедур и триггеров исходной базы данных. Они не копируются по умолчанию.

Примечание-3 Возможно, вам придется создать (пустую) базу данных из mysql, если она еще не существует и экспортированный SQL не содержит CREATE DATABASE(экспортируется с помощью --no-create-dbили -nопции), прежде чем вы сможете импортировать ее.

Bansi
источник
2
Когда я запускаю файл из такой программы, как Toad, я не получаю никакой ошибки, но когда я запускаю его из командной строки, я получаю ошибку, о которой упоминал
Jaylen
110
Обратите внимание, что да, вы должны создать (пустую) базу данных из mysql, если она еще не существует, прежде чем вы сможете импортировать ее.
Скиппи ле Гран Гуру
17
Да, не забудьте создать пустую базу данных (если база данных ранее не существует) из консоли MySQL, например, так:CREATE DATABASE db-name;
Qasim
3
Убедитесь, что в файле резервной копии нет «use 'original_db” ». Хотя я указал восстановление новой БД "mysql new_db <dump.sql", файл дампа sql имел это и переписал мою живую БД. Не уверен, есть ли возможность принудительно использовать указанную БД и игнорировать «use 'original_db» в файле sql
Shaakir
7
@ Джо, да, если у вас есть пробел между «-p» и «паролем», он думает, что «пароль» - это имя базы данных. Кроме того, вы можете ввести «-p» без вашего пароля, а затем вам будет предложено ввести пароль при нажатии Enter.
NotJay
766

Обычное использование mysqldump для создания резервной копии всей базы данных:

shell> mysqldump db_name > backup-file.sql

Вы можете загрузить файл дампа обратно на сервер следующим образом:

UNIX

shell> mysql db_name < backup-file.sql

То же самое в командной строке Windows :

mysql -p -u [user] [database] < backup-file.sql

PowerShell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL командная строка

mysql> use db_name;
mysql> source backup-file.sql;
vladkras
источник
@Mike Вы пытаетесь запустить его в mysql>командной строке? Вы должны использовать оболочку вместо.
vladkras
Как я могу использовать Shell? Я использую mysql5.6 на Windows Server 2008
Jaylen
Используя Windows PowerShell, набрав MySQL db_name <file.sql, я получаю следующую ошибку: оператор «<» зарезервирован для будущего использования
Jaylen
31
Будьте осторожны с использованием>, чтобы перенаправить вывод mysqldump в файл, особенно если вы хотите контролировать кодировку. Вместо этого вы, вероятно, захотите использовать параметр --result-file, чтобы кодирование не контролировалось оболочкой / ОС.
Бернард Чен
1
Правильно, но ... почему бы просто не бежать mysqlпрямо из Powershell?
Чарльз Вуд
330

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

Вам просто нужно сделать следующее:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Пареш Бехеде
источник
5
Есть ли способ сделать это в одной командной строке команды mysql, используемой для импорта?
Воломике
Лучший ответ inho. Это была sourceкоманда, которую я забыл. Большинство из нас хочет сделать это в то время как мы которые вошли в системе как команда автономной среди других команд, а не стандартный вход> инъекционные> выхода из системы Oneliner в верхней части Google SERPs.
Давидконрад
19
Я согласен, что это лучший ответ . autocommit=0Часть сделал мир разницы с точки зрения скорости.
aexl
2
будет autocommit=0работать на больших файлах? как 8 ГБ файл sql.
новичок
3
Не всегда нужно выключать autocommit. Стоит проверить дамп базы данных в редакторе, он может уже начаться SET autocommit=0;.
hashchange
127

Среди всех ответов, на приведенную выше проблему, это лучший:

 mysql> use db_name;
 mysql> source file_name.sql;
Манодж Кумар
источник
не удалось сообщить выше при ошибке, что БД уже существует, но это, кажется, работает
Luk
74

Мы можем использовать эту команду для импорта SQL из командной строки:

mysql -u username -p password db_name < file.sql

Например, если имя пользователя rootи пароль password. И у вас есть имя базы данных, как bankи файл SQL bank.sql. Затем просто сделайте так:

mysql -u root -p password bank < bank.sql

Помните, где находится ваш файл SQL. Если ваш файл SQL находится в Desktopпапке / каталоге, перейдите в каталог рабочего стола и введите команду следующим образом:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

И если вы находитесь в Projectкаталоге, а ваш файл SQL находится в Desktopкаталоге. Если вы хотите получить к нему доступ из Projectкаталога, то вы можете сделать так:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Амрит Дхунгана
источник
22
Между -pиpassword
Ejaz
Jap. Это не будет работать. Правильно было быmysql -u root -p"password" bank < bank.sql
Армин
4
почему вы просто не можете ответить в одну строку? mysql -u username -ppassword db_name < file.sql
Навид
6
хотя это совершенно не связано с этим вопросом / ответом, когда вы работаете с нетривиальными базами данных, предпочитайте НЕ вводить пароль для одной и той же команды в виде обычного текста. Если вы не укажете пароль как часть команды, вам будет предложено ввести пароль, который вы можете ввести безопасно
просит
3
Особенно из-за.bash_history
Нил Чоудхури
64

Самый простой способ импортировать в вашу схему:

Войдите в mysql и выполните команды, упомянутые ниже.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Аммад
источник
5
Это будет работать без команды «use» для дампов с многопользовательской базой данных
Hayden Thring
1
Я пытался импортировать дамп из базы данных с другим именем, но с той же структурой, правильный ответ, выбранный автором, не сработал, он создал новую базу данных с именем базы данных в файле дампа. Этот ответ прямо здесь сделал то, что я хотел, спасибо человеку
Wuelber Castillo
1
Великий! то, что я искал!
Сергей Захаренко
2
это также контролирует выполнение сценария, намного лучше, чем другие ответы
refex
61

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

mysql -u username -p database_name < file.sql

если вам не нужно создавать соответствующую базу данных (пустую) в MySQL, для этого сначала войдите в MySQLконсоль, выполнив следующую команду в терминале или в cmd

mysql -u userName -p;

И при появлении запроса укажите пароль.

Далее создайте базу данных и используйте ее:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Затем импортируйте файл sqlили dumpфайл в базу данных из

mysql> source pathToYourSQLFile;

Примечание. Если ваш терминал находится не там, где находится файл dumpили sql, используйте относительный путь, указанный выше.

Касун Сиямбалапития
источник
В вашем ответе было базовое решение для начинающих пользователей MySQL, таких как я: 1.создайте базу данных, если ее не существует. 2.Укажите исходный файл на созданную базу данных для импорта данных / метаданных.
Сумант Лазарь
60
  1. Откройте командную строку MySQL
  2. Введите путь к вашей папке mysql bin и нажмите Enter
  3. Вставьте ваш файл SQL в binпапку сервера MySQL.
  4. Создать базу данных в MySQL.
  5. Используйте эту конкретную базу данных, куда вы хотите импортировать файл SQL.
  6. Тип source databasefilename.sqlиEnter
  7. Ваш файл SQL успешно загружен.
user4412947
источник
2
Укажите путь к папке с каталогом mysql и нажмите
Рамеш Парик
46

Решение, которое сработало для меня ниже:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Shiks
источник
Это сработало для меня, используя MySQL Command Line Client, после помещения моего файла sql в соответствующий проводник / bin. Спасибо
Klewis
3
Немного медленно, но не останавливается между ними и не говорите, что сервер MySQL ушел.
Яскаран Сингх
39

Чтобы вывести базу данных в файл SQL, используйте следующую команду.

mysqldump -u username -p database_name > database_name.sql

Чтобы импортировать файл SQL в базу данных (убедитесь, что вы находитесь в том же каталоге, что и файл SQL, или укажите полный путь к файлу), выполните:

mysql -u username -p database_name < database_name.sql
Адельке Акинада
источник
37

Перейдите в каталог, где у вас есть исполняемый файл MySQL. -uдля имени пользователя и -pзапросить пароль:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
источник
5
Я думаю, что это было бы более полезно для ФП и для дальнейших вопросов, когда вы добавите некоторые пояснения к своему намерению.
Репортер
Это будет работать, только если у вас есть mysql.exe, определенный в ваших переменных среды Windows. Если нет, вы должны ввести весь путь к файлу mysql.exe. И ваш синтаксис неверен. Например: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Дополнительная информация здесь: wpy.me/en/blog/…
wappy
31

Я думаю, стоит упомянуть, что вы также можете загрузить сжатый (сжатый) файл, zcatкак показано ниже:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Франческо Касула
источник
28

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

mysql -u username -p password dbname < dump.sql

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

mysql -u username -p password < dump.sql
Leopathu
источник
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
user3546602
источник
17

Для импорта нескольких файлов SQL одновременно используйте это:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Для простого импорта:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Для WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

Для XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Абдул Рехман Джанджуа
источник
16

Вам не нужно указывать имя базы данных в командной строке, если файл .sql содержит CREATE DATABASE IF NOT EXISTS db_nameиUSE db_name операторы.

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

Рувим
источник
14

Импортировать базу данных

  1. Перейти на диск:

    command: d:
  2. Вход в MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Это попросит PWD. Введите это:

    pwd
  4. Выберите базу данных

    use DbName;
  5. Укажите имя файла

    \.DbName.sql
Притам Чаудхари
источник
11

Перейдите в каталог, где у вас есть MySQL.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Также для сброса всех баз данных используйте эту -all-databasesопцию, и имя баз данных больше не нужно указывать.

mysqldump -u username -ppassword all-databases > dump.sql

Или вы можете использовать некоторые клиенты с графическим интерфейсом, такие как SQLyog, чтобы сделать это.

Сатиш Д
источник
11

Использование:

mysql -u root -p password -D database_name << import.sql

Используйте справку MySQL для деталей mysql --help.

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

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Что интересно, если мы импортируем большую базу данных и не имеем индикатор выполнения. Используйте Pipe Viewer и посмотрите передачу данных через канал

Для Mac brew install pv

Для Debian / Ubuntu apt-get install pv.

Для других, обратитесь к pv - Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36
Шива Правин
источник
Для Centos:yum install pv
Джонни
9

В то время как большинство ответов здесь просто упоминают простую команду

mysql -u database_user -p [db_name] <database_file.sql

сегодня довольно часто в базах данных и таблицах используется сопоставление utf8, когда этой команды недостаточно. Имея utf8-сопоставление в экспортированных таблицах, необходимо использовать эту команду:

mysql -u database_user -p --default-character-set = utf8 [имя_библиотеки] <database_file.sql

Surley это работает и для других кодировок, как показать правильную запись можно увидеть здесь:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

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

Для команды есть еще несколько параметров, которые перечислены и объяснены здесь:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Если вы используете другую версию базы данных, попробуйте поискать соответствующую версию руководства. Упомянутые ссылки относятся к версии MySQL 5.7.

Дэвид
источник
9

Для экспорта базы данных:

mysqldump -u username -p database_name > file.sql

Для импорта базы данных:

mysql -u username -p database_name < file.sql
user777388
источник
8

Следующая команда работает для меня из командной строки (cmd) в Windows 7 на WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Виктор
источник
7

Я подумал, что это может быть полезно для тех, кто использует Mac OS X :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Заменить xamppна mampили другие веб-серверы.

Гири
источник
6

Иногда также определяется порт, а также IP-адрес сервера этой базы данных ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 
JohnSharath
источник
6

Импорт в базу данных:

mysql -u имя пользователя -p имя_базы_данных </ путь к файлу / имя_файла.sql

Экспорт из базы данных:

mysqldump -u имя пользователя -p имя_базы_данных> / путь к файлу / имя_файла.sql

После этих команд в командной строке будет запрошен ваш пароль MySQL.

NeeruKSingh
источник
5

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

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
user3728517
источник
5

Следующие шаги помогают загрузить file.sql в базу данных MySQL.

Шаг 1: Загрузить file.sql.zipв любой каталог и распакуйте там
Примечание : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Шаг 2: Теперь перейдите в этот каталог. Пример:cd /var/www/html

Шаг 3: mysql -u username -p database-name < file.sql
введите пароль и дождитесь окончания загрузки.

Рамеш Синха
источник
5

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

Я исправил это так

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
Дэвид Сильва Смит
источник