MySQLデータベースをAmazon S3バケットに1時間ごとにバックアップするPythonスクリプトがあります。私はダンプを作成するためにmysqldump
を呼び出すだけでtinys3
を使ってS3バケットにアップロードしますが、lock-tables
をfalseに設定して他のアプリケーションによるトランザクションに支障をきたさないよう注意してください。ここで Pythonを使用したMySQLバックアップでサーバーがクラッシュする
import tinys3
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
application = get_wsgi_application()
from django.utils import timezone
import pytz
import datetime
import json
timezone.activate(pytz.timezone("Asia/Kolkata"))
current_datetime = timezone.localtime(
datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
)
dir_struct = '/'.join(current_datetime.strftime("%Y-%m-%d-%H-%M-%S").split('-'))
endpoint = 's3-us-west-2.amazonaws.com'
params = json.load(open('buckets.json'))
S3_ACCESS_KEY=params['S3_ACCESS_KEY']
S3_SECRET_KEY = params["S3_SECRET_KEY"]
bucket = params['mysql']
db_name = params['db_name']
mysql_command = 'sudo mysqldump --defaults-file=/home/ubuntu/.my.cnf --lock-tables=false %s > /home/ubuntu/%s.sql' %(db_name, db_name)
compress_command = "zip -r /home/ubuntu/%s.sql.zip /home/ubuntu/%s.sql" %(db_name, db_name)
delete_command = "sudo rm -rf /home/ubuntu/%s.sql*" %db_name
os.system(mysql_command)
os.system(compress_command)
backup_file = open('/home/ubuntu/%s.sql.zip' %db_name, 'rb')
conn = tinys3.Connection(S3_ACCESS_KEY, S3_SECRET_KEY, tls=True,endpoint=endpoint)
print conn.upload(
(dir_struct+'%s.sql.zip' %db_name),
backup_file,
bucket,
public=False
)
print conn.get((dir_struct+'%s.sql.zip' %db_name),bucket)
os.system(delete_command)
の問題は、私はすべての時間をこのスクリプトを実行するcronジョブを起動したときに、数時間後にサーバがクラッシュする(例えば5〜7時間) 。私はまだこの行動のかなりの理由を発見していない。ここでの問題は何ですか?このスクリプトに何か不具合がありますか、それともMySQLに関連していますか?
MySQLがクラッシュしたときにログを取得しますか? – Chris
MySQLだけでなく、サーバー全体がダウンして再起動する必要があります。 MySQLエラーログにはエラーも表示されません。 –