mysqldump 명령은 DB에 존재하는 모든 뷰를 백업합니까, 아니면 특별한 명령이 있습니까?


10

뷰와 함께 전체 데이터베이스를 백업하려고합니다. mysqldump명령 을 사용하겠습니다 . 모든 뷰가 복사되는지 또는 별도의 명령을 사용 해야하는지 궁금합니다.

답을 알려주세요. 도움을 주시면 감사하겠습니다.

답변:


9

뷰 덤프에 대한 특정 옵션은 없습니다.

다음을 시도 할 수 있습니다.

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

뷰를 볼 수 있어야합니다. 이는 데이터베이스를 덤프 할 때 뷰가 함께 제공됨을 나타냅니다.

보기 만하기 위해 시도 할 수있는 또 다른 묘기는 다음과 같습니다.

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

시도 해봐 !!!


그런 해답에 감사드립니다. 문제는 데이터베이스가 매우 커서 한 번에 하나씩 복사 할 계획입니다. 이 모든 혼란에서 'views'를 복사해야하므로 --all-databases 명령을 사용할 수 없습니다. Mysql DB Server에서 뷰를 복사하는 방법을 제안하십시오.
vinny

따라서을 사용하는 대신 --all-databases원하는 데이터베이스를 지정하십시오.
데릭 다우니

1

이에 대한 가장 좋은 대답은 아마도 이것 에 의해 olliiiver 내가 약간 수정했습니다. 특히 테이블을 엉망으로 만들지 않고 시스템의 모든 뷰에 대해 테이블 ​​삭제 쿼리 및 뷰 작성 또는 바꾸기 쿼리를 내 보냅니다. mysqldump는 모든 뷰를 자체의 -ignore-table 매개 변수에 포함시키지 않으면 뷰를 테이블로 다시 작성하는 것을 좋아하기 때문에 드롭 테이블 쿼리가 종종 중요합니다. INFORMATION_SCHEMA를 사용합니다.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

이와 같은 것을 셸 스크립트로 바꾸려면 --defaults-extra-file = CREDSFILENAME 매개 변수를 사용하는 것이 좋습니다. 따라서 스크립트에서 사용자 / 패스를 지정할 필요가 없습니다.

신임 정보 파일은 다음과 같습니다.

[client]
username=YourUsernameHere
password=YourPasswordHere
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.