최근에 기존 서버에 있던 DB를 다른 서버로 이전하는 작업을 진행했다.
기존 DB를 그대로 백업해서 새로운 서버에 복원하는 과정들을 기록해본다.
docker에서 MySQL 컨테이너 bash 셸을 실행한다.
docker exec -it [mysql 컨테이너 이름] /bin/bash
docker exec -it mysql_db /bin/bash
DB를 백업한다.(mysqldump 사용)
$ mysqldump -u 유저이름 -p [원본 DB명] > [백업 DB명].sql
$ mysqldump -u root -p db_name > db_name_backup.sql
$ mysqldump [옵션] -u 유저이름 -p [원본 DB명] > [백업 DB명].sql
$ mysqldump --routines --triggers -u root-p db_name > db_name_backup.sql
--routines
: procedure, function 백업--triggers
: trigger 백업-no-data
: 데이터 백업 제외-no-create-info
: create SQL 문 백업 제외--add-drop-table
: 기존 테이블 삭제 후 백업 테이블 생성처음에 다른 옵션 없이 mysqldump만 사용해서 복원했는데, 프로젝트를 실행하니 오류가 발생했다.
DB에 프로시저, 트리거가 옮겨지지 않아 발생한 문제였다.
기존 사용 서버를 다른 서버로 이전해서 프로그램을 그대로 동작시키려면 프로시저, 트리거도 백업되도록 옵션을 추가해서 백업해야 한다.
만약 DB명을 모른다면, mysql로 접속해서 database명을 검색하면 된다.
docker exec -it [mysql 컨테이너 이름] mysql -u root -p
docker exec -it mysql_db mysql -u root -p
show databases;
백업 파일을 복원할 서버의 db 컨테이너 위치로 옮긴다.
docker cp [컨테이너 이름]:[파일 위치] [복사하려는 경로]
docker cp mysql_db:/backup231103.sql /home/user/
docker cp /home/user/backup231103.sql mysql2_db:/
백업 파일을 사용해서 DB를 복원한다. 이 때, 복원할 DB에 [복원할 DB명]으로 database가 존재한 상태여야 한다.
mysql -u 유저이름 -p [복원할 DB명] < [백업 DB명].sql
mysql -u root -p db_name2 < backup231103.sql
복원 후 DB에 접속하여 확인해보면 백업한 데이터베이스가 그대로 옮겨진 것을 확인할 수 있다.