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

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

database_name < file.sql

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

  • Как я могу без проблем импортировать этот файл?
  • Мне нужно сначала создать базу данных?
2588
Jaylen 16 Июл 2013 в 04:43
8
 – 
Bill Karwin
16 Июл 2013 в 04:47
2
Возможный дубликат stackoverflow.com/questions/11407349/…
 – 
AZinkey
29 Авг 2017 в 17:01
14
Что с этими парнями-дубликатами? Это действительно полезный вопрос, имеющий собственную цель.
 – 
Valentino Pereira
29 Июн 2018 в 15:59
Вы проверили исходные даты вопросов, прежде чем определять повторяющихся парней
 – 
AZinkey
18 Июл 2019 в 10:36
1
После того, как я проверил все ответы ниже, я должен сказать, что вы упустили очень важную подсказку для тех людей, которые хотят помочь. Вы не смогли указать точную команду при выгрузке данных из базы данных.
 – 
Light.G
10 Окт 2020 в 19:26

32 ответа

Лучший ответ

Пытаться:

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

4677
Peter Mortensen 6 Окт 2021 в 14:20
sudo mysql -u username -p database_name < file.sql работает в некоторых случаях.
 – 
Sergio Reis
29 Дек 2021 в 19:31
1
Ага! работает на меня. Я использую mysql 8.0.16
 – 
Harshit Gangwar
21 Янв 2022 в 21:42
2
Итак, -R и --triggers кажутся вариантами для mysqldump, что мне не сразу было ясно, основываясь на ответе. Кроме того, --triggers включен по умолчанию "Эта опция включена по умолчанию; отключите ее с помощью --skip-triggers."
 – 
panda-byte
7 Мар 2022 в 18:03
Эта командная строка бесценна xD
 – 
Tiago
31 Май 2022 в 15:39

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

mysqldump db_name > backup-file.sql

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

< Сильный > Unix

mysql db_name < backup-file.sql

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

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

PowerShell

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

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

mysql> use db_name;
mysql> source backup-file.sql;
969
Peter Mortensen 6 Окт 2021 в 14:31
Я единственный, кто никогда не мог использовать оператор < в mysql? (ubuntu18 / 20)
 – 
T.Todua
10 Июн 2021 в 20:58
6
Понятия не имею, почему примеры Windows включают параметры -u и -p, а пример Unix - нет. Интерфейс для mysql одинаков для обоих, поэтому, скорее всего, вам понадобится та же команда в Unix, которая представлена ​​здесь для Windows.
 – 
Stijn de Witt
21 Июл 2021 в 15:55
Куда кладем backup-file.sql? какой путь он смотрит по умолчанию?
 – 
temirbek
11 Апр 2022 в 12:33
Я иду в C:\Program Files\MySQL\MySQL Server 8.0\bin и запускаю mysql.exe. Войдите в MySQL и внесите вышеуказанные изменения. Это сработало. Спасибо.
 – 
Swati
24 Июн 2022 в 14:10

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

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

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
443
Peter Mortensen 6 Окт 2021 в 15:28
9
Есть ли способ сделать это в одной командной строке в команде mysql, используемой для импорта?
 – 
Volomike
21 Янв 2015 в 23:12
33
Я согласен, что это лучший ответ . Часть autocommit=0 имела огромное значение с точки зрения скорости.
 – 
mehov
24 Май 2016 в 00:36
2
Будет ли autocommit=0 работать с большими файлами? как файл sql размером 8 ГБ.
 – 
newbie
9 Дек 2016 в 08:06
4
Не всегда нужно выключать autocommit. Стоит проверить дамп базы данных в редакторе, он может уже начинаться с SET autocommit=0;.
 – 
hashchange
2 Июл 2018 в 15:32
3
{echo "SET autocommit = 0;"; cat db.sql; echo "COMMIT;";} | mysql -u what -p - это для командных строк, совместимых с posix, не уверен в окнах
 – 
iateadonut
17 Мар 2020 в 10:11

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

 mysql> use db_name;
 mysql> source file_name.sql;
188
Manoj Kumar 18 Авг 2016 в 15:12
 – 
Peter Mortensen
6 Окт 2021 в 19:22
- будет зависеть от размера данных, иначе обычно это быстро.
 – 
Manoj Kumar
7 Окт 2021 в 07:52

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

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

mysql> use your_db_name;

mysql> source /opt/file.sql;
117
Ammad 16 Июл 2019 в 21:38
6
Это будет работать без команды 'use' для дампов с многопользовательской базой данных в ней.
 – 
Hayden Thring
12 Ноя 2018 в 00:24
1
Я пытался импортировать дамп из базы данных с другим именем, но с той же структурой, правильный ответ, выбранный автором, не сработал, он создал новую базу данных, названную в честь базы данных в файле дампа. Этот ответ прямо здесь сделал то, что я хотел, спасибо, чувак
 – 
Wuelber Castillo
13 Ноя 2018 в 20:10
1
Большой! именно то, что я искал!
 – 
Sergei Zahharenko
23 Ноя 2018 в 11:24
3
Это также контролирует выполнение скрипта, намного лучше, чем другие ответы
 – 
refex
11 Окт 2019 в 11:08
Но это не из командной строки в духе вопроса. Он использует оболочку MySQL в интерактивном режиме.
 – 
Peter Mortensen
19 Сен 2021 в 18:55

Мы можем использовать эту команду для импорта 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
mysql -u root -p password bank < bank.sql

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

cd ~/Project
mysql -u root -p password bank < ~/Desktop/bank.sql
89
Peter Mortensen 6 Окт 2021 в 14:40
28
Между -p и password не должно быть пробелов
 – 
Ejaz
19 Авг 2014 в 16:00
Яп. Это не сработает. Правильно было бы mysql -u root -p"password" bank < bank.sql
 – 
Armin
22 Фев 2015 в 17:11
5
Почему ты просто не можешь ответить одной строчкой? mysql -u username -ppassword db_name < file.sql
 – 
Naveed
2 Июл 2015 в 14:11
7
Хотя это совершенно не связано с этим вопросом / ответом, когда вы работаете с нетривиальными базами данных, предпочитайте НЕ вводить пароль для той же команды в виде обычного текста. Если вы не укажете пароль как часть команды, вам будет предложено ввести пароль, который вы можете безопасно ввести.
 – 
asgs
14 Ноя 2017 в 16:22
5
Особенно из-за .bash_history
 – 
Neil
10 Авг 2018 в 02:03

Если у вас уже есть база данных, используйте следующее для импорта файла 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, используйте относительный путь, указанный выше.

72
Peter Mortensen 10 Июл 2019 в 17:40
  1. Откройте командную строку MySQL
  2. Введите путь к вашему каталогу bin mysql и нажмите Enter
  3. Вставьте свой файл SQL в папку bin сервера mysql.
  4. Создайте базу данных в MySQL.
  5. Используйте ту конкретную базу данных, в которую вы хотите импортировать файл SQL.
  6. Введите source databasefilename.sql и Enter .
  7. Ваш файл SQL успешно загружен.
65
Peter Mortensen 19 Мар 2015 в 21:10
2
Введите путь к вашему каталогу bin mysql и нажмите
 – 
Ramesh Pareek
3 Июл 2017 в 14:03

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

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
52
Peter Mortensen 21 Мар 2018 в 21:31
Это сработало для меня, используя клиент командной строки MySQL, после помещения моего файла sql в соответствующий проводник окна просмотра каталога / bin. Спасибо
 – 
klewis
12 Июл 2017 в 16:29
3
Немного медленно, но не останавливается между ними и не говорит, что сервер MySQL ушел.
 – 
Jaskaran Singh
19 Дек 2017 в 14:12

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

mysqldump -u username -p database_name > database_name.sql

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

mysql -u username -p database_name < database_name.sql
44
Peter Mortensen 10 Июл 2019 в 17:44

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

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
41
Peter Mortensen 19 Мар 2015 в 20:57
5
Я думаю, что было бы более полезно для OP и других вопросов, когда вы добавите некоторые пояснения к своему намерению.
 – 
Reporter
8 Сен 2014 в 17:59
Это будет работать, только если у вас есть mysql.exe, определенный в переменных среды Windows. Если нет, вам следует ввести весь путь к файлу mysql.exe. И ваш синтаксис неверен. Например: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p DB_NAME wpy.me/en/blog/…
 – 
wappy
13 Окт 2014 в 16:25

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

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

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

mysql -u username -p password < dump.sql
36
Adeleke Akinade 8 Фев 2018 в 20:50
Спасибо! Я искал это. Импорт всех дампов базы данных MySQL сразу. Более сжатая и короткая версия приведенной выше команды mysql -u root -p < all.sql
 – 
Abhishek Singh
9 Авг 2022 в 21:34

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

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
42
Francesco Casula 1 Мар 2017 в 13:55
В macOS мне пришлось использовать gzcat вместо zcat.
 – 
Melebius
10 Мар 2022 в 14:46
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
24
Peter Mortensen 6 Окт 2021 в 15:43

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

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

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
20
Peter Mortensen 6 Окт 2021 в 19:21

Добавьте параметр --force :

mysql -u username -p database_name --force < file.sql
9
Peter Mortensen 2 Июл 2016 в 12:40

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

mysqldump -u username -p database_name > file.sql

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

mysql -u username -p database_name < file.sql
20
Das_Geek 17 Фев 2020 в 17:50

Для одновременного импорта нескольких файлов 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:

REM 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
19
Peter Mortensen 6 Окт 2021 в 15:57

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

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

18
Peter Mortensen 2 Июл 2016 в 12:37

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

  1. Ехать на машине:

     d:
    
  2. Логин MySQL

     c:\xampp\mysql\bin\mysql -u root -p
    
  3. Он запросит pwd. Введите его:

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

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

     \.DbName.sql
    
17
Peter Mortensen 6 Окт 2021 в 15:46
Предположительно в Windows? Почему необходимо перейти на диск D:? Предполагается, что файл DbName.sql находится в корне диска D:? Вы можете уточнить? Пожалуйста, ответьте редактированием (изменением) вашего ответа, а не здесь, в комментариях ( без «Изменить:», «Обновить:» или аналогичный - вопрос / ответ должен выглядеть так, как если бы он был написан сегодня).
 – 
Peter Mortensen
6 Окт 2021 в 15:45

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

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 — средство просмотра каналов.

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
16
Peter Mortensen 10 Июл 2019 в 17:39
Для Centos: yum install pv
 – 
Jonny
28 Мар 2019 в 05:51

Перейдите в каталог, в котором стоит 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
Peter Mortensen 19 Мар 2015 в 20:49
Работает ли это со странным тире (-) рядом с "all-databases" (также в первой ревизии)?
 – 
Peter Mortensen
21 Сен 2021 в 23:44

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

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

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

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

Соответствующий экспорт может быть выполнен с помощью

mysqldump -u database_user -p --default-character-set=utf8 [db_name] > database_file.sql

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

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.

ИЗМЕНИТЬ:
Те же параметры работают и для mysqldump. Таким образом, хотя команды для экспорта и импорта отличаются, упомянутые параметры — нет. Тем не менее, в руководстве есть специальный сайт, описывающий параметры mysqldump: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

35
David 13 Апр 2022 в 17:19

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

mysql> create new_database;
mysql> use new_database;
mysql> source (Here you need to import the path of the SQL file);

E.g.:
mysql> source E:/test/dump.sql;

Вам необходимо использовать косую черту (/) даже в Windows, например, E: /test/dump.sql вместо E: \ test \ dump.sql

Или двойные обратные косые черты (\\) из-за экранирования, то есть E: \\ test \\ dump.sql

30
Peter Mortensen 6 Окт 2021 в 16:59
Это действительно сработало для меня. Предложение с более чем 4000 голосами не прошло.
 – 
Mladen
19 Янв 2021 в 16:50
Вам нужно использовать косую черту (/) даже в Windows, например E: /test/dump.sql вместо E: \ test \ dump.sql или двойные обратные косые черты (\\) из-за экранирования, то есть E: \\ test \ dump.sql
 – 
Zdeněk Gromnica
8 Фев 2021 в 16:05
Но это не из командной строки в духе вопроса. Он использует оболочку MySQL в интерактивном режиме.
 – 
Peter Mortensen
19 Сен 2021 в 18:56

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

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
8
Peter Mortensen 19 Мар 2015 в 21:14

Вы можете попробовать этот запрос.

Экспорт:

mysqldump -u username –-password=your_password database_name > file.sql

Импортировать:

mysql -u username –-password=your_password database_name < file.sql

И подробно по этой ссылке:

https://chartio.com/resources/tutorials/importing-from-and-exporting-to-files-using-the-mysql-command-line/

10
Md Shariful Islam 11 Апр 2019 в 15:24

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

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

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

7
Peter Mortensen 19 Мар 2015 в 20:58

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

mysql -u имя пользователя -p имя_базы_данных

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

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

После этих команд появится запрос на ввод пароля MySQL.

8
Peter Mortensen 10 Июл 2019 в 17:37

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

Ключевые отличия для меня:

  1. База данных должна существовать в первую очередь
  2. Между -p и паролем не должно быть пробелов

shell> mysql -u root -ppassword #note: no space between -p and password
mysql> CREATE DATABASE databasename;
mysql> using databasename;
mysql> source /path/to/backup.sql

Я использую Fedora 26 с MariaDB.

8
Peter Mortensen 10 Июл 2019 в 17:42
Но это не из командной строки в духе вопроса. Он использует оболочку MySQL в интерактивном режиме.
 – 
Peter Mortensen
19 Сен 2021 в 18:54

Для информации у меня просто был root + по умолчанию без пароля. Это не сработало со всеми предыдущими ответами.

  • Я создал нового пользователя со всеми привилегиями и паролем. Это сработало.

  • -ppassword БЕЗ ПРОБЕЛА.

7
Peter Mortensen 10 Июл 2019 в 17:46

Ввод учетных данных в командной строке - не лучшая идея. Вышеупомянутые ответы хороши, но не упоминают

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

Где etc / myhost.cnf - это файл, содержащий хост, пользователя и пароль, и вы избегаете раскрытия пароля в командной строке. Вот образец,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword
8
ChuckCottrill 25 Фев 2017 в 04:18
Однако командная строка является изменчивой (и если у вас нет кейлоггера или человека, стоящего за вашей спиной, я бы ожидал, что он будет безопасным при локальном выполнении), тогда как файл является постоянным, поэтому должен быть более высокий риск, особенно. когда это в виде обычного текста
 – 
George Birbilis
30 Мар 2018 в 01:08
2
... однако команда mysql действительно предупреждает: «mysql: [Предупреждение] Использование пароля в интерфейсе командной строки может быть небезопасным».
 – 
George Birbilis
30 Мар 2018 в 01:24

Попробуйте этот код.

mysql -u username -p database_name < file.sql

Для получения дополнительной информации: Как импортировать файл SQL с помощью командной строки в MySQL

16
Peter Mortensen 6 Окт 2021 в 17:01
1
Чем это отличается от предыдущих ответов?
 – 
Peter Mortensen
6 Окт 2021 в 17:02