当前位置:首页>python>Python运维实战

Python运维实战

  • 2026-07-02 12:06:31
Python运维实战

 

开篇场景:深夜的紧急运维任务

凌晨2点,你被一阵急促的电话铃声惊醒。生产环境有50台服务器的日志文件需要紧急清理,否则磁盘空间即将耗尽,可能导致服务崩溃。你揉着惺忪的睡眼,登录跳板机,开始一台一台地SSH登录、执行命令、退出...还没搞定10台,你就意识到这样手动操作到天亮也完不成。

这样的场景对于运维工程师来说并不陌生。在实际工作中,我们经常需要面对批量服务器管理的需求:批量执行命令、批量部署应用、批量收集日志、批量备份数据...如果每台服务器都手动操作,不仅效率低下,而且容易出错。这时候,Python就是你的救星!

今天,我们将深入学习如何利用Python的三大神器——paramiko(SSH远程执行)、requests(HTTP API调用)、PyMySQL(数据库批量操作),实现运维任务的自动化和批量化管理。无论你是运维新手还是想提升自动化能力的工程师,这篇文章都将给你带来实质性的帮助。

🧠 核心概念:Python运维三剑客

1. Paramiko:SSH协议的Python实现

Paramiko是一个Python实现的SSHv2协议库,提供了客户端和服务端的功能。在实际运维中,我们主要使用它的客户端功能来:

  • 远程命令执行:通过SSH在远程服务器上执行命令

  • 文件传输:使用SFTP上传/下载文件

  • 批量操作:结合多线程/多进程实现并发执行

核心组件:

  • SSHClient:SSH客户端,用于连接远程服务器并执行命令

  • SFTPClient:SFTP客户端,用于文件传输

  • Transport:底层传输层,支持自定义认证方式

2. Requests:HTTP for Humans

Requests是Python中最流行的HTTP库,号称"HTTP for Humans"。在现代化运维中,越来越多的运维操作通过API完成:

  • 云平台管理:调用AWS/Aliyun/腾讯云API管理资源

  • 监控系统集成:从Prometheus/Zabbix获取数据

  • CI/CD集成:触发Jenkins/GitLab CI构建

  • 配置管理:通过API更新配置中心(Nacos/Apollo)

3. PyMySQL:纯Python实现的MySQL客户端

PyMySQL是一个纯Python写的MySQL客户端库,用于连接和操作MySQL数据库。在运维场景中,我们经常需要:

  • 批量数据查询:从多个数据库实例收集统计信息

  • 数据库备份:自动化逻辑备份

  • 数据迁移:跨数据库的数据同步

  • 监控告警:查询数据库状态并触发告警

💡 为什么选择这三个库?

Paramiko:最成熟的SSH库,支持密码和密钥认证,适合批量服务器管理。

Requests:语法简洁,自动处理编码、重定向、Cookie等,API友好。

PyMySQL:纯Python实现,安装简单,兼容MySQLdb接口,学习成本低。

🔧 命令实操:从零开始写运维脚本

实战1:批量执行远程命令(Paramiko + 多线程)

场景:需要在50台Web服务器上执行df -h命令,检查磁盘使用情况。

#!/usr/bin/env python3"""批量服务器磁盘检查工具功能:并发SSH到多台服务器,执行df -h命令,收集磁盘使用情况"""import paramikoimport threadingfrom concurrent.futures import ThreadPoolExecutor, as_completedimport json# 服务器列表(实际项目中从CMDB或配置文件读取)SERVERS = [    {"hostname": "192.168.1.101", "port": 22, "username": "root"},    {"hostname": "192.168.1.102", "port": 22, "username": "root"},    {"hostname": "192.168.1.103", "port": 22, "username": "root"},    # ... 更多服务器]# SSH密钥路径(推荐使用密钥认证)KEY_PATH = "/root/.ssh/id_rsa"def ssh_execute_command(hostname, port, username, command):    """    通过SSH执行远程命令    :param hostname: 服务器IP或域名    :param port: SSH端口    :param username: 用户名    :param command: 要执行的命令    :return: (success, output) 元组    """    try:        ssh = paramiko.SSHClient()        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())        # 使用密钥认证(推荐)        ssh.connect(            hostname=hostname,            port=port,            username=username,            key_filename=KEY_PATH,            timeout=10        )        # 执行命令        stdin, stdout, stderr = ssh.exec_command(command, timeout=30)        output = stdout.read().decode('utf-8')        error = stderr.read().decode('utf-8')        ssh.close()        if error:            return False, f"ERROR: {error}"        return True, output    except Exception as e:        return False, f"Exception: {str(e)}"def check_disk_usage(server):    """检查单台服务器的磁盘使用情况"""    hostname = server["hostname"]    port = server["port"]    username = server["username"]    success, output = ssh_execute_command(hostname, port, username, "df -h")    return {        "hostname": hostname,        "success": success,        "output": output    }def batch_check_disks(servers, max_workers=10):    """    批量检查磁盘使用情况(并发执行)    :param servers: 服务器列表    :param max_workers: 最大线程数    """    results = []    with ThreadPoolExecutor(max_workers=max_workers) as executor:        # 提交所有任务        future_to_server = {            for server in servers        }        # 收集结果        for future in as_completed(future_to_server):            result = future.result()            results.append(result)            # 实时输出进度            if result["success"]:                print(f"✓ {result['hostname']} - Success")            else:                print(f"✗ {result['hostname']} - Failed: {result['output']}")    return resultsif __name__ == "__main__":    print("=" * 60)    print("批量磁盘检查工具")    print("=" * 60)    results = batch_check_disks(SERVERS, max_workers=20)    print("\n" + "=" * 60)    print("检查完成!结果汇总:")    print("=" * 60)    # 保存结果到JSON文件    with open("disk_check_results.json", "w") as f:        json.dump(results, f, indent=2, ensure_ascii=False)    print(f"结果已保存到 disk_check_results.json")

💡 代码解析

1. 使用ThreadPoolExecutor实现并发:通过设置max_workers控制并发数,避免同时连接太多服务器导致网络拥塞。

2. 密钥认证更安全:使用key_filename参数指定SSH私钥路径,避免密码明文存储。

3. 超时设置很重要timeout防止连接挂起,exec_commandtimeout防止命令执行超时。

4. 结果持久化:将结果保存为JSON文件,方便后续分析和归档。

实战2:通过HTTP API管理云平台(Requests)

场景:调用阿里云API批量查询ECS实例状态,并根据需要启动/停止实例。

#!/usr/bin/env python3"""阿里云ECS管理工具 - 通过API批量操作"""import requestsimport jsonimport hmacimport hashlibfrom datetime import datetimeimport urllib.parse# 阿里云API配置(实际项目中从环境变量或配置文件读取)ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID"ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"REGION_ID = "cn-hangzhou"class AliyunECSManager:    """阿里云ECS管理类"""    def __init__(self, access_key_id, access_key_secret, region_id):        self.access_key_id = access_key_id        self.access_key_secret = access_key_secret        self.region_id = region_id        self.base_url = "https://ecs.aliyuncs.com"    def _sign_request(self, params):        """生成API请求签名(阿里云RPC签名机制)"""        # 省略签名逻辑(实际项目中建议使用aliyun-python-sdk-core库)        pass    def describe_instances(self, page_number=1, page_size=10):        """查询ECS实例列表"""        params = {            "Action": "DescribeInstances",            "Version": "2014-05-26",            "RegionId": self.region_id,            "PageNumber": page_number,            "PageSize": page_size        }        # 添加签名        self._sign_request(params)        try:            response = requests.get(self.base_url,                params=params,                timeout=10            )            response.raise_for_status()            return response.json()        except requests.exceptions.RequestException as e:            print(f"API请求失败: {e}")            return None    def start_instance(self, instance_id):        """启动ECS实例"""        params = {            "Action": "StartInstance",            "Version": "2014-05-26",            "RegionId": self.region_id,            "InstanceId": instance_id        }        self._sign_request(params)        try:            response = requests.get(self.base_url, params=params, timeout=10)            response.raise_for_status()            result = response.json()            print(f"✓ 实例 {instance_id} 启动请求已提交,RequestId: {result.get('RequestId')}")            return True        except requests.exceptions.RequestException as e:            print(f"✗ 启动实例 {instance_id} 失败: {e}")            return Falseif __name__ == "__main__":    # 初始化ECS管理器    ecs_manager = AliyunECSManager(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION_ID)    # 查询实例列表    print("查询ECS实例列表...")    result = ecs_manager.describe_instances()    if result and "Instances" in result:        instances = result["Instances"]["Instance"]        print(f"\n找到 {len(instances)} 个ECS实例:\n")        for instance in instances:            print(f"实例ID: {instance['InstanceId']}")            print(f"实例名称: {instance['InstanceName']}")            print(f"状态: {instance['Status']}")            print("-" * 40)            # 如果实例是已停止状态,则启动它            if instance["Status"] == "Stopped":                ecs_manager.start_instance(instance["InstanceId"])    else:        print("查询失败或没有找到实例")

💡 最佳实践

1. 使用官方SDK:实际项目中推荐使用aliyun-python-sdk-core,它已经封装了签名逻辑和错误处理。

2. 凭证管理:AccessKey等敏感信息不要硬编码,使用环境变量或密钥管理服务(如KMS)。

3. 异常处理:网络请求可能失败,务必添加try-except和超时设置。

4. 限流保护:云平台API有调用频率限制,批量操作时要控制并发数。

实战3:批量数据库操作(PyMySQL)

场景:从多个MySQL实例查询慢查询日志,统计TOP 10慢查询,并生成报告。

#!/usr/bin/env python3"""MySQL慢查询分析工具"""import pymysqlimport pandas as pdfrom datetime import datetime, timedeltaimport json# 数据库配置(实际项目中从配置文件读取)DB_CONFIGS = [    {        "host": "192.168.1.201",        "port": 3306,        "user": "monitor",        "password": "monitor_pass",        "database": "mysql"    },    {        "host": "192.168.1.202",        "port": 3306,        "user": "monitor",        "password": "monitor_pass",        "database": "mysql"    }]def get_slow_queries(db_config, start_time, end_time, limit=10):    """    从MySQL慢查询日志表(需要开启performance_schema)获取慢查询    如果未开启performance_schema,可以解析slow_query_log文件    """    try:        # 建立数据库连接        connection = pymysql.connect(            host=db_config["host"],            port=db_config["port"],            user=db_config["user"],            password=db_config["password"],            database=db_config["database"],            charset='utf8mb4',            cursorclass=pymysql.cursors.DictCursor # 返回字典格式        )        with connection.cursor() as cursor:            # 查询慢查询(假设已经开启了慢查询日志并解析到表中)            # 实际项目中可以查询performance_schema.events_statements_history_long            sql = """                SELECT                    DIGEST_TEXT AS query_pattern,                    COUNT_STAR AS exec_count,                    AVG_TIMER_WAIT/1000000000 AS avg_latency_sec,                    MAX_TIMER_WAIT/1000000000 AS max_latency_sec,                    SUM_ROWS_SENT AS rows_sent                FROM performance_schema.events_statements_summary_by_digest                WHERE AVG_TIMER_WAIT/1000000000 > 1 -- 平均执行时间超过1秒                ORDER BY AVG_TIMER_WAIT DESC                LIMIT %s            """            cursor.execute(sql, (limit,))            slow_queries = cursor.fetchall()            return slow_queries    except pymysql.MySQLError as e:        print(f"数据库查询失败 ({db_config['host']}): {e}")        return []    finally:        if 'connection' in locals():            connection.close()def analyze_slow_queries(db_configs):    """分析多个数据库的慢查询,生成汇总报告"""    all_slow_queries = []    for db_config in db_configs:        host = db_config["host"]        print(f"\n正在分析数据库: {host}...")        slow_queries = get_slow_queries(db_config, None, None, limit=10)        for query in slow_queries:            query["host"] = host            all_slow_queries.append(query)        print(f"✓ 找到 {len(slow_queries)} 条慢查询")    # 转换为DataFrame进行分析    df = pd.DataFrame(all_slow_queries)    if df.empty:        print("\n未发现慢查询")        return None    # 按平均延迟排序    df = df.sort_values("avg_latency_sec", ascending=False)    # 生成报告    report = {        "generated_at": datetime.now().isoformat(),        "total_slow_queries": len(df),        "top_10_slow_queries": df.head(10).to_dict("records")    }    return reportif __name__ == "__main__":    print("=" * 70)    print("MySQL慢查询分析工具")    print("=" * 70)    report = analyze_slow_queries(DB_CONFIGS)    if report:        # 保存报告        report_file = f"slow_query_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"        with open(report_file, "w") as f:            json.dump(report, f, indent=2, ensure_ascii=False)        print(f"\n报告已保存: {report_file}")        print("\nTOP 10 慢查询:")        print("-" * 70)        for idx, query in enumerate(report["top_10_slow_queries"], 1):            print(f"\n#{idx}")            print(f" 数据库: {query['host']}")            print(f" 查询模式: {query['query_pattern'][:80]}...")            print(f" 执行次数: {query['exec_count']}")            print(f" 平均延迟: {query['avg_latency_sec']:.2f}秒")            print(f" 最大延迟: {query['max_latency_sec']:.2f}秒")

📊 真实案例:电商平台大促前的批量运维实战

🎯 案例背景

某电商平台计划在双11期间进行大促活动,预计流量是平时的50倍。运维团队需要在活动前完成以下任务:

  1. 检查200台应用服务器的磁盘空间、CPU、内存使用情况

  2. 确认所有数据库主从同步正常

  3. 批量更新Nginx配置,提升连接数限制

  4. 通过API批量扩容云资源(ECS、RDS、Redis)

🛠️ 解决方案

团队使用Python编写了自动化运维脚本,组合使用paramikorequestsPyMySQL三大库:

步骤1:服务器健康检查(Paramiko + 多线程)

编写脚本并发SSH到200台服务器,执行df -hfree -muptime命令,收集系统状态并生成Excel报告。原本需要3人天的人工检查,自动化后仅需15分钟。

步骤2:数据库主从检查(PyMySQL)

连接所有MySQL实例,执行SHOW SLAVE STATUS命令,检查Seconds_Behind_Master是否小于60秒。发现3台从库延迟超过300秒,及时进行故障切换,避免了大促期间的数据不一致问题。

步骤3:批量配置更新(Paramiko + SFTP)

使用Paramiko的SFTP功能,将新的Nginx配置文件批量上传到200台服务器,然后通过SSH执行nginx -t && systemctl reload nginx重载配置。整个过程耗时不到10分钟,零错误。

步骤4:云资源扩容(Requests + 云平台SDK)

调用阿里云API,批量创建50台ECS实例,扩容RDS连接数到5000,扩容Redis带宽到10Gbps。通过Python脚本监控扩容进度,全部资源在30分钟内就绪。

📈 成果

  • 效率提升:200台服务器的检查时间从3天缩短到15分钟

  • 准确性:自动化脚本零人为错误,所有配置一致性100%

  • 及时性:提前发现3台数据库从库延迟问题,避免故障

  • 可复用性:脚本保存为运维工具库,后续活动直接使用

💡 经验总结

1. 并发控制很重要:ThreadPoolExecutor的max_workers设置为20,避免过多并发导致网络拥塞或被云平台的API限流。

2. 结果持久化:所有检查结果保存为JSON/Excel,方便追溯和审计。

3. 异常重试机制:网络波动可能导致SSH连接失败,添加3次重试逻辑显著提高成功率。

4. 权限最小化:为自动化脚本创建专门的运维账号,仅授予必要权限,降低安全风险。

⚠️ 避坑指南:实战中的7个常见错误

序号常见错误问题描述正确做法
1SSH密码明文存储将服务器密码硬编码在脚本中,导致安全风险使用SSH密钥认证,或从密钥管理服务(如KMS)动态获取密码
2没有设置超时SSH连接或命令执行挂起,导致脚本卡死设置timeout参数,并使用signal模块实现超时强制退出
3并发数过高同时SSH连接过多服务器,导致网络拥塞或被防火墙拦截控制并发数(建议10-20),使用信号量(Semaphore)限流
4没有错误处理某台服务器执行失败,导致整个脚本终止使用try-except捕获异常,记录失败服务器,继续执行其他任务
5数据库连接未关闭PyMySQL连接未关闭,导致数据库连接池耗尽使用try-finallywith语句确保连接关闭
6SQL注入风险使用字符串拼接构造SQL语句,存在注入风险使用参数化查询:cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
7API限流未处理频繁调用云平台API,触发限流导致失败添加限流逻辑,使用time.sleep()控制调用频率,并实现重试机制

💡 额外建议

使用连接池:对于频繁的数据库操作,使用数据库连接池(如DBUtils)复用连接,提升性能。

添加日志:使用logging模块记录详细日志,便于问题排查和审计。

配置分离:将服务器列表、数据库配置等分离到配置文件(YAML/JSON),避免硬编码。

单元测试:为关键函数编写单元测试,使用unittest.mock模拟SSH/HTTP/DB连接,提升代码质量。

- 完 -

感谢阅读!对您有帮助的话,点亮👍🏻❤️,关注公众号,转发给需要的朋友~ 原创转载请联系授权。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 12:16:41 HTTP/2.0 GET : https://f.mffb.com.cn/a/496644.html
  2. 运行时间 : 0.327808s [ 吞吐率:3.05req/s ] 内存消耗:4,873.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7068b1a4e109acd2d21aa616d70d37be
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000589s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000653s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000327s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.007322s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000716s ]
  6. SELECT * FROM `set` [ RunTime:0.000262s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000715s ]
  8. SELECT * FROM `article` WHERE `id` = 496644 LIMIT 1 [ RunTime:0.011696s ]
  9. UPDATE `article` SET `lasttime` = 1783052201 WHERE `id` = 496644 [ RunTime:0.030579s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.004460s ]
  11. SELECT * FROM `article` WHERE `id` < 496644 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000699s ]
  12. SELECT * FROM `article` WHERE `id` > 496644 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009146s ]
  13. SELECT * FROM `article` WHERE `id` < 496644 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003171s ]
  14. SELECT * FROM `article` WHERE `id` < 496644 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.021440s ]
  15. SELECT * FROM `article` WHERE `id` < 496644 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.168698s ]
0.329429s