container_name
:容器名稱,此處也可填容器id。
db_user
:資料庫賬號。
db_password
:資料庫密碼。
database
:要備份的資料庫。
file_path
:備份出來的檔名。
docker exec -it mysqldump -u -p >
1.能指定要備份的資料庫
2.將備份出來的sql檔案打包成壓縮檔案,並以一定的規範來命名,比如:mysqlname_2021-01-20-20.zip,mysqlname是字首,2021-01-20-20代表是2023年01月20日20點的時候備份的
3.定期刪除5個小時或10個小時之前的備份檔案
#!/usr/bin/env python
# encoding: utf-8
import datetime
import os
import shutil
import subprocess
import time
import zipfile
# 資料庫使用者名稱
db_user =
"root"
# 資料庫密碼
db_password =
"123456"
# 備份目錄
backup_dir =
"/var/test_backup"
# backup_prefix和backup_suffix分別為備份檔案的字首和字尾,如test_backup_2019-09-19-11則代表該檔案是在2023年9月19日的11點時備份的
backup_prefix =
"test_backup"
backup_suffix =
"%y-%m-%d-%h"
# 備份資料庫列表
backup_databases =
["test1"
,"test2",]
# 容器名
container_name =
"mysql-test"
# 過期小時,定期刪除5個小時前的備份檔案
expire_hour =
5# 獲取備份檔案名
defget_backup_filename()
: t = time.strftime(backup_suffix, time.localtime())
return
"%s_%s"
%(backup_prefix, t)
defget_backup_path()
:return
"%s%s%s"
%(backup_dir, os.sep, get_backup_filename())
# 獲取過期時間戳
defget_expire_time()
: t = datetime.datetime.now(
)- datetime.timedelta(hours=expire_hour)
return
int(time.mktime(t.timetuple())
)def
create_dir
(dir_path)
:# 如果目錄存在則退出
if os.path.exists(dir_path)
:return
os.mkdir(dir_path)
cmd_template =
"docker exec -it mysqldump -u -p > "
# 備份指定資料庫
defbackup_database
(backup_path, database)
: file_path = os.sep.join(
[backup_path,
"%s.sql"
% database]
) d =
cmd = cmd_template.
format
(**d)
subprocess.call(cmd, shell=
true
)def
zip_dir
(dir_path)
: file_path =
'.'.join(
[dir_path,
"zip"])
if os.path.exists(file_path)
: os.remove(file_path)
z = zipfile.zipfile(file_path,
'w', zipfile.zip_deflated)
for root, directories, files in os.walk(dir_path)
: fpath = root.replace(dir_path,'')
fpath = fpath and fpath + os.sep or
''for filename in files:
z.write(os.path.join(root, filename)
, fpath + filename)
z.close(
)# 備份資料庫
defbackup()
: backup_path = get_backup_path(
)try
: create_dir(backup_path)
for database in backup_databases:
backup_database(backup_path, database)
zip_dir(backup_path)
finally
: shutil.rmtree(backup_path)
# 清理過期備份檔案
defclean()
: expire_time = get_expire_time(
)for root, directories, files in os.walk(backup_dir)
:for
file
in files:
ifnot
file
.startswith(backup_prefix)
:continue
ifnot
file
.endswith(
".zip"):
continue
file_path = os.sep.join(
[root,
file])
t = os.path.getctime(file_path)
if t < expire_time:
os.remove(file_path)
if __name__ ==
"__main__"
:try
: backup(
)finally
: clean(
)
#!/bin/bash
# 設定mysql的登入使用者名稱和密碼(根據實際情況填寫)
mysql_user=
"root"
mysql_password=
"root"
mysql_host=
"localhost"
mysql_port=
"3306"
mysql_charset=
"utf8mb4"
# 備份檔案存放位址(根據實際情況填寫)
backup_location=/usr/local
# 是否刪除過期資料
expire_backup_delete=
"on"
expire_days=7
backup_time=
`date +%y%m%d%h%m`
backup_dir=
$backup_location
welcome_msg=
"welcome to use mysql backup tools!"
# 備份指定資料庫中資料(此處假設資料庫是mysql_backup_test)
docker exec -it mysql mysqldump -h$mysql_host -p$mysql_port -u$mysql_user -p$mysql_password -b test1 >
$backup_dir/mysql_backup_test-$backup_time.sql
# 刪除過期資料if[
"$expire_backup_delete"
=="on" -a "$backup_location"
!=""];
then
`find $backup_location/ -type f -mtime +$expire_days |
xargs
rm -rf`
echo
"expired backup data delete complete!"
fi
oracle 定期備份
ap伺服器上建立c backup資料夾 資料夾路徑客戶自己選擇 開啟dbbkup.bat 修改紅字部分 儲存 expcitictest citictest colm2 file c backup date 4,20 dmp log c backup date 4,20 log compress y ...
定期備份Docker下的mysql資料庫
話不多說直接進入主題 vi usr mysqlbackup.sh bin bash 設定mysql的登入使用者名稱和密碼 根據實際情況填寫 mysql user root mysql備份使用者 mysql password root mysql備份使用者密碼 mysql host localhost...
postgres 定期備份shell
bin bash pg dump u postgres mobile home soft backup mobile.date y m d.h m s sql pg dump u postgres postgres home soft backup postgres.date y m d.h m s...