批量数据库服务器连接测试与数据汇总:Python实现方案
作为数据库服务器运维人员,我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案,可以帮助我们快速完成这些任务。
需求概述
- 从配置文件中读取要测试的数据库服务器IP地址列表。
- 批量测试数据库服务器的连接情况。
- 在所有可连接的服务器上执行相同的SQL查询。
- 将查询结果汇总到一个单独的数据库中,并包含对应服务器的IP地址。
- 自动创建结果表,表名按日期随机生成。
- 提供详细的日志输出,包括实时的处理进度。
实现方案
我们使用Python来实现这个方案,主要利用了以下库和技术:
pyodbc
: 用于数据库连接和操作configparser
: 读取配置文件concurrent.futures
: 实现并发处理logging
: 日志记录- 多线程技术:提高处理效率
代码实现
以下是完整的Python代码实现:
import pyodbc
import logging
import configparser
from concurrent.futures import ThreadPoolExecutor, as_completed
import time
from datetime import datetime
import random
import string
# 配置日志
def setup_logger():
"""
设置日志记录器,同时输出到文件和控制台
"""
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 文件处理器
file_handler = logging.FileHandler('db_query_aggregation.log')
file_handler.setLevel(logging.INFO)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter('%(message)s')
console_handler.setFormatter(console_formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
logger = setup_logger()
def read_config(config_file):
"""
读取配置文件
:param config_file: 配置文件路径
:return: 包含配置信息的字典
"""
try:
config = configparser.ConfigParser()
config.read(config_file)
return {
'ip_list_file': config['Files']['ip_list_file'],
'source_db_username': config['SourceDB']['username'],
'source_db_password': config['SourceDB']['password'],
'target_db_info': dict(config['TargetDB']),
'max_workers': int(config['Settings']['max_workers']),
'query': config['Query']['sql'