EC2是使用EBS當作儲存的空間,而EBS標準的儲存費用是每GB $0.08,而S3標準的儲存費用是每GB $0.033,算下來有兩倍多的價差,因此將資料庫備份存放在S3是比較節省費用的方式。
[warningbox]AWS將於2014年4月21日取消原本使用root帳號的access key和secret key的方式,詳細內容請看官方公告: Coming soon! An important change to how you manage your AWS account’s access keys
[/warningbox]
首先我們先假設以下幾件事情
[ssbluelist]- 已經建立好/root/mysqlbackup這個目錄
- 已經有access key和secret key,不管是使用原本AWS root帳號或者是使用IAM的方式取得
- 已經建立好S3 bucket,並且設置好相關的權限
1. 前置作業: 安裝s3cmd
安裝的方式可以使用yum或者是apt-get等方式,如果是使用yum記得要加入epel這個repo
[ssstarlist]
2. 設定s3cmd
執行s3cmd –configure(注意是兩個-),根據畫面的提示填入access key和secret key,以及其它的設定
3. 完成前面兩個步驟之後,我們就可以透過下面的步驟達成以下的目的
[ssbluelist]- 建立名為db-backup.sh的備份執行檔
- 建立七天一個循環的資料庫備份
- 將壓縮的備份檔傳送到S3
- 刪除本地的備份檔
- 每天凌晨兩點鐘自動進行備份
cd /root vi db-backup.sh #!/bin/sh weekday=$(date +%a) #抓出今天是星期幾 mysqldump -u資料庫帳號 --password='資料庫密碼' --add-drop-table 要備份的資料庫名稱 > mysqlbackup/備份檔案的名稱.sql #執行資料庫備份 tar -jpcf mysqlbackup/備份檔案的名稱_$weekday.tar.bz2 mysqlbackup/備份檔案的名稱.sql #將備份檔壓縮 s3cmd put mysqlbackup/備份檔案的名稱_$weekday.tar.bz2 s3://S3的bucket名稱/ #將壓縮的備份檔傳送到S3 # 移除本地的備份檔案 cd /root/mysqlbackup/ rm -f 備份檔案的名稱.sql 備份檔案的名稱_$weekday.tar.bz2
4. 測試
chmod 700 db-backup.sh ./db-backup.sh
5. 加入排程
crontab -e 00 02 * * * /root/db-backup.sh 存檔離開[eventbox]後續我會繼續寫如何搭配IAM,並且建立適宜的權限來進行備份到S3[/eventbox]