• ADADADADAD

    Python3 备份 MySQL/MariaDB(本地+FTP)[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:13:42

    作者:文/会员上传

    简介:

    【准备工作】搭建 FTP 服务器:Windows Server 2008 R2 搭建FTP服务如果本机访问报 530 错误:1、检查用户名、密码;2、检查 ftp 目录的用户权限。如果远程主机无法访问,检查防火

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    【准备工作】

      搭建 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),一个库一个文件importosimporttimeimportpymysqlimportpprintimportpsutilfromftplibimportFTPDBHost=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'}#根据前缀获取IPdefGetLocalIPByPrefix(prefix):localIP=''dic=psutil.net_if_addrs()foradapterindic:snicList=dic[adapter]forsnicinsnicList:ifnotsnic.family.name.startswith('AF_INET'):continueip=snic.addressifip.startswith(prefix):localIP=ipreturnlocalIP#处理一个数据库defProcOneDB(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)if0!=rtn:print('Error:0!=rtn')returnFalseftp=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作为子目录名ifLocalIPnotinftp.nlst():ftp.mkd(LocalIP)#创建子目录ftp.cwd(LocalIP)withopen(localFile,mode='rb')asf:ftp.storbinary('STOR'+filename,f)returnTrue#处理所有数据库defProcAllDB():connDB=pymysql.connect(host=DBHost,port=DBPort,user=DBUser,passwd=DBPwd,charset='utf8mb4')cur=connDB.cursor()sql="showdatabases;"print('inputsql:'+sql)cur.execute(sql)rowList=cur.fetchall()cur.close()connDB.close()dbList=list()forrowinrowList:dbList.append(row[0])print('dbList(%d):\n%s\n'%(len(dbList),pprint.pformat(dbList,indent=4)))fordbNameindbList:ifdbNameinIgnoreDB:continueprint('currenttime:%s'%time.strftime('%Y-%m-%d%H:%M:%S',time.localtime()))ProcOneDB(dbName)print('currenttime:%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 ***

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

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: pythonmysqlmariadb