通过SSH跳板连接远程Mysql数据库并进行存储

运用场景

当在本地写完代码以后,需要存到远程Mysql数据库服务器的时候
还有一种简单暴力的结局方案就是把项目拿到远程服务器去运行,这样的话对于远程库就是在本地存储了

SSH跳板

  • SSH,英文全程是Secure Shell Protocol(安全的壳程序协议)。SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非对称秘钥系统。
  • 一个是提供类似telnet远程联机服务器的服务。

实际应用

下边的实例是一个存储远程Mysql数据库的实例,大家可以借鉴

from sshtunnel import SSHTunnelForwarder
import pymysql


class SpiderProjectPipeline(object):
    def process_item(self, item, spider):
        table_name = item['table']
        item.pop('table')
        # 将item里边的keys拼接成一个字符串
        keys = ','.join(item.keys())
        # 将item里边的拼接成%s*长度
        values = ','.join(['%s'] * len(item))

        # 拼接成一个sql语句
        # sql = 'insert into %s (%s) VALUES (%s)' % (table_name, keys, values)4
        sql = 'insert into %s(%s)values(%s)' % (table_name, keys, values)
        # return item

        # 远程机器的ip
        ssh_host = ''
        # 远程机器连接mysql服务器的端口号
        ssh_port = 22  #这个端口号是SSh默认的
        # 在远程机器上的用户名
        ssh_user = ''
        # 在远程机器上的用户名的密码
        ssh_password = ''
        # mysql服务器的主机名或ip地址
        mysql_host = ''
        # mysql服务器上的端口
        mysql_port = 3306
        # mysql数据库上的用户名
        mysql_user = ''
        # mysql数据库的密码
        mysql_password = ''
        # mysql服务器上数据库名
        mysql_db = ''
        try:
            with SSHTunnelForwarder(
                    (ssh_host, ssh_port),
                    ssh_username=ssh_user,
                    ssh_password=ssh_password,
                    remote_bind_address=(mysql_host, mysql_port)) as server:

                conn = pymysql.connect(host='127.0.0.1',
                                       port=server.local_bind_port,
                                       user=mysql_user,
                                       passwd=mysql_password,
                                       db=mysql_db)
                # 生成指针
                cur = conn.cursor()
                # 执行语句
                cur.execute(sql, tuple(item.values()))
                conn.commit()
                conn.close()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容