Docker

Docker에러 - mysqld: Can't open file: 'mysql.ibd' (errno: 0 - )

king_hd 2024. 7. 7. 20:12

문제점

mysql-1  | mysqld: Can't open file: 'mysql.ibd' (errno: 0 - )
mysql-1  | 2024-07-02T06:29:53.710741Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
mysql-1  | 2024-07-02T06:29:53.710877Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
mysql-1  | 2024-07-02T06:29:53.710914Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql-1  | 2024-07-02T06:29:53.711250Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.37)  MySQL 
Community Server - GPL.
mysql-1  | 2024-07-02 06:30:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.37-1.el9 started.
mysql-1  | 2024-07-02 06:30:00+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql-1  | 2024-07-02 06:30:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.37-1.el9 started.
mysql-1  | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysql-1  | 2024-07-02T06:30:00.779940Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
mysql-1  | 2024-07-02T06:30:00.780858Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.37) starting as process 1     
mysql-1  | 2024-07-02T06:30:00.786887Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql-1  | 2024-07-02T06:30:01.032046Z 1 [ERROR] [MY-014061] [InnoDB] Invalid MySQL server downgrade: Cannot downgrade from 80400 
to 80037. Downgrade is only permitted between patch releases.
mysql-1  | mysqld: Can't open file: 'mysql.ibd' (errno: 0 - )
mysql-1  | 2024-07-02T06:30:01.347226Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
mysql-1  | 2024-07-02T06:30:01.347351Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
mysql-1  | 2024-07-02T06:30:01.347376Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql-1  | 2024-07-02T06:30:01.347713Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.37)  MySQL

 

오류 로그를 보면 MySQL 서버가 mysql.ibd 파일을 열지 못하고, 데이터 사전(Data Dictionary) 초기화에 실패하여 서버가 중지되고 있음을 알 수 있다. 이는 MySQL 데이터 디렉토리의 파일 손상이나 호환성 문제로 인해 발생할 수 있다.

 

"Invalid MySQL server downgrade" 메시지를 보면 MySQL 서버가 이전 버전에서 현재 버전으로 업그레이드된 후, 다시 이전 버전으로 돌아가려 할 때 발생하는 호환성 문제임을 알 수 있다. MySQL은 특정 버전 간의 다운그레이드를 허용하지 않기 때문에 이러한 문제가 발생

 

#docker-compose.yml

services:
  back:
    build: ./back
    container_name: reactchat-back
    ports:
      - '3095:3095'
    environment:
      DB_HOST: ${DB_HOST}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_DATABASE: ${DB_DATABASE}
      CLIENT_DEV_URL: ${CLIENT_DEV_URL}
      CLIENT_PROD_URL: ${CLIENT_PROD_URL}
      COOKIE_SECRET: ${COOKIE_SECRET}
      JWT_SECRET: ${JWT_SECRET}
      DB_PORT: ${DB_PORT}
      PORT: ${PORT}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_REGION: ${AWS_REGION}
      AWS_BUCKET_NAME: ${AWS_BUCKET_NAME}
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
    ports:
      - '3307:3306'
    volumes:
      - mysql_data:/var/lib/mysql

  nginx:
    image: nginx:alpine
    ports:
      - '443:443'
    volumes:
      - ./back/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /etc/letsencrypt:/etc/letsencrypt
    depends_on:
      - back

  front:
    build: ./front
    container_name: reactchat-front
    image: kingheedo/reactchat-front:latest
    ports:
      - '443:443'
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt  # SSL 인증서 공유
      - /var/lib/letsencrypt:/var/lib/letsencrypt  # SSL 인증서 저장소 공유

volumes:
  mysql_data:
    driver: local # 볼륨 드라이버 설정

 

 

해결방법

 

볼륨 초기화: 데이터 디렉토리의 파일 손상 문제를 해결하기 위해, 기존 볼륨을 삭제하고 새로운 볼륨을 생성

docker-compose down -v
docker-compose up