라이브 프로덕션 데이터베이스를 로컬 개발 데이터베이스에 복사하고 싶습니다. 프로덕션 데이터베이스를 잠그지 않고이를 수행 할 수있는 방법이 있습니까?
나는 현재 다음을 사용하고 있습니다 :
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
그러나 각 테이블이 실행될 때마다 잠 깁니다.
라이브 프로덕션 데이터베이스를 로컬 개발 데이터베이스에 복사하고 싶습니다. 프로덕션 데이터베이스를 잠그지 않고이를 수행 할 수있는 방법이 있습니까?
나는 현재 다음을 사용하고 있습니다 :
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
그러나 각 테이블이 실행될 때마다 잠 깁니다.
답변:
합니까 --lock-tables=false
옵션 작업을?
매뉴얼 페이지 에 따르면 InnoDB 테이블을 덤프하는 경우 다음 --single-transaction
옵션을 사용할 수 있습니다 .
--lock-tables, -l
Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.
들어 이노 DB :
mysqldump --single-transaction=TRUE -u username -p DB
나이가 너무 늦었지만 주제를 검색하는 모든 사람에게 좋습니다. innoDB가 아니고 덤프하는 동안 잠금이 걱정되지 않으면 다음 옵션을 사용하십시오.
--lock-tables=false
--single-transaction
.
FLUSH TABLES WITH READ LOCK
.
--skip-add-locks
나를 위해 도움이
--skip-add-locks
덤프 복원 속도가 더 빨라집니다. 이것은 정답 이 아닙니다 .
큰 테이블을 덤프하려면 --single-transaction 옵션을 --quick과 결합해야합니다.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
InnoDB 테이블의 경우 플래그를 사용하십시오. --single-transaction
응용 프로그램을 차단하지 않고 BEGIN이 발행 될 때 데이터베이스의 일관성있는 상태를 덤프합니다.
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
--skip-lock-tables
.
솔직히, 나는 테이블을 잠그지 않으면 덤프에서 일관되지 않은 데이터를 얻는 것처럼 복제를 설정합니다.
덤프 시간이 더 오래 걸리면 이미 덤프 된 테이블이 덤프 될 일부 테이블과 함께 변경되었을 수 있습니다.
따라서 테이블을 잠 그거나 복제를 사용하십시오.
이것은 원래 답변에 늦었다 고 말한 사람과 비교할 때 늦었지만 내 경우 (Windows 7의 WAMP를 통한 MySQL)에는 다음을 사용해야했습니다.
--skip-lock-tables
mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db | mysql -u root --password=xxx -h localhost db
이러한 접근법 중 어느 것도 나를 위해 효과가 없었기 때문에 간단히 다음과 같이했습니다.
mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]
LOCK TABLE <x>
와 UNLOCK TABLES
명령을 모두 제외 합니다.
참고 : 데이터에 해당 문자열이 포함되어 있지 않기를 바랍니다.
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables 로 인해 :
--opt (기본적으로 활성화되어 있음)와 같은 일부 옵션은 자동으로 --lock-tables를 활성화합니다. 이를 무시하려면 옵션 목록 끝에 --skip-lock-tables를 사용하십시오.
또 다른 답변 :
(리눅스 환경에서) 서버 데이터베이스의 핫 카피를 만들려고하고 모든 테이블의 데이터베이스 엔진이 MyISAM 인 경우을 사용해야 합니다 mysqlhotcopy
.
설명서에 따르면 :
FLUSH TABLES, LOCK TABLES 및 cp 또는 scp를 사용하여 데이터베이스 백업을 만듭니다. 데이터베이스 또는 단일 테이블을 백업하는 빠른 방법이지만 데이터베이스 디렉토리가있는 동일한 머신에서만 실행할 수 있습니다. mysqlhotcopy는 MyISAM 및 ARCHIVE 테이블 백업에만 작동합니다.
LOCK TABLES
시간은 서버가 MySQL 파일을 복사 할 수 있는 시간에 달려 있습니다 (덤프하지는 않습니다).