SW/MySQL

MySQL : Mysqldump를 사용하여 백업 및 복원하는 방법, 예제, 명령어

얇은생각 2020. 10. 31. 07:30
반응형

mysqldump 유틸리티를 사용하여 명령줄에서 MySQL 또는 MariaDB 데이터베이스를 백업 및 복원하는 방법에 대해 설명합니다.

mysqldump 유틸리티에서 생성한 백업 파일은 기본적으로 원래 데이터베이스를 재생성하는 데 사용할 수 있는 SQL 문의 집합입니다. mysqldump 명령은 CSV 및 XML 형식으로 파일을 생성할 수도 있습니다.

Mysqldump 유틸리티를 사용하여 MySQL 데이터베이스를 다른 MySQL 서버로 전송할 수도 있습니다.

데이터베이스를 백업하지 않으면 소프트웨어 버그 또는 하드 드라이브 장애가 발생할 수 있습니다. 많은 시간과 불편을 줄이려면 MySQL 데이터베이스를 정기적으로 백업하는 것이 좋습니다.

 

MySQL : Mysqldump를 사용하여 백업 및 복원하는 방법, 예제, 명령어

 

Mysqldump 명령 구문

mysqldump 명령어 사용 방법에 대해 살펴보기 전에 먼저 기본 구문을 살펴보겠습니다.

mysqldump 유틸리티 표현식은 다음과 같은 형식을 취합니다.

mysqldump [options] > file.sql

 

options - mysqldump 옵션입니다.

file.sql - 덤프(백업) 파일입니다.

mysqldump 명령을 사용하려면 MySQL 서버에 액세스하여 실행 중이어야 합니다.

 

 

 

단일 MySQL 데이터베이스 백업

mysqldump 도구의 가장 일반적인 사용 사례는 단일 데이터베이스를 백업하는 것입니다.

예를 들어 사용자 루트를 사용하여 database_name 데이터베이스의 백업을 생성하고 database_name 파일에 저장합니다. 

mysqldump -u root -p database_name > database_name.sql

 

 

루트 암호를 입력하라는 메시지가 표시됩니다. 인증에 성공하면 덤프 프로세스가 시작됩니다. 데이터베이스 크기에 따라 프로세스에 시간이 걸릴 수 있습니다.

내보내기를 수행하는 데 사용하는 동일한 사용자로 로그인하고 사용자에게 암호가 필요하지 않은 경우 -u 및 -p 옵션을 생략할 수 있습니다.

mysqldump database_name > database_name.sql

 

 

 

 

여러 MySQL 데이터베이스를 백업

하나의 명령으로 여러 MySQL 데이터베이스를 백업하려면 --database 옵션과 함께 백업할 데이터베이스 목록을 사용해야 합니다. 각 데이터베이스 이름은 공백으로 구분되어야 합니다.

mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql

 

 

위의 명령은 두 데이터베이스를 모두 포함하는 덤프 파일을 만듭니다.

 

 

 

모든 MySQL 데이터베이스를 백업

--all-databases 옵션을 사용하여 모든 MySQL 데이터베이스를 백업합니다.

mysqldump -u root -p --all-databases > all_databases.sql

 

 

위의 명령어와 마찬가지로 모든 데이터베이스가 들어 있는 단일 덤프 파일이 생성됩니다.

 

 

 

모든 MySQL 데이터베이스를 별도의 파일로 백업

mysqldump 유틸리티는 모든 데이터베이스를 별도의 파일로 백업하는 옵션을 제공하지 않지만 간단한 Bash FOR 루프를 통해 쉽게 백업합니다.

for DB in $(mysql -e 'show databases' -s --skip-column-names); do
    mysqldump $DB > "$DB.sql";
done

 

 

위의 명령은 데이터베이스 이름을 파일 이름으로 사용하여 각 데이터베이스에 대해 별도의 덤프 파일을 만듭니다.

 

 

 

압축된 MySQL 데이터베이스 백업을 생성

데이터베이스 크기가 매우 큰 경우 출력을 압축하는 것이 좋습니다. 이렇게 하려면 출력을 gzip 유틸리티에 연결하고 아래 그림과 같이 파일로 리디렉션하면 됩니다.

mysqldump database_name | gzip > database_name.sql.gz

 

 

 

타임스탬프를 사용하여 백업 생성

둘 이상의 백업을 동일한 위치에 유지하려면 백업 파일 이름에 현재 날짜를 추가할 수 있습니다.

mysqldump  database_name > database_name-$(date +%Y%m%d).sql

 

 

위 명령은 database_name-20180617 형식의 파일을 생성합니다.

 

 

 

MySQL 덤프를 복원

mysql 도구를 사용하여 MySQL 덤프를 복원할 수 있습니다. 명령 일반 구문은 다음과 같습니다.

mysql  database_name < file.sql

 

 

대부분의 경우 가져올 데이터베이스를 만들어야 합니다. 데이터베이스가 이미 있는 경우 먼저 데이터베이스를 삭제해야 합니다.

다음 예에서는 첫 번째 명령이 database_name이라는 데이터베이스를 생성한 후 덤프 database_name.sql을 가져옵니다.

mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql

 

 

 

전체 MySQL 덤프에서 단일 MySQL 데이터베이스 복원

-all-databases 옵션을 사용하여 모든 데이터베이스를 백업한 경우 여러 데이터베이스가 들어 있는 백업 파일에서 단일 데이터베이스를 복원하려면 다음과 같이 --one-database 옵션을 사용합니다.

mysql --one-database database_name < all_databases.sql

 

 

 

단일 명령으로 MySQL 데이터베이스를 내보내고 가져오기

한 데이터베이스에서 덤프 파일을 만든 다음 백업을 다른 MySQL 데이터베이스로 가져오는 대신 다음 원라이너를 사용할 수 있습니다.

mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

 

 

위의 명령은 출력을 원격 호스트의 mysql 클라이언트로 파이핑하고 remote_database_name 데이터베이스로 가져옵니다. 명령을 실행하기 전에 데이터베이스가 원격 서버에 이미 있는지 확인합니다.

 

 

 

Cron을 사용하여 백업 자동화

데이터베이스 백업 프로세스를 자동화하는 것은 지정된 시간에 mysqldump 명령을 실행하는 cron 작업을 생성하는 것만큼 간단합니다.

cronjob을 사용하여 MySQL 데이터베이스의 자동 백업을 설정하려면 다음 단계를 수행합니다.

 

01. 사용자 홈 디렉토리에 .my.cnf라는 파일을 만듭니다.

sudo nano ~/.my.cnf

 

 

다음 텍스트를 복사하여 .my.cnf 파일에 붙여넣습니다.

[client]
user = dbuser
password = dbpasswd 

 

 

dbuser 및 dbpasswd를 데이터베이스 사용자 및 사용자 암호로 교체해야 합니다.

 

 

02. 사용자만 액세스할 수 있도록 자격 증명 파일의 사용 권한을 제한합니다.

chmod 600 ~/.my.cnf

 

 

03. 백업을 저장할 디렉터리를 생성합니다.

mkdir ~/db_backups

 

 

04. 사용자 crontab 파일을 엽니다.

crontab -e

 

 

매일 오전 3시에 데이터베이스 이름 mydb의 백업을 생성하는 다음 cron 작업을 추가합니다.

0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +\%Y\%m\%d).sql

 

 

사용자 이름을 실제 사용자 이름으로 바꾸는 것을 잊지 마세요. 우리는 또한 crontab에서 특별한 의미를 가지고 있기 때문에 백분율 기호(%)를 탈출하고 있습니다.

또한 다른 cronjob을 생성하여 30일보다 오래된 백업을 삭제할 수도 있습니다.

find /path/to/backups -type f -name "*.sql" -mtime +30 -delete

 

 

물론 백업 위치 및 파일 이름에 따라 명령을 조정해야 합니다. find 명령에 대한 자세한 내용은 명령줄을 사용하여 Linux에서 파일을 찾는 방법 가이드를 확인합니다.

반응형