2

私はLinuxcentos 6.4サーバーを持っていますmysql5.6

このような毎時 mysql データベースのバックアップを作成するための cron ジョブがあります。

そのpythonで

os.popen("mysqldump -u %s --password=%s -h %s -e --opt --skip-lock-tables  --skip-extended-insert -c %s | gzip -c > %s.gz" % (username, password, hostname, database, filename))

問題は、変更されるデータがほとんどないことですが、毎回すべてのデータベースを 24 回バックアップする必要があり、容量が多すぎます。

そのための最良の代替手段は何ですか

毎週データベースの完全バックアップを 1 つ作成してから、増分バックアップのみを作成するように、増分バックアップを作成する方法はありますか。

単一のデータベースを復元する必要がある場合は、それもできるように、すべてのmysqlではなく、個別のデータベースに個別のファイルを用意したい

4

4 に答える 4

6

完全なデータベースをファイルに取り込んだ後のハックな方法の 1 つかもしれません。毎週のバックアップと比較して、パッチをディスクに保存します。取得したいときは、毎週のバックアップに差分を適用して完全なデータベースを取得するだけです

保管する

  mysqldump -u $USERNAME --password=$PASSWORD -h $HOSTNAME -e --opt --skip-lock-tables  --skip-extended-insert -c $DATABASE >hourlyFile
  diff weeklyFile hourlyFile >hourlyFile.patch
  rm hourlyFile

取得するには:

  cp weeklyFile hourlyFile
  patch hourlyFile <hourlyFile.patch

sqldump でどのような出力が得られるかはよくわかりません。上記のテキストであれば機能します。それ以外の場合は、bsdiff がここで役立つ場合があります: http://www.daemonology.net/bsdiff/

于 2013-07-14T08:42:51.253 に答える
-1

これ以上の解決策はありません。以下は私が作成したスクリプトで、多くの運用サーバーで使用されています。私はpython 3を使用しました。

import os
import time
import datetime
date1 = time.strftime('%Y%m%d%H%M%S')
f = open('/root/mypython/dblist.txt') # this files contains the name of databases
line = f.readline()
f.close()
words = line.split()
for word in words:
    cmd = "mysqldump -u root -pabhishek {0} > {0}_{1}.sql".format(word, date1) 
# takes backup in the same location as script

    cmd2 = "zip {0}_{1}.zip {0}_{1}.sql".format(word, date1) 

# zips the backup just taken

    cmd3 = "rm -f {0}_{1}.sql".format(word, date1) 

# deletes the .sql backup just taken. after this step only .zip backup remains. remove this line if u need both .sql and .zip

    cmd4 = " scp {0}_{1}.zip root@192.168.1.105:/home/dev_test ".format(word, date1)
    os.system(cmd)
    os.system(cmd2)
    os.system(cmd3)
    if os.system(cmd4)== 0:
        result = "Backup Successful"
print(result)

覚えておくべきこと

  1. cmd4 コマンドは scp を実行します。サーバーからリモートサーバーへのキーベースのログインを有効にする必要があります。そうしないと、スクリプトが提供できないリモートサーバーのパスワードを求められます。

キーベースのログインを有効にするには、以下を参照してください。

http://pc2solution.blogspot.in/2013/03/how-to-enable-key-based-login-in-linux.html

  1. スクリプトの最初の行で実行可能になるため、バックアップをスケジュールするには、crontab にフル パスを入力するだけです。たとえば、このスクリプトを 10 分ごとに実行する場合は、crontab で次のエントリを実行します。

    */10 * * * * /home/myscript.py

  2. chmod 777 または必要な権限でスクリプトを実行可能にします。このスクリプトは Linux で動作します。

于 2013-07-14T14:28:10.390 に答える