使用python的MySQL备份服务器崩溃

2024-05-01 21:16:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,每小时将MySQL数据库备份到amazons3存储桶。我使用脚本来简单地调用mysqldump,以便创建转储,然后使用tinys3将其上载到S3 bucket,注意,我将lock-tables设置为false,这样其他应用程序的事务就不会受到阻碍。你知道吗

以下是供您参考的脚本:

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相关的内容?你知道吗


Tags: keynameimport脚本homedbsqldatetime
1条回答
网友
1楼 · 发布于 2024-05-01 21:16:17

很容易想象这里发生了什么。Mysqldump很慢。恢复情况更糟。你知道吗

It is not intended as a fast or scalable solution for backing up substantial amounts of data. With large data sizes, even if the backup step takes a reasonable time, restoring the data can be very slow because replaying the SQL statements involves disk I/O for insertion, index creation, and so on.

一旦你采取了备份,你似乎压缩它,然后上传到亚马逊s3。我的猜测是,第二次备份在第一次备份完成之前就开始了,并且不断升级,直到服务器崩溃。你知道吗

即使您的服务器没有崩溃,您仍然不应该使用这种方法,因为几个月后,您将在存储方面花费大量资金。你知道吗

有一个更好的方法。Mysql replication。没有cronjobs,如果桅杆倒塌,几乎可以立即恢复,没有庞大的数据传输。你知道吗

相关问题 更多 >