Linxu下使用Python脚本备份Mysql数据库

under Linux  Python  tag Python脚本    Published on February 6th , 2020 at 02:48 pm

前言

数据无价,对于数据库中的数据宜常常备份做到有backup无患
该笔记主要内容

  1. Linux下备份数据库的命令:mysqldump
  2. 分析实现定时备份脚本需要输入的参数
  3. 对备份生成的sql文件进行压缩方便传输
  4. 清理多余的备份

步骤

可以使用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

要实现每日自动备份,核心就是如上代码。
即写代码时要提供

  1. 需要备份数据库访问权限的账号
  2. 需要备份数据库名/列表
  3. 备份生成的文件路径即名称

在结合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