Як імпортувати файл SQL за допомогою командного рядка в MySQL?


2035

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

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

database_name < file.sql

Це не працює. Я отримую синтаксичні помилки.

  • Як я можу без проблем імпортувати цей файл?
  • Чи потрібно спочатку створити базу даних?


2
можливо дублікат stackoverflow.com/questions/11407349 / ...
AZinkey

7
Що з цими дублюючими хлопцями? Це справді корисне питання з його власною метою
Валентино Перейра

@ValentinoPereira Ви перевірили оригінальні дати запитання перед тим, як визначити дублюючих хлопців
AZinkey

Чи можете ви поділитися відтворюваним прикладом? database < file.sqlне схожа на будь-яку команду для мене, і якщо ви бачите деякі синтаксичні помилки, будь ласка, поділіться ними
Nico Haase

Відповіді:


3772

Спробуйте:

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, якщо вона вже не існує, перш ніж ви зможете її імпортувати.
Skippy le Grand Gourou

17
На жаль, не забудьте створити порожню Базу даних (якщо db раніше не існує), з консолі MySQL так:CREATE DATABASE db-name;
Qasim

3
Обов’язково переконайтесь, що у файлі резервної копії немає "використання" original_db ". Хоча я вказав відновлення до нової БД "mysql new_db <dump.sql", файл дампа sql мав це в, і він перезаписав мою живу БД. Не впевнений, чи є можливість змусити його використовувати вказаний БД та ігнорувати "використання 'original_db'" у файлі sql
Shaakir

7
@Joe, так, якщо у вас пробіл між '-p' та 'password', він вважає, що "пароль" - це ім'я бази даних. Крім того, ви можете ввести '-p' без пароля, і тоді вам буде запропоновано ввести пароль, коли ви натиснете клавішу Enter.
NotJay

765

Загальне використання 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?
Чарльз Вуд

328

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

Вам просто потрібно зробити наступне:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

5
Чи є спосіб це зробити в одному командному рядку команди mysql, яка використовується для імпорту?
Воломіке

Найкраща відповідь. Це була sourceкоманда, яку я забув. Більшість з нас хоче зробити це в той час як ми які увійшли в системі як команда автономної серед інших команд, а не стандартний вхід> ін'єкційні> виходу з системи Oneliner у верхній частині Google SERPs.
davidkonrad

19
Я згоден, що це найкраща відповідь . autocommit=0Частина зробив світ різниці з точки зору швидкості.
aexl

2
чи autocommit=0буде робота над більшими файлами? як 8gb sql файл.
новачок

3
Не завжди потрібно вимикати autocommit. Варто перевірити скидання бази даних в редакторі, це може вже початися з SET autocommit=0;.
hashchange

127

Серед усіх відповідей, для проблеми, описаної вище, найкращий:

 mysql> use db_name;
 mysql> source file_name.sql;

поради вище, не вдалося помилку, що db вже існує, але це, здається, працює
Luky

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

Яп. Це не спрацювало б. Правильно було бmysql -u root -p"password" bank < bank.sql
Армін

4
чому ви просто не можете відповісти одним рядком? mysql -u username -ppassword db_name < file.sql
Naveed

6
хоча це абсолютно не пов'язане з цим питанням / відповіддю, коли ви працюєте з нетривіальними базами даних, віддайте перевагу НЕ вводити пароль тієї ж команди в простому тексті. Якщо не вказати пароль як частину команди, вам буде запропоновано ввести пароль, який ви можете безпечно ввести
asgs

3
Тим більше через.bash_history
Ніл Чоуддурі

64

Найпростіший спосіб імпорту у вашу схему:

Увійдіть до mysql та випустіть команди, що згадуються нижче.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
Це буде працювати без команди "використання" для смітників з мультилепею db в ньому
Hayden Thring

1
Я намагався імпортувати дамп із бази даних з іншим ім’ям, але з тією ж структурою, правильна відповідь, вибрана автором, не працювала, вона створила нову базу даних, іменовану базою даних у файлі дампа. Ця відповідь саме тут зробила те, що я хотів, дякую людині
Уельбер Кастільо

1
чудово! exaclty, що я шукав!
Сергій Захаренко

2
це також стежить за виконанням сценарію, набагато краще, ніж інші відповіді
referenx

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
ype шлях вашого каталогу скриньки mysql і натисніть
Ramesh Pareek

46

Рішення, яке працювало для мене, знаходиться нижче:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Це працювало для мене, використовуючи MySQL Command Line Client, після розміщення мого файлу sql у відповідному / bin каталозі Windows Explorer. Дякую
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
Я думаю, що було б корисніше для ОП та додаткових питань, коли ви додасте пояснення до свого наміру.
Репортер

Це буде працювати тільки в тому випадку, якщо у ваших змінних середовища Windows визначено mysql.exe. Якщо ні, то слід ввести весь шлях до файлу 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

Я думаю, що варто згадати, що ви також можете завантажити gzipped (стислий) файл, 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

Або ви можете використовувати для цього деякі клієнти GUI, такі як 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
Jonny


9

Хоча більшість відповідей тут просто згадують просту команду

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

сьогодні досить часто зустрічається, що в базах даних і таблицях є utf8-зіставлення, де цієї команди недостатньо. Маючи utf8-зіставлення в експортованих таблицях, потрібно використовувати цю команду:

mysql -u database_user -p - default-character-set = utf8 [db_name] <database_file.sql

Surley це працює і для інших шаблонів, як показати правильну нотацію, можна побачити тут:

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

В одному коментарі також зазначалося, що якщо база даних ніколи не існує, спочатку слід створити порожню базу даних. У деяких випадках це може бути правильно, але це залежить від файлу експорту. Якщо експортований файл вже містить команду створення бази даних, то базу даних ніколи не потрібно створювати на окремому кроці, що навіть може призвести до помилки при імпорті. Тож при імпорті доцільно спочатку подивитися файл, щоб знати, які команди туди включені, при експорті бажано відзначити налаштування, особливо якщо файл дуже великий і важко читати в редакторі.

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

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

Якщо ви використовуєте іншу версію бази даних, подумайте також про пошук відповідної версії посібника. Згадані посилання стосуються версії 5.7 MySQL.


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 database_name </ file file / file_name.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.