当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    Mysql数据迁徙方法工具解析

    栏目:win服务器问题汇总 时间:2019-12-18 09:19

    这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    数据迁徙是每个后端都会遇到的工作之一,本文介绍了一些常见的数据迁徙方法与工具

    mysqldump:数据结构不变的数据迁徙

    导出数据

    mysqldump -u root -p DATABASE_NAME table_name > dump.sql

    恢复数据

    mysql -u root -p DATABESE_NAME < dump.sql

    或者连接mysql客户端

    mysql> source dump.sql

    使用pymysql连接数据库

    可以直接用用户名密码连接的数据库

    class GeneralConnector:
      def __init__(self, config, return_dic=False):
        self.return_dic = return_dic
        self.config = config
    
      def __enter__(self):
        self.conn = pymysql.connect(**self.config, port=3306)
        if self.return_dic:
          # 一行数据会变成一个字典
          self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
        else:
          self.cursor = self.conn.cursor()
        return self.cursor
    
      def __exit__(self, *args):
        self.cursor.close()
        self.conn.commit()
        self.conn.close()

    使用:

    # local_db = {
    #   'user': 'root',
    #   'passwd': '',
    #   'host': '127.0.0.1',
    #   'db': 'local_db'
    #   }
    with GeneralConnector(const.local_db, return_dic=True) as cursor:
      cursor.execute('SELECT `col1`, `col2` FROM test;')
      return cursor.fetchall()

    连接处于需要SSH连接的服务器的数据库

    class SSHConnector:
      def __init__(self, server, config, return_dic=False):
        self.return_dic=return_dic
        self.server = server
        self.config = config
    
      def __enter__(self):
        self.conn = pymysql.connect(**self.config, port=self.server.local_bind_port)
        if self.return_dic:
          # 一行数据会变成一个字典
          self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
        else:
          self.cursor = self.conn.cursor()
        return self.cursor
    
      def __exit__(self, *args):
        self.cursor.close()
        self.conn.commit()
        self.conn.close()

    使用:

    # SERVER = SSHTunnelForwarder(
    #     (remote_host, ssh_port),
    #     ssh_username=USERNAME,
    #     ssh_pkey=SSH_KEY,
    #     ssh_private_key_password=SSH_KEY_PASSWD,
    #     remote_bind_address=('127.0.0.1', 3306) # mysql服务位置
    #   )
    # server_db = {
    #   'user': 'root',
    #   'passwd': '',
    #   'host': '127.0.0.1',
    #   'db': 'server_db'
    #   }
    # 创建一个隧道将服务端的mysql绑定到本地3306端口
    with const.SERVER as server:
      with SSHConnector(server, const.server_db) as cursor:
        cursor.execute('show tables;')
        data = cursor.fetchall()
        print(data)

    cursor的各种操作

    1.cursor.execute(sql_statement)

    执行一条sql语句

    2.cursor.fetchall()

    获取cursor的所有结果,常跟在select语句后使用

    3.cursor.fetchone()

    获取cursor的第一条结果

    4.cursor.lastrowid

    最后一条数据的id

    5.cursor.executemany(insert_statement, data_list)