def create():
""" Creates a backup of the database. Optionally gzipped. """
# Backup file with day name included, for weekly rotation.
backup_file = os.path.join(get_backup_directory(), 'dsmrreader-{}-backup-{}.sql'.format(
connection.vendor, formats.date_format(timezone.now().date(), 'l')
))
# PostgreSQL backup.
if connection.vendor == 'postgresql': # pragma: no cover
backup_process = subprocess.Popen(
[
settings.DSMRREADER_BACKUP_PG_DUMP,
'--host={}'.format(settings.DATABASES['default']['HOST']),
'--user={}'.format(settings.DATABASES['default']['USER']),
settings.DATABASES['default']['NAME'],
], env={
'PGPASSWORD': settings.DATABASES['default']['PASSWORD']
},
stdout=open(backup_file, 'w') # pragma: no cover
)
# MySQL backup.
elif connection.vendor == 'mysql': # pragma: no cover
backup_process = subprocess.Popen(
[
settings.DSMRREADER_BACKUP_MYSQLDUMP,
'--compress',
'--hex-blob',
'--extended-insert',
'--quick',
'--host', settings.DATABASES['default']['HOST'],
'--user', settings.DATABASES['default']['USER'],
'--password={}'.format(settings.DATABASES['default']['PASSWORD']),
settings.DATABASES['default']['NAME'],
],
stdout=open(backup_file, 'w') # pragma: no cover
)
# SQLite backup.
elif connection.vendor == 'sqlite': # pragma: no cover
backup_process = subprocess.Popen(
[
settings.DSMRREADER_BACKUP_SQLITE,
settings.DATABASES['default']['NAME'],
'.dump',
],
stdout=open(backup_file, 'w')
) # pragma: no cover
else:
raise NotImplementedError('Unsupported backup backend: {}'.format(connection.vendor)) # pragma: no cover
backup_process.wait()
backup_settings = BackupSettings.get_solo()
if backup_settings.compress:
compress(file_path=backup_file)
backup_settings.latest_backup = timezone.now()
backup_settings.save()
评论列表
文章目录