Linxu下使用Python脚本备份Mysql数据库
字数统计:508 阅读时长 ≈ 2分钟前言
数据无价,对于数据库中的数据宜常常备份做到有backup无患
该笔记主要内容
- Linux下备份数据库的命令:mysqldump
- 分析实现定时备份脚本需要输入的参数
- 对备份生成的sql文件进行压缩方便传输
- 清理多余的备份
步骤
可以使用mysqldump命令备份Mysql数据库
但是备份的文件无法用phpmydamin还原
mysqldump -h 主机名 -P 端口 -u 用户名 -p 密码 --database 数据库名 > 文件名.sql
对于本地主机可以省略主机名和端口
mysqldump -u 用户名 -p 密码 --database 数据库名 > 文件名.sql
举个例子
mysqldump -h 192.168.1.100 -p 3306 -u root -p password --database cmdb > /data/backup/cmdb.sql
要实现每日自动备份,核心就是如上代码。
即写代码时要提供
- 需要备份数据库访问权限的账号
- 需要备份数据库名/列表
- 备份生成的文件路径即名称
在结合Linux下的crontab命令定时运行该脚本,就可实现定时备份Mysql数据库的功能
获取需要备份的数据库名
有时需要备份的数据库不止一个,所以可以把需要备份的数据库名保存在一个文本文件中
备份生成的文件名格式
由于备份是定期执行的,所以较好的方案是使用时间作为文件名
Python下可以导入与时间有关的time模块
import time
DATETIME = time.strftime('%Y%m%d-%H%M%S')
变量申明部分
#定义服务器,用户名、密码、数据库名称(多个库分行放置)和备份的路径
DB_HOST = 'localhost'
DB_USER = 'root'
DB_USER_PASSWD = 'password'
DB_NAME = '/data/mysql_backup/dbnames.txt'
BACKUP_PATH = '/data/mysql_backup/backup_files/'
DATETIME = time.strftime('%Y%m%d-%H%M%S')
TODAYBACKUPPATH = BACKUP_PATH + DATETIME
创建备份文件夹
if not os.path.exists(TODAYBACKUPPATH):
os.makedirs(TODAYBACKUPPATH)
完整代码
'''
程序目的:Linux下备份mysql数据库
时间:2020.2
作者:SimYng
版本:1.0
'''
#!/usr/bin env python3
import os
import time
#定义服务器,用户名、密码、数据库名称(多个库分行放置)和备份的路径
DB_HOST = 'localhost'
DB_USER = 'root'
DB_USER_PASSWD = 'mypassword'
DB_NAME = '/mnt/dbbackup/dbnames.txt'
BACKUP_PATH = '/mnt/dbbackup/mysql/'
DATETIME = time.strftime('%Y%m%d-%H%M%S')
TODAYBACKUPPATH = BACKUP_PATH + DATETIME
print("createing backup folder!")
#创建备份文件夹
if not os.path.exists(TODAYBACKUPPATH):
os.makedirs(TODAYBACKUPPATH)
print("checking for databases names file")
#定义执行备份脚本,读取文件中的数据库名称,注意按行读写,不校验是否存在该库
def run_backup():
in_file = open(DB_NAME,"r")
for dbname in in_file.readlines():
dbname = dbname.strip()
print("now starting backup database %s" %dbname)
dumpcmd = "mysqldump -u" +DB_USER + " -p"+DB_USER_PASSWD+" " +dbname+" > "+TODAYBACKUPPATH +"/"+dbname+".sql"
print(dumpcmd)
os.system(dumpcmd)
file1.close()
#执行压缩的函数
def run_tar():
compress_file = TODAYBACKUPPATH + ".tar.gz"
compress_cmd = "tar -czvf " +compress_file+" "+DATETIME
os.chdir(BACKUP_PATH)
os.system("pwd")
os.system(compress_cmd)
print("compress complete!")
#删除备份文件夹
remove_cmd = "rm -rf "+TODAYBACKUPPATH
os.system(remove_cmd)
#备份数据库文件存在就执行备份和压缩,否则退出
if os.path.exists(DB_NAME):
file1 = open(DB_NAME)
print("starting backup of all db listed in file "+DB_NAME)
run_backup()
run_tar()
print("backup success!")
else:
print("database file not found..")
exit()
本文由simyng创作,
采用知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
文章最后更新时间为:February 6th , 2020 at 12:41 am