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

  

【准备工作】

<李>

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

<李>

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

<李>

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

<李>

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

<李>

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


【编码】

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

#,编码:utf - 8   #,作者:沃克   #,日期:2018 - 08 - 02,   摘要:#还以为,Python3 备份,MySQL/MariaDB(本地+ FTP),一个库一个文件      import 操作系统   import 时间   import  pymysql   import  pprint   import  psutil   得到ftplib  import  FTP      时间=DBHost  " # 39; 127.0.0.1 # 39;   DBPort =3306   时间=DBUser  " # 39;根# 39;,,,,,   时间=DBPwd  " # 39;密码# 39;=#,LocalBakRoot  " # 39;/home/沃克/sql_bak& # 39;,,,, #,本地备份目录   时间=LocalBakRoot  " # 39; D: \ sql_bak& # 39;,,,, #,本地备份目录   时间=LocalIP  & # 39; & # 39;      时间=FtpHost  " # 39; 192.168.xx.xx& # 39;,, #, FTP 主机   时间=FtpBakRoot  " # 39; sql_bak& # 39;,,,,, #, FTP 目录   时间=FtpUser  " # 39; ftpadmin& # 39;,,,,,,,,   时间=FtpPwd  " # 39;密码# 39;,      #,忽略掉系统库   IgnoreDB =, {& # 39; information_schema& # 39;,, & # 39; mysql # 39;,, & # 39; performance_schema& # 39;,, & # 39; sys # 39;},,,,      #,根据前缀获取IP   def  GetLocalIPByPrefix(前缀):   ,,,localIP =, & # 39; & # 39;   ,,,dic =, psutil.net_if_addrs ()   ,,,for  adapter 拷贝dic:   ,,,,,,,snicList =,迪拜国际资本(适配器)   ,,,,,,,for  snic 拷贝snicList:   ,,,,,,,,,,,if  not  snic.family.name.startswith (& # 39; AF_INET& # 39;):   ,,,,,,,,,,,,,,,继续   ,,,,,,,,,,,ip =snic.address   ,,,,,,,,,,,if  ip.startswith(前缀):   ,,,,,,,,,,,,,,,localIP =, ip   ,,,,,   ,,,return  localIP   ,,   #,处理一个数据库   def  ProcOneDB (dbName):   ,,,print (& # 39; ProcOneDB  % s ……& # 39;, %, dbName)      ,,,filename =, & # 39; % s_ % s_ % s.sql& # 39;, %, (time.strftime (& # 39; Y % m % d % # 39;,, time.localtime ()),, LocalIP,, dbName)   ,,,localFile =, os.path.join (LocalBakRoot,文件名)   ,,,#备份数据库,如果没有,-B 参数不会导出数据库创建语句   ,,,cmd =, & # 39; mysqldump  - u % s  - p % s  -B  % s 祝辞,% & # 39;,%,(dbus, DBPwd,, dbName,, localFile)   ,,,#,打印(& # 39;cmd:, % & # 39;, %, cmd)   ,,,print (& # 39; mysqldump ……& # 39;)   ,,,rtn =, os.system (cmd)   ,,,if  0, !=,研制:   ,,,,,,,印刷(& # 39;错误:0,!=,研制# 39;)   ,,,,,,,return 错误的      ,,,ftp =, FTP ()   ,,,ftp.encoding =, & # 39; gb18030 # 39;   ,,,ftp.set_pasv(假)   ,,,ftp.connect (FtpHost,端口=21日,超时=10)   ,,,ftp.login(用户=FtpUser, passwd=FtpPwd)      ,,,print (ftp.getwelcome ())   ,,,ftp.cwd (FtpBakRoot)   ,,,#,以,sql 服务器,ip 作为子目录名   ,,,if  LocalIP  not 拷贝ftp.nlst ():   ,,,,,,,ftp.mkd (LocalIP),,,,,,, #,创建子目录   ,,,ftp.cwd (LocalIP)   ,,,with 开放(localFile,,模式=& # 39;rb # 39;), as  f:   ,,,,,,,ftp.storbinary (& # 39; STOR  & # 39;, +,文件名,,f)      ,,,return  True ,,,   ,,   #,处理所有数据库   def  ProcAllDB ():   ,,,connDB =, pymysql.connect(主机=DBHost,   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=DBPort港   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

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