python远程备份mysql_使用python通过SSH运行远程mysqldump

Hi-Im正在尝试将Python脚本写入SSH并执行mysqldump。到目前为止,我的方法是建立portforwarding,然后运行我已经编写好的备份脚本。我怀疑问题出在端口转发中,因为备份脚本非常简单。这是转发端口:import getpass

import os

import socket

import select

import SocketServer

import sys

import paramiko

username = 'myusername'

remote_server = 'remote.servername'

remote_port = 3306

local_server = '127.0.0.1'

local_port = 3307

SSH_PORT = 22

password = None

keyfile = 'hosting.pem'

g_verbose = True

class ForwardServer (SocketServer.ThreadingTCPServer):

daemon_threads = True

allow_reuse_address = True

class Handler (SocketServer.BaseRequestHandler):

def handle(self):

try:

chan = self.ssh_transport.open_channel('direct-tcpip',

(self.chain_host, self.chain_port),

self.request.getpeername())

except Exception, e:

verbose('Incoming request to %s:%d failed: %s' % (self.chain_host,

self.chain_port,

repr(e)))

return

if chan is None:

verbose('Incoming request to %s:%d was rejected by the SSH server.' %

(self.chain_host, self.chain_port))

return

verbose('Connected! Tunnel open %r -> %r -> %r' % (self.request.getpeername(),

chan.getpeername(), (self.chain_host, self.chain_port)))

while True:

r, w, x = select.select([self.request, chan], [], [])

if self.request in r:

data = self.request.recv(1024)

if len(data) == 0:

break

chan.send(data)

if chan in r:

data = chan.recv(1024)

if len(data) == 0:

break

self.request.send(data)

chan.close()

self.request.close()

verbose('Tunnel closed from %r' % (self.request.getpeername(),))

def forward_tunnel(local_port, remote_host, remote_port, transport):

# this is a little convoluted, but lets me configure things for the Handler

# object. (SocketServer doesn't give Handlers any way to access the outer

# server normally.)

class SubHander (Handler):

chain_host = remote_host

chain_port = remote_port

ssh_transport = transport

ForwardServer(('', local_port), SubHander).serve_forever()

def verbose(s):

if g_verbose:

print s

def pforward():

paramiko.util.log_to_file('demo.log')

client = paramiko.SSHClient()

client.load_system_host_keys()

client.set_missing_host_key_policy(paramiko.WarningPolicy())

try:

client.connect(remote_server, SSH_PORT, username, key_filename=keyfile,

look_for_keys=True)

except Exception, e:

print '*** Failed to connect to %s:%d: %r' % (remote_server, SSH_PORT, e)

sys.exit(1)

verbose('Now forwarding port %d to %s:%d ...' % (local_port, remote_server, remote_port))

try:

forward_tunnel(local_port, remote_server, remote_port, client.get_transport())

except keyboardInterrupt:

print 'C-c: Port forwarding stopped.'

sys.exit(0)

pforward()

运行之后,这是我的mysql备份脚本:

^{pr2}$

这是我得到的错误:_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'waiting for initial communication packet', system error:

0")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值