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


2036

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

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

database_name < file.sql

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

  • Как я могу импортировать этот файл без проблем?
  • Нужно ли сначала создавать базу данных?


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опции), прежде чем вы сможете импортировать ее.


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;

@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 успешно загружен.

2
Укажите путь к папке с каталогом mysql и нажмите
— Рамеш Парик

46

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

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Это сработало для меня, используя 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

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


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

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 

6

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

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

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

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

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


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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.