MySQL의 명령 줄을 사용하여 SQL 파일을 가져 오려면 어떻게합니까?


2035

에서 내 보낸 .sql파일이 있습니다 phpMyAdmin. 명령 줄을 사용하여 다른 서버로 가져오고 싶습니다.

나는이 윈도우 서버 2008 R2 설치를. 나는 배치 .sql상의 파일을 C 드라이브 , 나는이 명령을 시도

database_name < file.sql

그것은 작동하지 않습니다. 구문 오류가 발생합니다.

  • 문제없이이 파일을 가져 오려면 어떻게해야합니까?
  • 먼저 데이터베이스를 만들어야합니까?



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
나는 두꺼비 나는 같은 프로그램에서 파일을 실행하면 오류를 얻을하지만 명령 줄에서 실행할 때 나는 내가 언급 한 오류 얻을
Jaylen

110
예, mysql에서 (비어있는) 데이터베이스가 존재하지 않는 경우이를 작성해야 가져 오기 전에주의해야합니다.
Skippy le Grand Gourou

17
예, MySQL 콘솔에서 다음과 같이 빈 데이터베이스 (DB가 존재하지 않는 경우)를 만들어야합니다.CREATE DATABASE db-name;
Qasim

3
백업 파일에 "use 'original_db'"가 없는지 확인하십시오. 새 DB "mysql new_db <dump.sql"로 복원을 지정했지만 sql 덤프 파일에 해당 파일이 있으며 내 라이브 DB를 덮어 썼습니다. 지정된 DB를 사용하도록 강제하고 sql 파일의 "use 'original_db'"를 무시하는 옵션이 있는지 확실하지 않은 경우
Shaakir

7
@Joe, 그렇습니다. '-p'와 'password'사이에 공백이 있으면 'password'가 데이터베이스 이름이라고 생각합니다. 또는 비밀번호없이 '-p'를 입력하면 Enter 키를 누를 때 비밀번호를 묻는 메시지가 표시됩니다.
NotJay

765

mysqldump 의 일반적인 용도 는 전체 데이터베이스를 백업하는 것입니다.

shell> mysqldump db_name > backup-file.sql

다음과 같이 덤프 파일을 서버에 다시로드 할 수 있습니다.

유닉스

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은 어떻게 사용합니까? Windows Server 2008에서 mysql5.6을 사용하고 있습니다.
Jaylen

MySQL db_name <file.sql을 입력하는 Windows PowerShell 사용 다음 오류가 발생합니다. '<'연산자는 향후 사용을 위해 예약되어 있습니다.
Jaylen

31
특히 인코딩 제어를 원하는 경우>를 사용하여 mysqldump 출력을 파일로 리디렉션하는 것에주의하십시오. 대신 --result-file 매개 변수를 사용하여 인코딩이 셸 / OS에 의해 제어되지 않도록 할 수 있습니다.
Bernard Chen

1
mysql그렇습니다 . 왜 Powershell에서 바로 실행하지 않습니까?
Charles Wood

328

대용량 파일을 가져 오는 데 걸리는 시간과 관련하여 가장 중요한 것은 MySQL의 기본 설정이입니다 autocommit = true. 파일을 가져 오기 전에 설정을 해제 한 다음 가져 오기가 gem처럼 작동하는지 확인해야합니다.

다음 작업을 수행하면됩니다.

mysql> use db_name;

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

5
가져 오기에 사용되는 mysql 명령의 단일 명령 줄에서이를 수행하는 방법이 있습니까?
Volomike

최고의 답변 inho. source내가 잊어 버린 명령 이었다 . 우리들 대부분은 우리가 동안이 작업을 수행 할 수 있습니다 다른 명령들 사이 독립형 명령이 아닌 표준 로그인으로 로그인> 분사> 로그 아웃 oneliner 구글 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
공간 사이가 안 -ppassword
Ejaz

일본인 이것은 작동하지 않습니다. 정답은mysql -u root -p"password" bank < bank.sql
Armin

4
왜 한 줄로 대답 할 수 없습니까? mysql -u username -ppassword db_name < file.sql
Naveed

6
사소하지 않은 데이터베이스로 작업 할 때는이 질문 / 답변과 완전히 관련이 없지만 동일한 명령에 암호를 일반 텍스트로 입력하지 않는 것이 좋습니다. 명령의 일부로 비밀번호를 지정하지 않으면 안전하게 입력 할 수있는 비밀번호를 묻는 프롬프트가 표시됩니다.
asgs

3
특히 때문에.bash_history
닐 Chowdhury

64

스키마로 가져 오는 가장 쉬운 방법 :

mysql에 로그인하고 아래 언급 명령을 발행하십시오.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
이것은
multilpe

1
다른 이름을 가진 데이터베이스에서 덤프를 가져 오려고했지만 동일한 구조로 저자가 선택한 올바른 답변이 작동하지 않아 덤프 파일의 데이터베이스 이름을 딴 새 데이터베이스를 만들었습니다. 이 답변은 바로 여기에 있습니다. 감사합니다
Wuelber Castillo

1
큰! 내가 찾던 exaclty!
Sergei Zahharenko 8

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.소스 파일을 생성 된 데이터베이스로 지정하여 데이터 / 메타 데이터를 가져옵니다.
Sumanth Lazarus

60
  1. MySQL 명령 행을여십시오
  2. mysql bin 디렉토리의 경로를 입력하고 Enter
  3. SQL 파일 bin을 mysql 서버 의 폴더에 붙여 넣습니다 .
  4. MySQL에서 데이터베이스를 작성하십시오.
  5. SQL 파일을 가져 오려는 특정 데이터베이스를 사용하십시오.
  6. 입력 source databasefilename.sqlEnter
  7. SQL 파일이 성공적으로 업로드되었습니다.

2
당신의 mysql bin 디렉토리의 경로를 ype를 누르십시오
Ramesh Pareek

46

나를 위해 일한 해결책은 다음과 같습니다.

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

이것은 내 SQL 파일을 적절한 / bin 디렉토리보기 창 탐색기에 배치 한 후 MySQL 명령 줄 클라이언트를 사용하여 나를 위해 일했습니다. 감사합니다
klewis

3
조금 느리지 만 중간에 멈추지 않으며 MySQL 서버가 사라 졌다고 말하지 마십시오.
Jaskaran Singh

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
나는 당신이 당신의 긴장에 대한 설명을 추가 할 때 OP와 추가 질문에 더 도움이 될 것이라고 생각합니다.
기자

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

아래 그림과 같이 gzip으로 압축 된 파일을 로드 할 수도 있다고 언급 할 가치가 있다고 생각합니다 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

20
mysql --user=[user] --password=[password] [database] < news_ml_all.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_nameUSE db_name명령문이 포함 된 경우 명령 행에서 데이터베이스 이름을 지정할 필요가 없습니다 .

.sql 파일에 언급 된 데이터베이스가없는 경우 데이터베이스를 작성할 권한이있는 사용자와 연결되어 있는지 확인하십시오.


14

데이터베이스 가져 오기

  1. 운전으로 이동 :

    command: d:
  2. MySQL 로그인

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. 암호를 요구할 것입니다. 입력하십시오 :

    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와 같은 일부 GUI 클라이언트를 사용하여이를 수행 할 수 있습니다.


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.

큰 데이터베이스를 가져오고 진행률 표시 줄이 없으면 재미 있습니다. 파이프 뷰어를 사용하고 파이프를 통한 데이터 전송 확인

Mac의 경우 brew install pv

데비안 / 우분투를 들어, 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

Centos의 경우 :yum install pv
Jonny


9

여기서 대부분의 답변은 간단한 명령을 언급하지만

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

오늘날이 명령으로는 충분하지 않은 데이터베이스와 테이블에 utf8 데이터 정렬이있는 것이 일반적입니다. 내 보낸 테이블에 utf8-collation이 있으면이 명령을 사용해야합니다.

mysql -u database_user -p --default-character-set = utf8 [db_name] <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

다음 명령은 WAMP의 Windows 7의 명령 줄 (cmd)에서 작동합니다 .

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

교체 xamppmamp또는 다른 웹 서버.


6

때로는 정의 된 포트 와 해당 데이터베이스 의 서버 IP 주소 도 중요합니다 ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 

6

데이터베이스로 가져 오기 :

mysql -u username -p database_name </ 파일 경로 /file_name.sql

데이터베이스에서 내보내기 :

mysqldump -u username -p database_name> / file 경로 /file_name.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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.