검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트
원문 : http://www.linuxforum.com/threads/backup-all-databases-nightly-w-mysqldump.692/

  당일 날짜로 된 디렉토리를 만들어 그 안에 DB를 백업해 넣는 스크립트입니다.
#!/bin/bash

DB_BACKUP="/backups/mysql_backup/`date +%Y-%m-%d`"
DB_USER="root"
DB_PASSWD="secretttt"
HN=`hostname | awk -F. '{print $1}'`

# Create the backup directory
mkdir -p $DB_BACKUP

# Remove backups older than 10 days
find /backups/mysql_backup/ -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \;

# Option 1: Backup each database on the system using a root username and password
for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -vi information_schema);
do mysqldump --user=$DB_USER --password=$DB_PASSWD --opt $db | gzip > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).gz";
done

# Option 2: If you aren't using a root password then comment out option 1 and use this
# for db in $(mysql -e 'show databases' -s --skip-column-names|grep -vi information_schema);
# do mysqldump --opt $db | gzip > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).gz";
# done
  mysql의 root 계정 패스워드가 들어있기 때문에 퍼미션을 700으로 변경 후 cron에 등록하면 됩니다.
2013/06/23 17:03 2013/06/23 17:03
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Using mysqldump to Back Up Your MySQL Database

  저번에 SSH와 관련된 글에서도 mysqldump를 이용해서 백업을 하는 모습이 잠깐 등장했었는데요. 이걸 이용해서 서버의 모든 데이터베이스를 백업할 수도 있고 하나의 데이터베이스나 테이블 단위로 백업하는 것도 가능합니다. 그래서 이번에는 MySQL에서 가장 기초적인 백업 도구인 mysqldump를 이용한 백업에 대해 알아보겠습니다. 터미널에서 mysqldump를 쳐보면 대략 아래와 같은 실행법이 출력됩니다.
mirashi@myservlab:~$ mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
  예를 들어 모든 데이터베이스의 스키마와 데이터를 backup.sql이라는 이름으로 저장하려면 다음과 같이 명령어를 사용하면 됩니다. 물론 루트가 아니라도 모든 DB를 읽을 수 있는 권한이 있는 계정이 있다면 그 계정을 사용하면 되겠습니다
mysqldump -u root -p --all-databases > backup.sql
Enter password:   <- 패스워드 입력
  만들어진 파일을 까보면 SQL 문으로 이뤄진 것을 볼 수 있는데 DB를 하나하나 Use로 선택하면서(없으면 생성) 기존의 테이블을 DROP으로 지운 후 백업할 당시의 내용으로 다시 만드는 것을 볼 수 있습니다.

  아래는 'singleDB'라는 이름의 데이터베이스를 db_backup.sql이라는 파일로 백업하는 예입니다.
mysqldump -u root -p singleDB > db_backup.sql
  그리고 아래는 'singleDB'라는 데이터베이스 안에 있는 'singleTABLE'이라는 이름의 테이블을 table_backup.sql이라는 파일로 백업하는 예입니다.
mysqldump -u root -p singleDB singleTABLE > table_backup.sql
  경우에 따라서는 데이터베이스의 스키마만 백업하고 싶을 수도 있는데 그럴 때는 아래처럼 --no-data 옵션을 추가하면 됩니다.
mysqldump -u root -p --no-data singleDB > db_backup.sql
  이와 반대로 데이터만 백업하고 싶을 때는 --no-create-info 옵션을 주면 됩니다.
mysqldump -u root -p --no-create-info singleDB > db_backup.sql
  이제 이걸 응용해서 cron을 이용해 자동으로 백업을 하도록 만들어보겠습니다. 먼저 DBbackup.sh 이란 이름으로 아래의 간단한 스크립트를 만듭시다. 스크립트의 저장 위치는 /var/scripts, MySQL 루트 계정의 패스워드는 abcd, 백업할 데이터베이스명은 singleDB, 백업의 저장 위치는 /var/backup, 파일명은 'DBbackup-년월일.sql'로 가정하겠습니다.
#!/bin/sh
mysqldump -uroot -pabcd singleDB > /var/backup/DBbackup-`date +%Y%m%d`.sql
  파일 내에 MySQL 루트 계정의 비번이 노출되어 있으므로 퍼미션 관리에 신경써야 합니다. 이제 'crontab -e'를 통해 특정 시간에 스크립트가 실행되도록 만듭니다. 아래 예에서는 새벽 3시에 돌아가도록 하고 있습니다.
0 3 * * * /var/script/DBbackup.sh
  지금까지 알아본 방법은 MySQL에서 백업을 하는 방법 중 가장 간단한 방법입니다. 만약 증분 백업을 원하신다면 binary_log 툴을 이용하는 방법이 있고 이중화를 위한 마스터/슬레이브 구성(마스터 서버의 데이터를 슬레이브 서버로 복사)을 원하신다면 Replication을 이용하는 방법이 있습니다. 아마 언젠가 관련 내용을 포스트하는 날이 오지 않을까 싶네요.


2010/11/18 15:29 2010/11/18 15:29