안녕하세요.
이번에는 주로 MySQL 데이터베이스 복구에 대해 이야기하려고 합니다(이 블로그에서).
책임자
"마이삼이 와우드프레스에서 이노드브보다 빠른 것 같아,
변경하기 전에 innodb의 my.cnf 매개변수를 조정하고 벤치마크를 시도했습니다."
DB의 데이터가 깨져 있었다.
MySQL 5.6은 잊어버리세요. MyIsam을 사용하지 않고도 참조 전용 트랜잭션을 사용할 수 있도록 수정할 수 있다면 더 빠를 텐데요. (5.5 버전입니다)
DB 데이터를 읽을 수 없었고 워드프레스 관리자 화면에 로그인할 수도 없었어요.
---------------------------------------------------
130528 11:59:24 [오류] 시스템 테이블 mysql.proxies_priv; mysql_upgrade 실행하여 생성해 주세요
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' events_waits_current'가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' events_waits_history'가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' events_waits_history_long'가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' setup_consumers'의 구조가 잘못됐어요.
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' setup_instruments'의 구조가 잘못됐어요
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' setup_timers'가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' performance_timers'의 구조가 잘못되었습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' 스레드'가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' 이벤트_waits_summary_by_thread_by_event_name''가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' events_waits_summary_by_instance'의 구조가 잘못되어 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' 이벤트_waits_summary_global_by_event_name''가 잘못된 구조를 가지고 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' File_summary_by_event_name'의 구조가 잘못되어 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' File_summary_by_instance'의 구조가 잘못되어 있습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' mutex_instances'가 잘못된 구조를 가지고 있습니다.
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' rwlock_instances'의 구조가 잘못되었습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' cond_instances'의 구조가 잘못됐습니다
130528 11:59:24 [오류] 네이티브 테이블 'performance_schema'.' file_instances'의 구조가 잘못됐습니다
130528 11:59:24 [주] 이벤트 스케줄러: 로드됨 0개 이벤트
130528 11:59:24 [주] /usr/libexec/mysqld: 연결 준비.
버전: '5.5.30-log' 소켓: '/var/lib/mysql/mysql.sock' 포트: 3306 MySQL 커뮤니티 서버 (GPL) by Remi
130528 11:59:50 [ERROR] 테이블 xxxxxx_db/dl_options에서 찾거나 열 수 없습니다.
InnoDB의 내부 데이터 사전을 .frm 파일을 통해
테이블이 존재합니다. 아마도 InnoDB 데이터를 삭제했다가 다시 만들었을 수도 있습니다
파일들인데 해당 .frm 파일을 삭제하는 것을 깜빡했습니다
InnoDB 테이블의 경우, 아니면 .frm 파일을 다른 데이터베이스로 옮겼나요?
또는 이 테이블에 이 버전의 엔진을 나타내는 인덱스가 포함되어 있습니다
지지하지 않습니다.
참고 http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
문제를 어떻게 해결할 수 있을까.);
---------------------------------------------------
데이터 디렉터리에는 .frm 파일만 있다고 들었는데,
my.cnf에는 innodb_file_per_table가 없었으니, ibdata1 같은 곳에 메타데이터가 포함되어 있을 수도 있습니다.
innodb 매개변수를 만지작거리면서 생기는 불일치에 대해 말하자면, innodb_log_file_size 등을 변경할 수 있는 것 같습니다.
통나무를 핥듯이 자세히 보기 전까지는 세부 사항을 알 수 없습니다.
상황:
·4월 기준으로 백업이 있으며, 일일 백업은 없습니다.
・4월부터의 업데이트 정보는 4개의 기사와 사용자를 추가하여 웹 캐시와 기록에서 복원할 수 있습니다.
・이진 로그 데이터의 양이 적고, 타임스탬프가 새로 잘려 사라져 롤포워드 복구가 불가능해 보입니다.
・누락된 모든 테이블은 myisam이 아닌 innodb이니, tablename 복구 USE_FRM; 저는 그런 건 할 수 없습니다.
・innodb_force_recovery = 6을 써도 mysqldump가 안 돼요.
·이진 로그를 확인하고, 자세히 분석하며, 매번 오류 검색에 대응할 시간이 없어서 인력 낭비입니다.
그래서 테이블을 삭제하고 4월 기준 데이터를 불러온 뒤, 저장된 캐시로 인력을 복구했습니다.
정책에 대해 말씀드리겠습니다. (관리자 화면을 넣을 수 없으니, 편집 중이던 두 가지는 안녕히 계세요.) 다시 해보겠습니다. )
했나요: [php]ls -l /home/xxxxxx-op/xxxxxx_db.bak.sql.bz2 man bzip2 bunZip2 -c /home/xxxxxx-op/xxxxxx_db.bak.sql.bz2 > /root/xxxxxx_db.bak.sql vi /etc/my.cnf #innodb_force_recovery = 6 서비스 mysqld 재시작 ps -ef|grep mysql netstat -lnpt mysql -u root -p 데이터베이스 xxxxxx_db; 데이터베이스 성능 삭제_schema; 데이터베이스 xxxxxx_db; mysql -u root -p xxxxxx_db < xxxxxx_db.bak.sql[/php] それからエラーログ大丈夫そうかとサイトの表示確認を。
あとはの更新はキャッシュから復旧しておいてね的な。
이번 수업:
익숙하지 않은 일을 하고 있다면 당분간은 백업이 필요합니다.
이렇게 소수의 사용자가 있는 블로그라면, 당연히 글이 하나일 뿐이니까요
언제든지 백업할 수 있기 때문에 매일 백업을 하는 것이 더 좋습니다.
(서비스 목적이라면 일관성, 문자 코드 등이 이른 아침 연결 상태가 적을 때 고려됩니다.)
유닛이 두 개 이상일 경우, 운영 오류에 대한 대응책으로서 백업으로만 복제를 사용하는 것이 금지됩니다.
(복제도 실수를 반영하기 때문입니다.) 복제를 의도적으로 지연시키는 것은 다르지만, 백업을 두는 것이 더 낫다고 생각합니다. )