얼마 전 지인으로부터 전화가 와서 mysql 데이타베이스 백업에 대해 질문을 하였습니다.
한 업체로 부터 mysql 데이타베이스 백업에 대한 shell script를 150여만원의 비용이 소요된다는
업체의 주장에 대해 저에게 문의하였습니다.
일단 전화 잘했다는 소리와 함께 인터넷을 뒤져 보면 간단히 제작할 수 있는 script에 150만원이 소요된다는
어처구니 없는 물음에 저는 단돈 10원도 받지 않고 10분여만에 관련 스크립트 만들어 지인에게 이메일 송부하였습니다.
저도 경력이 어느 정도 되지만 모르면 바가지를 쓰게 마련입니다.
그런 의미에서 아래 mysql 백업에 대한 스크립트를 공유하고자 하며 정기적으로 실행하고자 한다면 cron 작업에 등록하시기 바랍니다.
[code:3kg0jq3v]#!/bin/bash
아래는 간단한 mysql 데이타베이스를 백업하는 내용입니다.
백업 디렉토리 설정
backup_parent_dir="/var/backups/mysql"
mysql 셋팅
mysql_user="root"
mysql_password=""
mysql_password 가 공란인 경우
if [ -z "${mysql_password}" ]; then
echo -n "Enter MySQL ${mysql_user} password: "
read -s mysql_password
echo
fi
패스워드 체크
echo exit | mysql --user=${mysql_user} --password=${mysql_password} -B 2>/dev/null
if [ "$?" -gt 0 ]; then
echo "MySQL ${mysql_user} password incorrect"
exit 1
else
echo "MySQL ${mysql_user} password correct."
fi
백업 디렉토리를 만들고 권한 설정을 해줌
backup_date=date +%Y_%m_%d_%H_%M
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 700 "${backup_dir}"
mysql 데이타베이스 읽어오기
mysql_databases=echo 'show databases' | mysql --user=${mysql_user} --password=${mysql_password} -B | sed /^Database$/d
백업과 각 데이타베이스 압축
for database in $mysql_databases
do
if [ "${database}" == "information_schema" ] || [ "${database}" == "performance_schema" ]; then
additional_mysqldump_params="–skip-lock-tables"
else
additional_mysqldump_params=""
fi
echo "Creating backup of "${database}" database"
mysqldump ${additional_mysqldump_params} --user=${mysql_user} --password=${mysql_password} ${database} | gzip > "${backup_dir}/${database}.gz"
chmod 600 "${backup_dir}/${database}.gz"
done[/code:3kg0jq3v]
위의 내용을 .sh 형식으로 만들어 cron에 등록하시면 정기적으로 실행 가능 합니다.
이도 저도 귀찮으시면 터미널에서 실행 하십시오.