테이블을 잠그지 않고 MySQLDump 실행
라이브 프로덕션 데이터베이스를 로컬 개발 데이터베이스에 복사하고 싶습니다. 프로덕션 데이터베이스를 잠그지 않고이를 수행 할 수있는 방법이 있습니까?
나는 현재 다음을 사용하고 있습니다 :
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
대답은 사용중인 스토리지 엔진에 따라 다릅니다. 이상적인 시나리오는 InnoDB를 사용하는 경우입니다. 이 경우 --single-transaction
덤프를 시작할 때 데이터베이스의 일관된 스냅 샷을 제공 하는 플래그를 사용할 수 있습니다 .
--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
이것은 원래 답변에 늦었다 고 말한 사람과 비교할 때 늦었지만 내 경우 (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
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables 로 인해 :
--opt (기본적으로 활성화되어 있음)와 같은 일부 옵션은 자동으로 --lock-tables를 활성화합니다. 이를 무시하려면 옵션 목록 끝에 --skip-lock-tables를 사용하십시오.
MySQL Workbench를 사용하는 경우 데이터 내보내기에서 고급 옵션을 클릭하고 "잠금 테이블"옵션을 선택 취소하십시오.
또 다른 답변 :
(리눅스 환경에서) 서버 데이터베이스의 핫 카피를 만들려고하고 모든 테이블의 데이터베이스 엔진이 MyISAM 인 경우을 사용해야 합니다 mysqlhotcopy
.
설명서에 따르면 :
FLUSH TABLES, LOCK TABLES 및 cp 또는 scp를 사용하여 데이터베이스 백업을 만듭니다. 데이터베이스 또는 단일 테이블을 백업하는 빠른 방법이지만 데이터베이스 디렉토리가있는 동일한 머신에서만 실행할 수 있습니다. mysqlhotcopy는 MyISAM 및 ARCHIVE 테이블 백업에만 작동합니다.
LOCK TABLES
시간은 서버가 MySQL 파일을 복사 할 수 있는 시간에 달려 있습니다 (덤프하지는 않습니다).
오늘도 같은 문제에 직면했지만 명령 줄에 액세스 할 수 없었으므로 메모장 편집기에서 SQL 파일을 열고 테이블에서 아래 줄을 제거했습니다.
LOCK TABLES `yourtable name` WRITE;
그런 다음 개발 환경으로 가져 왔습니다. 그것이 도움이되기를 바랍니다.
이러한 접근법 중 어느 것도 나를 위해 효과가 없었기 때문에 간단히 다음과 같이했습니다.
mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]
LOCK TABLE <x>
와 UNLOCK TABLES
명령을 모두 제외 합니다.
참고 : 데이터에 해당 문자열이 포함되어 있지 않기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/104612/run-mysqldump-without-locking-tables
'development' 카테고리의 다른 글
객체가 목록인지 튜플인지 확인하는 방법 (문자열은 아님)? (0) | 2020.02.19 |
---|---|
mysqldump를 사용하지 않고 데이터베이스 복사 / 복제 (0) | 2020.02.19 |
로컬 변경을 무시하면서 힘내? (0) | 2020.02.19 |
파이썬에서 숫자를 어떻게 반올림합니까? (0) | 2020.02.19 |
Android에서 진행률 표시 줄의 진행 색상을 변경하는 방법 (0) | 2020.02.19 |