[DBMS] MariaDB 테이블 손상 원인 및 복구
MySQL 또는 MariaDB를 설치한 서버에서 테이블이 깨지는 경우가 있습니다. MariaDB 테이블 손상의 원인은 크게 다음과 같습니다.
- 기록되는 중간에 MariaDB 또는 mysqld의 데몬이 죽었을 때
- 데몬 자체 오류
- 의도치 않게 서버가 shutdown 된 경우
- 하드웨어 오류
- 외부프로그램에 의해 Table을 변경하는 동시에 서버에 의해 변경 작업이 이뤄질 때 발생
✅ MariaDB 테이블 손상 확인 및 복구 방법
웹사이트를 운영하면서 발생하게 되는 테이블이나 DB 자체가 깨지는 경우 MySQL / MariaDB 테이블 복구가 필요한데 먼저 손상된 테이블을 확인하는 방법입니다.
1. 쿼리문 사용
쿼리문에서 하나의 특정 테이블에 대해 확인 후 적용 할 경우 아래의 순서로 진행할 수 있습니다.
use DB명; # 작업할 DB 선택
check table 테이블명; # 확인할 테이블을 체크
repair table 테이블명; # 복구할 테이블 복구
optimize table 테이블명; # 최적화할 테이블을 최적화
2. 간단한 사용 예시
MariaDB [(none)]> use mysql;
MariaDB [mysql]> show tables;
...
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| transaction_registry |
| user |
+---------------------------+
MariaDB [mysql]> check table time_zone;
+-----------------+-------+----------+----------+ne
| Table | Op | Msg_type | Msg_text |
+-----------------+-------+----------+----------+
| mysql.time_zone | check | status | OK |
+-----------------+-------+----------+----------+
1 row in set (0.000 sec)
MariaDB [mysql]> optimize table time_zone;
+-----------------+----------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+-----------------+----------+----------+-----------------------------+
| mysql.time_zone | optimize | status | Table is already up to date |
+-----------------+----------+----------+-----------------------------+
1 row in set (0.001 sec)
MariaDB [mysql]>
✅ phpMyAdmin으로 복구
phpMyAdmin 설치가 되어 있다면 더 편한 방법으로 복구가 가능합니다. 모두 체크 후 테이블 검사를 실행할 수 있습니다. 우측 끝 행에 [부담]에서 숫자로 표시되는 테이블을 체크한 후 ①테이블최적화를 진행할 수 있으며, 깨진 테이블 역시 ②테이블 복구를 할 수 있습니다.
✅ HeidSQL 사용해서 최적화 및 복구
HeidiSQL을 사용해서 테이블을 복구할 수 있습니다.
수동으로 복구하는 방법에 대해 알아 봤습니다. 이제 리눅스 서버에서 자동으로 복구하는 방법에 대해 알아 보겠습니다.
✅ MariaDB 테이블 손상: 자동 복구
mariadb-check 명령어를 이용해서 자동 복구를 진행할 수 있습니다. 전체 복구를 진행할 때의 기본 옵션입니다. shell 스크립트로 원하는 시간대에 설정할 수 있습니다.
mariadb-check -Ao --auto-repair --extended --optimize
]# mariadb-check -Ao --auto-repair --extended --optimize
mysql.column_stats Table is already up to date
mysql.columns_priv Table is already up to date
mysql.db Table is already up to date
mysql.event Table is already up to date
mysql.func Table is already up to date
mysql.global_priv Table is already up to date
mysql.gtid_slave_pos
note : Table does not support optimize, doing recreate + analyze instead
status : OK
mysql.help_category Table is already up to date
mysql.help_keyword Table is already up to date
mysql.help_relation Table is already up to date
mysql.help_topic Table is already up to date
mysql.index_stats Table is already up to date
mysql.innodb_index_stats
note : Table does not support optimize, doing recreate + analyze instead
status : OK
mysql.innodb_table_stats
note : Table does not support optimize, doing recreate + analyze instead
status : OK
mysql.plugin Table is already up to date
mysql.proc Table is already up to date
mysql.procs_priv Table is already up to date
mysql.proxies_priv Table is already up to date
mysql.roles_mapping Table is already up to date
mysql.servers Table is already up to date
mysql.table_stats Table is already up to date
mysql.tables_priv Table is already up to date
mysql.time_zone Table is already up to date
----- 생략 -----
.wp_postmeta
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_posts
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_term_relationships
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_term_taxonomy
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_termmeta
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_terms
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_usermeta
note : Table does not support optimize, doing recreate + analyze instead
status : OK
.wp_users
note : Table does not support optimize, doing recreate + analyze instead
status : OK
~]#