千家信息网

Python3 备份 MySQL/MariaDB(本地+FTP)

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,【准备工作】搭建 FTP 服务器:Windows Server 2008 R2 搭建FTP服务如果本机访问报 530 错误:1、检查用户名、密码;2、检查 ftp 目录的用户权限。如果远程主机无法访问
千家信息网最后更新 2026年11月03日Python3 备份 MySQL/MariaDB(本地+FTP)

【准备工作】

  • 搭建 FTP 服务器:Windows Server 2008 R2 搭建FTP服务

  • 如果本机访问报 530 错误:1、检查用户名、密码;2、检查 ftp 目录的用户权限。

  • 如果远程主机无法访问,检查防火墙。

  • 关于 ftp 的端口:控制端口为21;数据端口在主动模式(PORT)下为20,被动模式(PASV)下不定。

  • 开启被动模式:在"FTP 防火墙支持"里面配置端口,然后重启"Microsoft FTP Service"服务。注意具体 ftp 站点的数据框是灰色的,需要在 IIS 总站点配置。


【code】

以下代码对 Windows 下 MariaDB 10.1.18,Ubuntu 下 MySQL 5.7.23 测试可行。

# encoding: utf-8# author: walker# date: 2018-08-02 # summary: Python3 备份 MySQL/MariaDB(本地+FTP),一个库一个文件import osimport timeimport pymysqlimport pprintimport psutilfrom ftplib import FTPDBHost = r'127.0.0.1'DBPort = 3306DBUser = r'root'     DBPwd = r'password'# LocalBakRoot = r'/home/walker/sql_bak'    # 本地备份目录LocalBakRoot = r'D:\sql_bak'    # 本地备份目录LocalIP = ''FtpHost = r'192.168.xx.xx'  # FTP 主机FtpBakRoot = r'sql_bak'     # FTP 目录FtpUser = r'ftpadmin'        FtpPwd = r'password' # 忽略掉系统库IgnoreDB = {'information_schema', 'mysql', 'performance_schema', 'sys'}    # 根据前缀获取IPdef GetLocalIPByPrefix(prefix):    localIP = ''    dic = psutil.net_if_addrs()    for adapter in dic:        snicList = dic[adapter]        for snic in snicList:            if not snic.family.name.startswith('AF_INET'):                continue            ip = snic.address            if ip.startswith(prefix):                localIP = ip          return localIP  # 处理一个数据库def ProcOneDB(dbName):    print('ProcOneDB %s ...' % dbName)    filename = '%s_%s_%s.sql' % (time.strftime('%Y%m%d', time.localtime()), LocalIP, dbName)    localFile = os.path.join(LocalBakRoot, filename)    #备份数据库,如果没有 -B 参数不会导出数据库创建语句    cmd = 'mysqldump -u%s -p%s -B %s > %s' % (DBUser, DBPwd, dbName, localFile)    # print('cmd: %s' % cmd)    print('mysqldump ...')    rtn = os.system(cmd)    if 0 != rtn:        print('Error: 0 != rtn')        return False    ftp = FTP()    ftp.encoding = 'gb18030'    ftp.set_pasv(False)    ftp.connect(FtpHost, port=21, timeout=10)    ftp.login(user=FtpUser, passwd=FtpPwd)    print(ftp.getwelcome())    ftp.cwd(FtpBakRoot)    # 以 sql 服务器 ip 作为子目录名    if LocalIP not in ftp.nlst():        ftp.mkd(LocalIP)       # 创建子目录    ftp.cwd(LocalIP)    with open(localFile, mode='rb') as f:        ftp.storbinary('STOR ' + filename, f)    return True      # 处理所有数据库def ProcAllDB():    connDB = pymysql.connect(host=DBHost,                                port=DBPort,                                user=DBUser,                                passwd=DBPwd,                                charset='utf8mb4')                                      cur = connDB.cursor()              sql = "show databases;"     print('input sql:' + sql)    cur.execute(sql)    rowList = cur.fetchall()    cur.close()    connDB.close()          dbList = list()    for row in rowList:        dbList.append(row[0])    print('dbList(%d):\n%s\n' % (len(dbList), pprint.pformat(dbList, indent=4)))          for dbName in dbList:        if dbName in IgnoreDB:            continue        print('current time: %s' % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))            ProcOneDB(dbName)                                                  print('current time: %s\n' % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))                                              if __name__ == '__main__':    LocalIP = GetLocalIPByPrefix('192.168.xx.')    ProcAllDB()


【相关阅读】

  • Python3 统计 ftp 文件个数和大小

  • ftplib - FTP protocol client

  • psutil

  • MySQL/MariaDB Tips

  • Ubuntu Server 18.04 与 MySQL 5.7

  • FTP 目录同步:pyftpsync


*** walker ***


数据 目录 备份 数据库 端口 服务 模式 检查 主机 子目 子目录 文件 服务器 用户 站点 防火墙 处理 配置 防火 可行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 互联网中国科技 科技互联网技术 麻工互联网科技 互联网金融 科技 互联网科技小贷 科技大学互联网专业好不好 互联网金融科技公司干啥的 互联网科技项目计划书材料类 互联网科技产业特征 苏州铭阳互联网科技有限公司 中国科技创新与世界互联网大会 东莞新华互联网科技学校 深圳互联网科技的发展 智帮互联网科技公司最近动向 2021世界互联网领先科技成果发布 上海万顺科技互联网有限公司招聘 同城互联网络科技 马化腾互联网科技教学 互联网企业和网络科技有限公司 博彦科技互联网金融 今日互联网科技 互联网核心科技是什么 成都仁贤领冠互联网科技有限公司 西藏七维空间互联网科技有限公司 须眉科技是互联网公司吗 中和天地互联网科技有限公司 国大互联网教育科技有限公司薪资 半导体行业属于互联网高科技类吗 互联网科技大会大佬
0