포시코딩

[Docker] .sql backup file dump & restore database on docker MySQL and remote server (백업 복구) 본문

MySQL

[Docker] .sql backup file dump & restore database on docker MySQL and remote server (백업 복구)

포시 2023. 8. 22. 10:53
728x90

Dump database from Docker

docker exec {container} /usr/bin/mysqldump -u {username} --password={password} {database} > {filename}.sql

 

Restore database using Docker

cat filename.sql | docker exec -i {container} /usr/bin/mysql -u {username} --password={password} {database_name} --verbose
  • --verbose, -v: 커맨드가 실행되는 동안 어떤 작업이 진행되고 있는지 상세 정보를 출력

* mariadb일 경우 /usr/bin/mysql 대신 mariadb-dump를 쓰면 된다고 한다. 

 

설명

원래는 DBeaver에서 제공하는 Restore database 기능을 통해 복구하려고 했으나

MySQL이 Docker위에 있어서 그런지 저런 에러가 발생해 제대로 복구를 못하고 있었다. 

 

이에 그냥 bash에서 명령어를 통해 해결하기로 결정.

보시다시피 이 글 상단에 적어놓은 명령어를 통해 해결했다. 

 

출처: https://stackoverflow.com/questions/46579381/how-to-restore-mysql-dump-from-host-to-docker-container

 

이미 백업 파일로 만들어져 있는 파일을 전달받아 복구 시키는 상황이었어서 해당 글의 백업 명령어는 사용해보지 않았으나

복구 명령어는 잘 됐으니 잘되지 않을까 싶다. 

 

--verbose 말고도 --progress 옵션이 있는데 사용해보진 않았다.

  • --progress: 진행 상황 실시간 모니터링. MySQL 클라이언트 버전 8.0.23 이상에서만 지원

 

 

Restore database to remote server

mysql -h {server_address} -u {username} -p {database_name} < backup.sql

서버에 직접 파일을 옮긴 후 Docker 내부 DB에 restore하는 방식이 아닌

백업 파일이 있는 pc에서 restore할 DB가 있는 서버에 바로 restore하는 방법

사용해보니 이 방법이 훨씬 편했다. 

 

한글 깨지는 경우

cat {filename}.sql | docker exec -i {container_id} /usr/bin/mysql -u {user} --password={password} --default-character-set=utf8 {database} --verbose
728x90