docker上定期備份mysql資料庫

2021-10-16 22:17:05 字數 4606 閱讀 2554

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...