Exemple #1
0
 def __init__(self, user=None, id=None, schema=''):
     # MysqlConfig的主键
     self.id = id
     self.local_user = user
     self.schema = schema
     self.local_schema = '_'.join(['query', str(id), self.schema])
     self.local_password = LOCAL_QUERY_USER_PASSWORD
     self.local_host = DATABASES.get('default').get('HOST')
     self.local_port = DATABASES.get('default').get('PORT') if DATABASES.get('default').get('PORT') else 3306
Exemple #2
0
 def _local_cnx(self):
     """本地连接"""
     user = DATABASES.get('default').get('USER')
     host = DATABASES.get('default').get('HOST')
     password = DATABASES.get('default').get('PASSWORD')
     port = DATABASES.get('default').get('PORT') if DATABASES.get(
         'default').get('PORT') else 3306
     cnx = pymysql.connect(host=host,
                           user=user,
                           password=password,
                           port=port,
                           max_allowed_packet=1024 * 1024 * 1024,
                           charset='utf8',
                           client_flag=CLIENT.MULTI_STATEMENTS,
                           cursorclass=pymysql.cursors.DictCursor)
     # 更改group_concat的默认长度(1024),太短
     with cnx.cursor() as cursor:
         cursor.execute(
             'set session group_concat_max_len=18446744073709551615;')
     return cnx
Exemple #3
0
    def __init__(self,
                 user=None,
                 sqls=None,
                 host=None,
                 port=None,
                 schema=None):
        self.user = user  # request.user.username
        self.sqls = sqls

        # 远程主机信息
        self.r_host = host
        self.r_port = port if isinstance(port, int) else int(port)
        self.r_schema = schema
        self.queryset = MysqlConfig.objects.get(host=self.r_host,
                                                port=self.r_port)

        # 本地主机信息
        self.local_host = DATABASES.get('default').get('HOST')
        self.local_port = DATABASES.get('default').get(
            'PORT') if DATABASES.get('default').get('PORT') else 3306
        self.local_password = LOCAL_QUERY_USER_PASSWORD
        self.local_schema = '_'.join(
            ['query', str(self.queryset.id), self.r_schema])
Exemple #4
0
def periodic_sync_remote_schemameta_to_local():
    """
    定时任务
    同步sqlaudit_mysql_config表中只读数据库实例,在本地创建对应的库和表结构,不同步任何数据
    """
    remote_host = []
    # 排除django系统所在的库,避免采集数据的死循环
    for row in MysqlConfig.objects.filter(type=1).exclude(
            host=DATABASES.get('default').get('HOST')):
        remote_host.append({
            'id': row.id,
            'user': row.user,
            'password': row.password,
            'host': row.host,
            'port': row.port,
            'envi_id': row.envi_id,
            'comment': row.comment
        })
    op = SyncMysqlRemoteMeta(remote_host)
    op.run()