Mysql 데이타 베이스 백업 스크립트

얼마 전 지인으로부터 전화가 와서 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에 등록하시면 정기적으로 실행 가능 합니다.
이도 저도 귀찮으시면 터미널에서 실행 하십시오.

어느 정도가 적정한 가격인지요? 그 기준은 무엇인가요?

음…! 어려운 질문을 해 주셨습니다.
저도 솔직히 답변해 드리기가 어렵습니다.

대개 저작물의 가격을 정하기 어려운 면이 없진 않지만 별님의 실력으로 아마 같은 형식의 스크립트를
만들어내는 데 필요한 시간은 솔직하게 얼마나 소요 될 것 같습니까?

아마 저보다도 더 짧은 시간 안에 만들어 내지 않을 까 생각되어 지는 데…^^
또한 데이타베이스 백업에 대한 스크립트는 이미 인터넷에 상당히 깔려 있습니다.

저작물에 대한 시간 대비 비용을 추산하기 어렵다 할지라도 단 하나(페이지)의 프로그램을
상당한 가격에 구매해야 한다면 "을"의 입장은 또 어떠할런지요…!

대개 언어의 종류, 프로그램의 희소성, 어려움 등을 따져 볼 때도 프로그레머 입장에서
적정한 가격은 10~20만원 정도면 적절하지 않을까 합니다.

물론 이마저도 양심에 걸리는 입장이 될 수도 있지만
보통 개인적 의뢰 시 저는 이정도 선에서 가격을 책정하고 있습니다.

우연히 정보 찾다가 보고 댓글 답니다.

좋은 정보 감사합니다.

그런데 금액과 가치에 대한 문제는 좀 민감한것 같습니다.
저는 DB에 관련된 작업을 진행할경우는 일반 개발 보다는 좀더 가격을 높게 설정하는편입니다.

가령 백업의 경우에는 2,3중화의 이슈도 있고
백업 파일의 용량초과로 디스크 용량 관리 부분도 있구요
또한 백업시 걸리는 오버헤드에 대한 관리 개념도 필요할것 같습니다.
또한 복구시 백업 시점과의 로스에 대한 개념도 이해시켜야할것 같구요

아무튼… 정보 잘쓰겠습니다 ^^

remote mysql server에서 backup은 안되는 것으로 보이네요. shell script가 돌아가는 machine과 mysql server machine이 다른 경우 말이죠.

이런 저런 요구 조건이 있고, 일정 기간 a/s를 보장해야 한다면, 20만원에는 일 못할 것 같습니다. "내 맘대로 스펙"으로 만들어 "넘겨주면 끝"이라면 모르지만요.

-h(host) 명령어를 첨가하면 될건데요…^^