MySQL(DB)

[바미] .ibd과 .frm파일은 쿼리로 삭제하자!

Bami 2024. 11. 20. 09:18
728x90
반응형

A라는 테이블을 파티셔닝 테이블로 만들기 위해 A_temp로 변경 후 새로 A라는 파티셔닝 테이블을 만든 뒤, A 테이블에 A_temp의 데이터를 넣다 오류가 발생하여 A_temp의 테이블을 삭제 후 재생성 하는 과정에서 

SQL Error [1050] [42S01]: (conn=429) Table 'schema.A_temp /* Partition p202401 */' already exists

라는 에러가 발생하고 맙니다. 
 
구글링을 해보니 테이블 삭제 했을 때 관련된 파티션이 함께 삭제되지 않아 발생한 문제였습니다. 
그래서 잔여 파티션 파일이 존재하여 이를 삭제해주어야 했습니다.
 
이 부분은 보통 /var/lib/mysql/shema안에 있기 때문에 저 역시 이 디렉토리 안에 있는 삭제되지 않은 .ibd과 .frm파일을 확인할 수 있었고, 이를 삭제하였습니다.

그러지 말았어야 했는데...

 
그 이후 docker를 재실행했고, 아래와 같은 docker log를 맞이하게 되었습니다.

2024-11-19 18:55:37+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.9.3+maria~ubu2204 started.
2024-11-19 18:55:37+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-11-19 18:55:37+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.9.3+maria~ubu2204 started.
2024-11-19 18:55:38+09:00 [Note] [Entrypoint]: MariaDB upgrade not required
2024-11-19 18:55:38 0 [Note] mysqld (server 10.9.3-MariaDB-1:10.9.3+maria~ubu2204) starting as process 126 ...
2024-11-19 18:55:38 0 [Note] CONNECT: Version 1.07.0002 March 22, 2021
2024-11-19 18:55:38 0 [Note] InnoDB: !!! innodb_force_recovery is set to 1 !!!
2024-11-19 18:55:38 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2024-11-19 18:55:38 0 [Note] InnoDB: Number of transaction pools: 1
2024-11-19 18:55:38 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2024-11-19 18:55:38 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
2024-11-19 18:55:38 0 [Note] InnoDB: Using liburing
2024-11-19 18:55:38 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2024-11-19 18:55:38 0 [Note] InnoDB: Completed initialization of buffer pool
2024-11-19 18:55:38 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
2024-11-19 18:55:38 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=235928999166
2024-11-19 18:55:38 0 [Note] InnoDB: At LSN: 235930377572: unable to open file ./DBNAME/TABLE#P#p202401.ibd for tablespace 2221

.ibd 파일을 직접 삭제하는 것은 데이터베이스 무결성을 해치는 행위란 걸 저 메세지를 겪고나니 알아버렸습니다.
 
docker를 다시 살리기 위해 도커 안에 있는 my.cnf안에 

[mysqld]
innodb_force_recovery=1

이런 명령어를 쳐서 복구 시도도 해보고, 도커안에 있는 /var/lib/mysql/shema디렉토리를 복사하여 무결성을 맞춰보려 했으나 그 어떤 것으로도 죽은 도커는 살릴 수가 없었습니다.
 
다행히 깡통 도커라서 피해는 없었지만 이 글을 읽는 여러분들은 저와 같은 실수는 하지 않기를 바랍니다.

728x90
반응형