sourcecode

쿼리별 MySQL 덤프

copyscript 2022. 11. 7. 22:41
반응형

쿼리별 MySQL 덤프

할 수 있을까요?mysqldump단신으로SQL query?

데이터베이스 전체를 폐기하고phpmyadmin로 내보내면 이 실행됩니다.SQL

mysqldump는 아니지만 mysql cli...

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

필요에 따라서, 파일을 리다이렉트 할 수 있습니다.

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

업데이트: 원본 게시물이 쿼리를 통해 데이터베이스에서 덤프할 수 있는지 물어봅니다.그가 물어본 것과 그가 의미하는 것은 달랐다.그는 정말로 모든 테이블을 myqldump하고 싶어했다.

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

이거면 될 것 같아

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

where 쿼리를 사용하여 테이블을 덤프합니다.

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

전체 테이블 덤프:

mysqldump mydatabase mytable > data.sql

주의:

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

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

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

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

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

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

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

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

위의 예에서는 내보내는 테이블에 자동 증가 ID 열이 있는 경우 export_file.sql에 마지막 100개의 레코드가 저장됩니다.

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

MySQL Workbench도 GUI에 깔끔하게 이 기능이 있습니다.쿼리를 실행하면 내보내기/가져오기 옆의 저장 아이콘을 클릭합니다.

여기에 이미지 설명 입력

그런 다음 목록에서 "SQL INSERT 문(*.sql)"을 선택합니다.

여기에 이미지 설명 입력

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

위의 많은 부분을 조합한 것이 meterid와 timestamp를 모두 기준으로 레코드를 선택하는 나의 실제 사례입니다.몇 년 동안 이 명령어가 필요했어요실행 속도가 매우 빠릅니다.

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

mysql 쿼리 결과 명령줄 내보내기:

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

테이블에서 특정 필드를 덤프하려면 이 방법이 편리합니다.

1/ 쿼리로 임시 테이블을 만듭니다.

create table tmptable select field1, field2, field3 from mytable where filter1 and fileter2 ;

2/ 임시 테이블 전체를 덤프합니다.그러면 특정 필드가 포함된 덤프 파일이 생성됩니다.

mysqldump -u user -p mydatabase tmptable > my-quick-dump.sql

특정 테이블을 덤프하려면

mysqldump -u root -p dbname -t tablename --where="id<30" > post.sql

다른 테이블에서 동일한 관계를 선택하기 위한 mysqldump는 다음과 같습니다.

 mysqldump --defaults-file=~/.mysql/datenbank.rc -Q -t -c --hex-blob \
 --default-character-set=utf8 --where="`cat where-relation-ids-in.sql`" \
 datenbank table01 table02 table03 table04 > recovered-data.sql

where-time-ids-in.sql:

relation_id IN (6384291, 6384068, 6383414)

~/.datenbank/datenbank.rc

[client]
user=db_user
password=db_password
host=127.0.0.1

비고: relation_id 파일이 클 경우 where 구에 대한 코멘트는 덤프 파일에서 잘리지만 모든 데이터가 올바르게 선택됩니다;-)

누군가에게 도움이 되었으면 좋겠다;-)

언급URL : https://stackoverflow.com/questions/935556/mysql-dump-by-query

반응형