web-dev-qa-db-ja.com

1時間ごとのデータベースバックアップ

Kloxoコントロールパネルを備えたVPSを持っていますが、2時間ごとに自分のWebサイトの1つからデータベースをバックアップしたいと考えています。どうすればこれを行うことができますか? Kloxoは毎時バックアップをサポートせず、毎日、毎週、毎月のみサポートします。

構成:CentOS + Apache + PHP + MysqlAdmin

1
Fcoder

次のような小さなスクリプトを記述します。

#!/bin/bash
#
# Do the Backup
#
CURTIME=`date "+%Y%m%d-%H%M"`

mysqldump --user=<dbusername> --password=<dbpassword> --all-databases | lzma -c -9 -z >/backup/db-${CURTIME}.dump.lzma

これをcrontabに入れます。 (1時間ごとに実行する方が簡単です。その後、スクリプトを/etc/cron.hourlyに配置するだけです。

2
Andreas Florath

これが私のウェブサーバーで実行しているbashスクリプトです。それは私にしばらくの間よく役立っています。

最後に古いバックアップを削除する部分が含まれています。保持するファイルの数は、変数セクションで指定できます。スクリプトを実行するには、スクリプトのその部分のコメントを解除する必要があります。

#!/bin/sh

#################################################################
#  Define your variables here:
#################################################################

FILESTOKEEP=7
BACKUP_DIR=/home/user/backups
BMYSQL_USER=mysql_user
BMYSQL_PWD=mypassword

DATE=$(date +"%m-%d-%Y")_$(date +"%T")

BMYSQL_Host=localhost
BMYSQL_DBNAME=--all-databases
BMYSQL_DBFILENAME=MYSQL_BACKUP_$DATE


#################################################################
#  Make sure output directory exists.
#################################################################

        if [ ! -d $BACKUP_DIR ]; then
            mkdir -p $BACKUP_DIR
        fi


#################################################################
#  Create backup
#################################################################

        mysqldump --Host=$BMYSQL_Host --user=$BMYSQL_USER --pass=$BMYSQL_PWD $BMYSQL_DBNAME | gzip > $BACKUP_DIR/$BMYSQL_DBFILENAME.gz

#################################################################
#  Remove old backups 
#  - this will list files according to date (DESC)
#  - skip the first few files (FILESTOKEEP)
#  - remove all files past that
#  NOTE: Make sure not to save the backups into any directory
#  where there are other files other than these backup ones.
#
#  Uncomment when you are confident in rest of setup
#################################################################

#      cd $BACKUP_DIR
#      ls -t1 | tail -n +$(($FILESTOKEEP+1)) | xargs rm

スクリプトをユーザーホームのディレクトリに保存するのが好きです。これは標準的な方法ではないかもしれませんが、後で簡単に見つけて編集できるようになります(数年後に読んでください)。このスクリプトを次のように保存します。

/home/user/scripts/hourly_backup_mysql.sh

これを2時間ごとにcronに入れるには、ターミナルを開いて(rootとして)入力します。

crontab -e

そこに、次のような新しい行を入力します。

0 0-23/2 * * * /home/user/scripts/hourly_backup_mysql.sh

(VIMに慣れていない場合は、その行を追加するには、最初に「I」を押して挿入する必要があります。次に、ファイルの最後に移動し、Enterキーを押して新しい行を表示します。文字列を貼り付けて編集します。文字列の編集が終了したら、ESCを押して挿入モードを終了します。次に「:wq」と入力すると、VIMエディター)の書き込みと終了が行われます。

これは2時間ごとに実行され、削除セクションのコメントを解除すると、古いバックアップも削除されます。

乾杯!

2
G Trawo

テーブルごとのdbダンプとgzipおよびrsyncを別の場所に:

#!/usr/bin/Ruby
require 'mysql'

rsyncTargets = [
        ["files1" , "/path/to/backup/dir/"],
        ["files2", "/path/to/backup/dir/"],
        ["files3", "/path/to/backup/dir/"]
          ]

tempDir = "/mnt/extra-space"
dumpUser = "root"

`rm -r /mnt/extra-space/*`

con = Mysql.real_connect('localhost',dumpUser,'','')

con.query('show databases').each do |db|
  print " Dumping - " + db[0] + "\n"
  Dir.mkdir("#{tempDir}/#{db[0]}")
  con.query("use #{db[0]}")
  con.query('show tables').each do |table|
    `mysqldump -u #{dumpUser} #{db[0]} #{table[0]} | gzip > #{tempDir}/#{db[0]}/#{table[0]}.sql.gz`
  end
end
con.close()

rsyncTargets.each do |server|
  `rsync -av --delete /mnt/extra-space/ rsync://#{server[0]}:#{server[1]}`
end

取得元: http://techhelplist.com/index.php/tech-tutorials/42-databases/80-Ruby-script-for-mysql-dump-gzip-cron-jobs

1
user145837