쿼리 별 MySQL 덤프


220

mysqldump단일 로 할 수 SQL query있습니까?

내보내기 할 때 와 마찬가지로 전체 데이터베이스 를 덤프하는 것을 의미 phpmyadmin합니다.SQL

답변:


285

mysqldump가 아니라 mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

원하는 경우 파일로 리디렉션 할 수 있습니다.

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

업데이트 : 원본 게시물은 데이터베이스에서 쿼리로 덤프 할 수 있는지 묻습니다. 그가 요구 한 것과 그 의미는 달랐습니다. 그는 실제로 모든 테이블을 mysqldump하고 싶었습니다.

mysqldump --tables myTable --where="id < 1000"

22
이 덤프 된 txt 파일을 복원하는 방법?
Vivek S

3
mysql -e 접근법을 시도하는 사람들을 위해. 나를 위해 스크립트를 약간 사용자 정의해야했습니다. 이를 위해서는 실행시 SQL 비밀번호를 입력해야합니다. mysql -e "select * from * WHERE query = 'asdasd'"-u root -p --database = DBNAME> text.txt
RichardW11

13
쿼리에 대한 새 테이블 (CREATE TABLE SELECT)을 만든 다음 해당 테이블을 mysqldump로 덤프 할 수 있습니다. 그렇게하면 나중에 쉽게 복원 할 수 있습니다.
quano

1
mysqldump를 사용하고 파일을 복원하고자하는 사용자는 여기를 참조하십시오 : stackoverflow.com/a/2431936/411786
Syco

2
mysql -e를 -B 옵션과 함께 내 보낸 데이터를 탭으로 구분하여 출력하려면 mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'를 실행하십시오. 다음을 참조하십시오 : stackoverflow.com/a/17071108/1676044
Kevin Borders

259

이 작동합니다

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
더 좋은 예는 --where = "myColumn <1000"과 같이 where 절처럼 보이는 것입니다. 모든 테이블의 첫 번째 백만 행은 요청하는 이상한 것 같습니다.)
ijw

@ijw 테이블을 쉽게 다시 삽입 할 수있는 백업을 수행하려는 경우 제한 이외의 항목에 대해서는 where 절이 필요하지 않을 수 있습니다.
Thomas Ahle

3
@Sagotharan : 글쎄요, 그것은 쿼리가 아닙니다. 아마 이유 일 것입니다.
궤도에서 가벼움 경주

79
!!경고!! mysqldump는 익스포트 된 파일의 맨 위에 'DROP TABLE'명령을 추가합니다. 즉, 부분 내보내기를 수행 한 후 다시 가져 오면 다른 모든 항목이 손실됩니다. 글쎄요
Tamlyn

34
예, 저장된 데이터 파일에서 복원 할 때 테이블의 모든 데이터를 삭제하지 않으 려면 --no-create-info옵션 을 추가해야합니다 . 예를 들어 내 대답 을 참조하십시오 .
Gary

71

다음과 같이 쿼리를 csv로 덤프 할 수 있습니다.

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
여러 테이블을 덤프하려면 어떻게해야합니까?
SIFE

10
MySQL 데이터베이스가 실행되는 머신에 파일이 생성됩니다. 따라서 원격 콘솔에서 쿼리하는 경우이 방법이 실패합니다. 원격 콘솔에서도 작업을 수행 할 수있는 방법이 있으면 알려주십시오.
dknight

2
파일을 어디에 저장합니까?
Techlord

1
@ dknight 터미널 콘솔을 통한 원격 콘솔을 의미한다고 가정합니다.이 경우 scp연결이 종료 된 후 덤프 된 파일을 검색 할 수 있습니다 . 여기 예가 있습니다. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Luke

안전하지 않은 것 같습니다 : # 1290-MySQL 서버가 --secure-file-priv 옵션으로 실행
중이므로이

64

where 쿼리를 사용하여 테이블을 덤프하십시오.

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

전체 테이블을 덤프하십시오.

mysqldump mydatabase mytable > data.sql

노트:

  • 교체 mydatabase, mytable그리고 원하는 값으로 어디 문.
  • 기본적 으로 출력에 및 명령문 mysqldump이 포함됩니다 . 따라서 저장된 데이터 파일에서 복원 할 때 테이블의 모든 데이터를 삭제하지 않으려면 옵션 을 사용해야합니다 .DROP TABLECREATE TABLE--no-create-info
  • 원하는 데이터베이스 호스트, 사용자 및 비밀번호를 각각 지정하기 위해 위의 예제 명령에 적절한 -h, -u-p옵션 을 추가해야 할 수도 있습니다 .

38

mysqldump에서 --where 옵션을 사용하여 대기중인 출력을 생성 할 수 있습니다.

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

test.t1에서 최대 100 개의 행이 데이터베이스 테이블에서 덤프됩니다.

건배, WB


6

마지막 n 개의 레코드를 파일로 내보내려면 다음을 실행할 수 있습니다.

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

위의 내용은 내보내는 테이블에 자동 증가 ID 열이 있다고 가정하면 마지막 100 개의 레코드를 export_file.sql에 저장합니다.

사용자, 로컬 호스트, 데이터베이스 및 테이블 값을 변경해야합니다. 선택적으로 id 열과 내보내기 파일 이름을 변경할 수 있습니다.


5

MySQL Workbench는 GUI에서이 기능을 깔끔하게 갖추고 있습니다. 쿼리를 실행하고 내보내기 / 가져 오기 옆에있는 저장 아이콘을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 목록에서 "SQL INSERT 문 (* .sql)"을 선택하십시오.

여기에 이미지 설명을 입력하십시오

이름을 입력하고 저장을 클릭 한 후 테이블 이름을 확인하면 덤프 파일이 생성됩니다.


3

위의 많은 부분을 결합하는 것은 실제 실제 예이며 미터 및 타임 스탬프를 기반으로 레코드를 선택합니다. 나는 수년간이 명령이 필요했습니다. 정말 빨리 실행됩니다.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql

-1

mysql 질의 결과 명령 행 내보내기 :

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

그것은 우분투에서 나를 위해 일하고 있습니다 : mysql -h localhost -u root -p dbname -e "select * id = 1 사용자; select * id = 1 직원"-xml> / var / www / html / project / backups / db.xml
Ramesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.