발생 일시: 2025/03/06
증상: Oracle Cloud 인스턴스에 실행중인 Mysql 강제 종료 현상
Mysql 컨테이너 로그 기록

메모리 부족 및 연결 수 설정 문제일 가능성 발견
innodb_buffer_pool_size=512M # InnoDB 버퍼 풀 크기 설정
max_connections=100 #
# 컨테이너 터미널 접속
docker exec -it 컨테이너명 bash
# 설정 파일 출력
cat my.cnf
# 출력 결과 복사 후 위에 설정 추가해서 덮어쓰기
echo -e "
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/9.2/en/server-configuration-defaults.html
[mysqld]
innodb_buffer_pool_size=512M # InnoDB 버퍼 풀 크기 설정
max_connections=100 #
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock" > my.cnf
# 추가한 설정 들어갔는지 확인
cat my.cnf
exit
# 컨테이너 재시작
docker stop 컨테이너명
docker start 컨테이너명
쉘 스크립트 작성
vi db_backup/backup.sh
# 1. I 눌러서 Insert mode에서 아래 내용 복사
# 2. :wq + Enter로 저장
DEV_FILE_NAME=dev_backup_`date +"%Y%m%d%H%M%S"`
TESTDB_FILE_NAME=testdb_backup_`date +"%Y%m%d%H%M%S"`
# mysql db 데이터 백업
docker exec mysql-server mysqldump -u root -ptest1 dev > $DEV_FILE_NAME.sql;
docker exec mysql-server mysqldump -u root -ptest1 testdb > $TESTDB_FILE_NAME.sql;
# 백업 디렉토리에서 백업 파일들 중 가장 최신 3개를 제외하고 나머지 삭제
ls -t testdb_backup_*.sql | tail -n +4 | xargs rm -ff
ls -t dev_backup_*.sql | tail -n +4 | xargs rm -f
자동 실행 설정
vi /etc/crontab
# 1. I 눌러서 Insert mode에서 아래 내용 복사
# 2. :wq + Enter로 저장
# 1시간마다 자동 실행
# */60 * * * * 는 cron 표현법이고 따로 찾아보시길 바랍니다.
# root -> 사용자
# /var/lib/docker/volumes/mysql-data-vol/db_backup/backup.sh -> 쉘 스크립트 경로
*/60 * * * * root /var/lib/docker/volumes/mysql-data-vol/db_backup/backup.sh
실제 운영 서버라면 당연히 무슨 일이 일어날지 모르기 때문에 DB는 자동으로 백업 조치를 해주어야하는데 볼륨 설정만 해두고 백업을 하지 않았어서 발생했던 거 같다.
추후에는 컨테이너 띄우면서 초기 백업 작업까지 해주어야겠다.
최대 커넥션 수랑 InnoDB 버퍼 풀 사이즈는 정확히 어떻게 동작하는지 또 설정 값을 어느정도로 두어야 하는지는 아직 확인해보지 못해서 추후 학습해볼 예정이다.