최적의 mysqldump 설정은 무엇입니까? [닫은]


14

일부 검색 후 다음 설정으로 끝났습니다.

    mysqldump\
    --host=localhost\
    --port=3306\
    --databases ****\
    --user=****\
    --password=****\
    --default-character-set=utf8\
    --add-drop-database\
    --add-drop-table\
    --add-locks\
    --complete-insert\
    --extended-insert\
    --lock-all-tables\
    --create-options\
    --disable-keys\
    --quick\
    --order-by-primary\
    --set-charset\
    --tz-utc\
    > dump/test.sql

지금까지는 좋지만 매개 변수와 실행에 관한 몇 가지 질문이 있습니다.

나의 첫 번째 관심사와 관련하여, 나는 그것들이 모두 필요하고 함께 사용될 때 충돌을 일으키지 않도록하고 싶습니다. 궁극적으로 테이블, 데이터베이스를 만들고 데이터를 삽입하는 수백만 개의 레코드로 매우 강력하고 일관된 덤프 파일을 만들고 싶습니다. 좋은 점은 데이터베이스를 한동안 사용할 수 없게 만드는 것이 나에게 문제가되지 않는다는 것입니다. 나의 유일한 목표는 강력하고 일관된 덤프 파일을 만드는 것입니다.

두 번째 콘서트와 관련하여 명령이 잘못되었을 때 정보를 얻는 방법과 예외가 발생하는 경우를 알고 싶습니다.

어떤 아이디어?

편집하다

이것은 RolandoMySQLDBA의 피드백에 따라 업데이트 된 mysqldump 명령입니다.

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql

각 논거와 그 장점을 읽고 당신에게 적합한 것을 선택하십시오. 또한 오류 발생시 트리거하는 스크립팅에 대해 알아보십시오.
Mannoj

멋있는. 그러나 이것은 실제로 내 질문에 대답하지 않습니다. 예를 들어, 당신은 항상 어떤 것을 사용합니까?
user706838

내 무지를 용서해주십시오.이 질문은 책이나 웹 사이트를 추천하는 것이 아닙니다. 그래서 나는 그것이 의견 기반의 질문이어서는 안된다고 생각합니다. 그러나 일부 답변은 전문 지식에 따라 품질이 더 좋으며 테스트를 통해 백업됩니다. 제 생각에는 질문은 잘 정의 된 목표로 완벽하게 언급됩니다.
user10089632

답변:


30

이 충격적인 것을 찾을 수 있지만 중요한 옵션은 하나만 필요합니다. --opt

--opt 란 무엇입니까 ?

기본적으로 사용이 옵션의 조합에 대한 속기 --add-드롭 테이블 --add 잠금 --create-옵션 --disable-키 -삽입 --extended --lock-테이블 --quick을 - set-charset . 빠른 덤프 작업을 제공하고 MySQL 서버로 빠르게 다시로드 할 수있는 덤프 파일을 생성합니다.

--opt 옵션은 기본적으로 활성화되어 있기 때문에 여러 기본 설정을 끄려면 반대의 --skip-opt 만 지정하십시오. --opt의 영향을받는 옵션의 하위 집합을 선택적으로 활성화 또는 비활성화하는 방법에 대한 내용은 mysqldump 옵션 그룹에 대한 설명을 참조하십시오.

이후 --opt이 이미 활성화되어, 당신은 지정할 필요하지 않는다 --opt를 . 그럼에도 불구하고 포함되지 않은 몇 가지 필요한 옵션이 필요할 수 있습니다.

데이터베이스에서이 쿼리를 실행하십시오.

SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;

모든 InnoDB 테이블이 있으면 --single-transaction 을 지정해야 합니다 . 이렇게하면 --lock-tables 가 자동으로 비활성화 되고 모든 테이블을 동일한 특정 시점에 덤프하고 동시에 새 쓰기를 수행 할 수 있습니다.

하나 이상의 MyISAM 테이블이있는 경우 --lock-all-tables 를 지정해야합니다 . 그러면 자동으로 --lock-tables 비활성화, --single-transaction 비활성화 , 모든 데이터베이스에서 모든 테이블 잠금, 덤프 생성 InnoDB 테이블에 대한 쓰기는 여전히 발생할 수 있지만 잠금이 해제 될 때까지 큐에 대기됩니다. MyISAM 테이블에 대한 쓰기를 시도하는 DB 연결은 모든 잠금이 해제 될 때까지 실제로 일시 중단됩니다.

이 쿼리를 실행하십시오. SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;

경우 Number_Of_Stored_Procedures0보다 큰 경우, 사용 --routines .

이 쿼리를 실행하십시오. SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;

경우 Number_Of_Triggers0보다 큰 경우, 사용 --triggers .

주의 사항 : BTREE 인덱스를 다시로드 할 때 잠재적으로 기울어 질 수 있으므로 모든 데이터베이스를 덤프하는 데 기본 순서로 사용하지 마십시오 . --primary-by-primary 는 정수 기본 키가 있고 애플리케이션에서 많은 범위 스캔을 수행하는 개별 테이블을 덤프 할 때만 사용해야합니다.

보다 창의적인 유형의 mysqldump 백업이 필요한 경우 이전 게시물을 참조하십시오 . 큰 데이터베이스의 mysqldump를 어떻게 최적화 할 수 있습니까? .

제발 mysqldump를위한 모든 옵션을 읽어 .

업데이트 2014-12-29 09:44 EST

mysqldump 명령을 업데이트했습니다 (편집 참조). 그래도 마지막 질문이 있습니다. 다음과 같은 주장을 모두 사용할 가치가 있다고 생각하십니까? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc

귀하의 의견과 최신 편집 내용을 살펴보면서 이러한 각 옵션을 살펴보고 필요한 옵션이 있는지 살펴 보겠습니다.

  • --opt : 이미 기본적으로 활성화되어 있으므로 지정할 필요가 없다고 이미 말했습니다.
  • --delayed-insert : 모든 InnoDB 데이터베이스를 사용하여 이로부터 멀리 떨어져 있습니다. 사실, 나는이 PERIOD에서 단호하게 멀리 떨어져 있습니다! . 이 INSERT는이 MySQL의 복제 노예 INSERT로 변환된다),이 데이터를 잃을 수 DELAYED 가능합니다) 한 이후, 3) 거기에있다 트리거의 MySQL 5.6에서 백업과 사용에 대해 열린 버그 리포트 및 버그로 간주되지 않습니다 , 4 ) MySQL 5.6에서는 더 이상 사용되지 않으며 5) Morgan Tocker (잘 알려진 MySQL Guru)는 2012 년에 더 이상 사용되지 않을 것으로 예상 했습니다. 절대로 (무한대) 사용하지 마십시오!
  • --complete-insert : INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...대신 사용 됩니다 INSERT INTO tblname VALUES .... 테이블 정의에 많은 열이 있고 테이블에 많은 행이 있으면 mysqldump가 손상 될 수 있습니다. 사용하지 마십시오.
  • --add-drop-table : --opt를 사용하면 사용할 수 있으므로 지정할 필요가 없습니다.
  • --add-드롭 데이터베이스 : 당신이 떨어 뜨린 경우 - 드롭 데이터베이스를 --add , 그것은 단지가 있습니다 DROP TABLE IF EXISTS(추가 된 --add-드롭 테이블 ) 빠르게 이동합니다. 그것을 사용하지 않으면 단순히 DROP TABLE IF EXISTS각 테이블에 대해 발생할 수 있습니다. 따라서 --add-drop-database 를 사용하는 것은 개인적인 선택의 문제입니다.
  • --tz-utc : 백업 한 동일한 서버로 데이터를 복원하려는 경우 --tz-utc 가 필요하지 않습니다 . 다른 시간대의 다른 데이터 센터로 데이터를 복원하고 ...
    • 백업 한 시간대를 동일하게 유지하려면 --tz-utc 가 필요하지 않습니다 .
    • 데이터가 새로운 데이터 센터의 시간대를 사용하도록하려면 --tz-utc 가 필요합니다 .
    • 예 : 뉴욕에서 데이터베이스를 백업한다고 가정하십시오. EST입니다. 시애틀에 다른 데이터 센터가있는 경우 PST가됩니다. Seattle에서 New York Backup을 복원하고 데이터베이스의 타임 스탬프가 여전히 New York을 나타내도록하려면 --tz-utc 를 사용하지 않습니다 .
  • -기본 문자 집합

최신 편집 내용을 조정하면 특히 필요합니다.

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql

다시 말하지만, mysqldump에 대한 모든 옵션을 읽으십시오 .


--add-drop-database 정보 : 데이터베이스에 덤프에없는 다른 임의의 테이블이 없는지 확인하지 않습니까? 누군가가 데이터베이스에서 무작위 테스트 테이블을 수동으로 작성한 경우이 옵션없이 덤프에서 다시로드 한 후에도 여전히 존재합니다. 그래서 그것은 당신이 원하는지 아닌지에 달려 있습니다. 권리?
jschultz410

무엇에 대해 --add-drop-trigger?
lonix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.