mysql 복구 프로세스가 더 오래 걸립니다.

mysql 복구 프로세스가 더 오래 걸립니다.

mysql저는 약 300GB 크기의 데이터베이스를 갖춘 Ubuntu 8.04 시스템을 가지고 있습니다 . 다음 명령을 사용하여 mysqldump모든 데이터베이스를 덤프 했습니다.

mysqldump -u root -p --all-databases > file.sql

mysql이제 RHEL6 시스템에서 다음 명령을 사용하여 데이터베이스를 복원 하려고 했습니다 .

mysql -u root -p < file.sql

그러나 위의 명령은 시간이 많이 걸리는 것으로 보이며 실행하는 데 시간이 오래 걸리는 것 같습니다. 3일 후 복구된 데이터베이스 크기를 확인해 보니, 복구된 데이터베이스 크기는 30GB에 불과했습니다.

데이터베이스를 복원하는 효율적인 방법이 있습니까?

답변1

답변을 게시하기 전에 제가 질문한 내용을 다시 한번 말씀드리고 싶습니다.여기그리고여기. 누군가 제안할 수 있듯이 이 질문은 다음과 같습니다.데이터베이스 관리자. 그런데 여기에 올리는 이유는 편집이 필요하기 때문입니다 /etc/my.cnf.

첫 번째 솔루션

/etc/my.cnf다음 매개변수를 포함하도록 편집하세요 . 구성 파일 위치는 Linux 배포판에 따라 다를 수 있습니다. RHEL6에서는 /etc/my.cnf.

innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 0
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1 

이 제안은 다음과 같습니다.드 로버트이 해결책을 생각해낸 그에게 감사를 표하고 싶습니다.

시험: 복원 명령만큼 느리지는 않지만 mysql이 방법은 여전히 ​​시간이 꽤 걸립니다. 이 명령을 3일 동안 실행한 결과 약 130GB가 복구되었습니다.

두 번째 해결책

데이터베이스 덤프를 가져오기 전에 몇 가지 플래그를 설정하여 복구 프로세스 속도를 크게 높일 수 있습니다.

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;

.sql위의 플래그는 파일에 설정되어야 합니다 . 자동 커밋을 비활성화했으므로 복원이 끝나면 수동으로 커밋해야 합니다.

COMMIT;

위 명령문은 .sql파일의 마지막 명령문이어야 합니다. 실제로 우리는 mysqldump다음을 수행하는 스크립트를 찾을 수 있습니다여기.

이 솔루션을 테스트할 기회는 없었지만 외래 키 검사를 비활성화하므로 의미가 있습니다.

전체 데이터베이스를 복원하고 있으므로 고유 검사와 외래 키 검사를 비활성화하면 작업 속도를 높일 수 있습니다. 또한 복원이 진행되는 동안이 아니라 복원이 끝날 때 모든 것을 커밋함으로써 추가로 속도가 크게 향상됩니다.

세 번째 솔루션

mysql전체 데이터 디렉터리를 백업했습니다. 데이터 디렉터리는 일반적으로 에 있습니다 /var/lib/mysql. 제 경우에는 데이터 디렉터리가 별도의 파티션으로 마운트되었습니다 /mounts/mysql. 전체 폴더를 백업했기 때문에 전체 폴더를 최신 RHEL6 시스템에 복원했습니다. 복원하기 전에 데몬이 mysqld시작되지 않았는지 확인해야 합니다. 명령을 사용하여 복원 했지만 rsync파일 권한이 현재 새 RHEL6 시스템에 설정되어 있는지 확인하고 싶었습니다. 그래서 /mounts/mysql새로운 RHEL6 시스템으로 복원한 후 다음 명령을 실행했습니다.

chown -R mysql:mysql /mounts/mysql

이제 데이터베이스를 테스트했는데 모든 것이 정말 멋져 보였습니다. 복구 시간은 약 3시간 정도 소요됩니다.

mysql데이터베이스 복구를 위해 위의 방법을 사용하도록 제안하는 사람은 어디에서도 본 적이 없습니다 . 나는에서 보았다이것대답은 mysql데이터 디렉터리에서 데이터베이스를 복원하려면 버전이 호환 가능해야 한다는 것입니다. 그러나 지금까지 나의 복원 경험에 따르면 그렇지 않습니다. 권한이 올바르게 설정되어 있으면 데이터베이스가 정상적으로 작동합니다.

그러나 .sql데이터베이스를 데이터베이스 또는 데이터베이스로 복원하려고 할 때 mysql이 파일이 필요합니다 .sql-serverpostgre

관련 정보