SQL Server 2000 备份还原实战:老库维护与迁移指南
简介这份PDF图文教程面向SQL Server 2000数据库管理员与运维初学者聚焦数据库备份还原这一核心运维场景帮助读者掌握数据安全保障与业务连续性的基础操作。内容围绕完整备份、差异备份与事务日志备份三种类型展开并覆盖企业管理器下的还原流程、从设备导入备份文件、恢复模式选项设置以及MDF与LDF文件的附加数据库方法和Mssqluser权限配置要点可帮助读者排查还原失败、路径错误等常见问题。资源包共1个PDF文件大小约327KB轻量便携适合随时查阅对照。目前已有302人学习说明该教程在老旧系统维护场景中仍有实用参考价值适合需要快速上手SQL Server 2000备份还原操作的技术人员收藏使用。1. SQL Server 2000 备份还原老库还在跑这件事就绕不开机房角落里那台工控机还在跑 Windows 2000 Server上面挂着一个 SQL Server 2000 实例里面存着十几年的生产工单。你明知道它老得掉牙可业务没停你就得管。SQL Server 2000 数据库备份还原这件事说穿了就两条路一条是图形界面点鼠标一条是查询分析器敲 T-SQL。前者适合偶尔救急后者适合写成作业每天自动跑。麻烦在于这版本太老网上搜到的教程大多默认你用的是 2005 以后的版本界面截图对不上命令语法也有出入照着做很容易在“还原”那一步翻车。这篇笔记就按我实际处理老库的顺序把备份、还原、常见报错和几个容易忽略的参数讲清楚适合还在维护 SQL Server 2000 的运维和开发也适合第一次接手老系统、需要把库完整搬走的人。2. 先搞清楚 SQL Server 2000 有哪几种备份别上来就点完整备份2.1 完整备份、差异备份、事务日志备份分别解决什么问题SQL Server 2000 的备份类型和后面版本大体一致但界面和选项位置不同。完整备份是把整个数据库的数据和日志一起写进一个 .bak 文件恢复时能回到备份完成的那一刻。差异备份只记录上次完整备份之后变化的数据页文件小、速度快但必须依附于一个完整备份才能还原。事务日志备份记录的是日志文件里的所有事务能把数据库恢复到某个时间点前提是数据库的恢复模式是“完整”或“大容量日志”。我一般这样组合每周日做一次完整备份周一到周六每天做一次差异备份如果业务对数据丢失时间敏感再加每小时一次的事务日志备份。SQL Server 2000 默认的恢复模式是“简单”这种模式下事务日志备份不可用日志会在检查点后自动截断。如果你需要日志备份先去数据库属性里把恢复模式改成“完整”。提示改恢复模式之前先做一次完整备份否则切换瞬间的日志链会断后面日志备份可能报错。2.2 用企业管理器做一次完整备份的步骤打开企业管理器展开服务器组找到目标数据库右键选择“所有任务”里的“备份数据库”。在弹出的窗口里备份类型选“数据库-完整”目标选“磁盘”然后指定一个路径比如D:\Backup\MyDB_Full_20240101.bak。如果勾选“重写现有媒体”新备份会覆盖同名文件不勾选则追加。老库的备份文件通常不大但磁盘空间要留够至少是数据库大小的两倍。点“确定”之后SQL Server 2000 会开始备份。备份过程中可以在“备份进度”窗口看到进度条。如果数据库比较大建议在业务低峰期做因为完整备份会占用较多 I/O。备份完成后去目标路径确认文件存在大小不为 0。这一步看着简单但我见过有人把路径写到不存在的目录企业管理器不报错备份直接失败事后才发现。2.3 用 T-SQL 做备份方便写成作业图形界面适合手动操作但如果你要每天定时备份用 T-SQL 更靠谱。在查询分析器里连上实例执行下面这段-- 完整备份覆盖同名文件 BACKUP DATABASE [MyDB] TO DISK ND:\Backup\MyDB_Full_20240101.bak WITH INIT, NAME NMyDB-Full Backup, STATS 10;WITH INIT表示覆盖现有备份集不加则追加。STATS 10让 SQL Server 每完成 10% 在消息窗口输出一次进度。NAME是备份集名称方便以后用RESTORE HEADERONLY查看。差异备份的写法BACKUP DATABASE [MyDB] TO DISK ND:\Backup\MyDB_Diff_20240101.bak WITH DIFFERENTIAL, INIT, STATS 10;事务日志备份BACKUP LOG [MyDB] TO DISK ND:\Backup\MyDB_Log_20240101.trn WITH INIT, STATS 10;这三条命令可以放进 SQL Server 代理作业里按计划执行。SQL Server 2000 的代理作业配置和后面版本差不多新建作业、加步骤、设计划就行。注意作业的“所有者”要设成有权限的账号否则执行时会报权限错误。2.4 备份文件怎么验证有没有坏备份做完不等于能用。我习惯用RESTORE VERIFYONLY检查备份集是否完整RESTORE VERIFYONLY FROM DISK ND:\Backup\MyDB_Full_20240101.bak;如果返回“备份集有效”说明文件没损坏。这个命令只读备份头不实际还原速度很快。另一个办法是RESTORE HEADERONLY能看到备份集里的数据库名、备份类型、备份时间、LSN 等信息。老库的备份文件如果放在网络共享上还要注意权限和网络稳定性我遇到过备份写到一半网络断了文件大小正常但实际不完整VERIFYONLY直接报错。3. 还原才是真正容易翻车的地方路径、权限、版本一个都不能错3.1 还原完整备份的最小命令还原完整备份的基本语法RESTORE DATABASE [MyDB] FROM DISK ND:\Backup\MyDB_Full_20240101.bak WITH RECOVERY, STATS 10;WITH RECOVERY表示还原完成后数据库可用。如果后面还要接着还原差异备份或日志备份这里要改成WITH NORECOVERY否则数据库会进入“正在还原”状态后续还原会报错。如果目标数据库已经存在需要先确保没有连接占用或者用WITH REPLACE覆盖RESTORE DATABASE [MyDB] FROM DISK ND:\Backup\MyDB_Full_20240101.bak WITH REPLACE, RECOVERY, STATS 10;REPLACE会覆盖现有数据库包括文件。用之前确认目标库确实可以丢。3.2 还原时文件路径不对怎么办SQL Server 2000 的备份文件里记录了原始数据库的数据文件和日志文件路径。如果还原到另一台机器或者原路径不存在还原会失败报“无法打开备份设备”或“文件路径无效”。解决办法是用WITH MOVE把文件重定向到新路径RESTORE DATABASE [MyDB] FROM DISK ND:\Backup\MyDB_Full_20240101.bak WITH MOVE NMyDB_Data TO NE:\Data\MyDB_Data.mdf, MOVE NMyDB_Log TO NE:\Data\MyDB_Log.ldf, RECOVERY, STATS 10;MyDB_Data和MyDB_Log是逻辑文件名不是物理文件名。用RESTORE FILELISTONLY可以查出来RESTORE FILELISTONLY FROM DISK ND:\Backup\MyDB_Full_20240101.bak;结果里LogicalName列就是逻辑文件名PhysicalName是原始物理路径。还原到新环境时先跑这条命令把逻辑名和你要放的新路径对应好再写MOVE子句。3.3 差异备份和日志备份的还原顺序如果你有完整备份 差异备份 日志备份还原顺序不能乱先还原完整备份用WITH NORECOVERY。再还原差异备份用WITH NORECOVERY。最后还原日志备份用WITH RECOVERY。示例-- 第一步完整备份 RESTORE DATABASE [MyDB] FROM DISK ND:\Backup\MyDB_Full_20240101.bak WITH NORECOVERY, STATS 10; -- 第二步差异备份 RESTORE DATABASE [MyDB] FROM DISK ND:\Backup\MyDB_Diff_20240101.bak WITH NORECOVERY, STATS 10; -- 第三步日志备份 RESTORE LOG [MyDB] FROM DISK ND:\Backup\MyDB_Log_20240101.trn WITH RECOVERY, STATS 10;如果中间某一步报错数据库会停在“正在还原”状态。想放弃还原执行RESTORE DATABASE [MyDB] WITH RECOVERY;这会让数据库直接可用但只恢复到当前已还原的部分。3.4 还原到不同版本或不同实例的注意事项SQL Server 2000 的备份不能直接还原到 SQL Server 2005 及更高版本反过来也不行。高版本的备份文件在低版本上无法识别低版本的备份文件在高版本上虽然能还原但会触发升级还原后数据库兼容级别会变。如果你只是想把老库搬到新实例常见做法是在老实例上做完整备份然后在新实例上用“还原数据库”向导让新实例自动升级。升级前务必在测试环境验证一遍老库里的某些 T-SQL 语法在新版本可能不兼容。另外SQL Server 2000 Desktop EngineMSDE的备份还原和标准版基本一致但 MSDE 没有企业管理器图形界面只能用命令行工具osql或sqlcmd如果装了。用osql执行备份osql -S .\实例名 -U sa -P 密码 -Q BACKUP DATABASE [MyDB] TO DISK D:\Backup\MyDB.bak WITH INITMSDE 的还原同样用osql调RESTORE DATABASE语句。注意 MSDE 有 2GB 数据库大小限制备份文件超过这个限制还原会失败。4. 避坑SQL Server 2000 备份还原最常见的 5 个问题4.1 还原报“数据库正在使用无法获得独占访问”现象执行RESTORE DATABASE时提示数据库正在使用无法还原。原因有活动连接占着数据库SQL Server 2000 不像后面版本有WITH ROLLBACK IMMEDIATE选项不能自动踢掉连接。解决先把数据库设成单用户模式再还原。命令ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;如果这条命令在 SQL Server 2000 上不支持WITH ROLLBACK IMMEDIATE就先用sp_who2找到连接用KILL杀掉。或者直接重启 SQL Server 服务但生产环境慎用。4.2 备份文件很大还原时磁盘空间不够现象还原到一半报“磁盘空间不足”。原因备份文件里包含数据和日志还原时需要额外空间解压和重建。如果原库 10GB备份文件可能 8GB但还原后数据文件加日志文件可能超过 15GB。解决还原前先估算目标库大小用RESTORE FILELISTONLY看Size列留出至少 1.5 倍空间。如果空间紧张可以只还原数据文件日志文件设小一点但 SQL Server 2000 对日志文件大小控制不如后面版本灵活。4.3 还原后数据库变成“只读”或“可疑”现象还原完成但数据库状态显示“可疑”或“只读”无法写入。原因常见于还原时文件路径权限不对或者备份文件来自不同排序规则的实例。SQL Server 2000 的排序规则在实例级别设置跨实例还原时如果排序规则不一致数据库可能无法正常启动。解决检查 SQL Server 服务账号对数据目录是否有完全控制权限。排序规则问题比较麻烦通常需要在同排序规则的实例上还原或者用bcp导出数据再导入。老库迁移前先确认源实例和目标实例的排序规则。4.4 事务日志备份失败报“日志已截断”现象执行BACKUP LOG时报错提示日志已截断或没有可备份的日志。原因数据库恢复模式是“简单”或者之前做过完整备份后没有做过日志备份日志链断了。解决把恢复模式改成“完整”做一次完整备份然后再做日志备份。如果日志文件已经很大先做一次完整备份再收缩日志文件但收缩前确认不需要恢复到之前的时间点。4.5 用 osql 执行备份时中文路径或密码含特殊字符报错现象osql命令里路径含中文或者 sa 密码含$、!等字符命令执行失败。原因osql对特殊字符处理不好命令行解析容易出错。解决路径尽量用英文密码避免特殊字符。如果必须用把密码写在脚本文件里用-i参数执行或者用-P参数时加引号。MSDE 环境下我一般把备份语句写成一个.sql文件然后用osql -S 实例 -U sa -P 密码 -i backup.sql执行这样最稳。5. 老库备份还原的进阶习惯脚本化、验证、留后路5.1 把备份还原写成可重复执行的脚本手动点企业管理器只适合救急长期维护一定要脚本化。我一般会建一个D:\Scripts\目录里面放几个文件full_backup.sql完整备份语句diff_backup.sql差异备份语句log_backup.sql日志备份语句restore_full.sql完整还原语句带MOVE和NORECOVERYrestore_diff.sql差异还原语句restore_log.sql日志还原语句带RECOVERY然后用 Windows 任务计划或 SQL Server 代理作业调用osql执行。脚本里的路径和数据库名用变量替换方便复用到其他库。比如-- full_backup.sql DECLARE dbName NVARCHAR(100); DECLARE backupPath NVARCHAR(200); SET dbName NMyDB; SET backupPath ND:\Backup\ dbName N_Full_ CONVERT(NVARCHAR(8), GETDATE(), 112) N.bak; BACKUP DATABASE dbName TO DISK backupPath WITH INIT, STATS 10;这样每天生成的备份文件名带日期不会互相覆盖。还原时按日期找对应文件就行。5.2 定期做还原演练别等出事才试备份文件能不能还原只有真正还原一次才知道。我习惯每季度做一次还原演练在一台测试机上装同样的 SQL Server 2000 实例把最近的生产备份还原进去然后跑几个关键查询验证数据。演练时重点看三件事还原耗时、还原后数据库状态、关键表行数是否对得上。如果还原失败趁业务没停还有时间排查等生产库真挂了再发现备份不能用那就只能后悔了。5.3 保留多份备份至少一份离线SQL Server 2000 的备份文件默认放在本地磁盘如果磁盘坏了备份也跟着没。我一般会保留三份一份在本地D:\Backup\一份在另一台机器的共享目录一份定期拷到移动硬盘上离线保存。离线那份最重要勒索病毒或者误删除时只有离线备份能救你。拷贝到移动硬盘后记得用RESTORE VERIFYONLY验证一遍确认文件完整。5.4 用 RESTORE HEADERONLY 快速定位该用哪个备份备份文件多了以后光看文件名不一定能确定里面是什么。用RESTORE HEADERONLY可以列出备份集里的详细信息RESTORE HEADERONLY FROM DISK ND:\Backup\MyDB_Full_20240101.bak;结果里BackupType列1 是完整备份2 是差异备份3 是事务日志备份。BackupStartDate和BackupFinishDate是备份起止时间。DatabaseName是数据库名。还原前先跑这条命令确认备份集类型和时间避免拿差异备份当完整备份还原那种错误一报就是“无法还原因为备份集不包含完整备份”。5.5 一个具体技巧用 WITH MOVE 把老库还原到新路径并重命名如果你想把老库还原成另一个名字比如MyDB_Test同时把文件放到新路径可以这样写RESTORE DATABASE [MyDB_Test] FROM DISK ND:\Backup\MyDB_Full_20240101.bak WITH MOVE NMyDB_Data TO NE:\Test\MyDB_Test_Data.mdf, MOVE NMyDB_Log TO NE:\Test\MyDB_Test_Log.ldf, RECOVERY, STATS 10;注意目标数据库名MyDB_Test不能和现有数据库重名。MOVE子句里的逻辑文件名必须和备份集里的一致用RESTORE FILELISTONLY查。还原完成后MyDB_Test就是独立的一份数据改它不影响原库。这个技巧在做数据验证、测试升级、排查数据问题时特别有用。我自己的习惯是每次接手一个老库先做一次完整备份用RESTORE VERIFYONLY验证再用RESTORE FILELISTONLY记下逻辑文件名和原始路径然后写一套还原脚本放在手边。老库不出事则已一出事就是急事手边有脚本和验证过的备份心里才不慌。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

微信聊天记录提取与导出:解密SQLCipher数据库并生成CSV/HTML/Word文档

微信聊天记录提取与导出:解密SQLCipher数据库并生成CSV/HTML/Word文档

简介:一款面向微信用户和数据分析爱好者的聊天记录提取与管理工具,支持将聊天内容导出为HTML、Word、CSV等格式,便于永久保存和二次利用;内置分析模块可生成年度聊天报告,适合需要备份重要对话、制作纪念内容或完成课程…

2026/10/12 22:11:21 阅读更多 →
Spring Boot+Vue反诈视频宣传系统:从源码到部署全解析

Spring Boot+Vue反诈视频宣传系统:从源码到部署全解析

简介:面向毕业设计与课程设计场景,这份JavaSpringbootVue开发的反诈视频宣传系统源码包,围绕电信网络诈骗防范知识普及,提供完整的前后端分离实现方案,包含视频上传、播放、评论互动及知识展示等核心功能。压缩包共372…

2026/10/12 22:11:42 阅读更多 →
基于SSM+Vue的楼宇智能化管理系统毕业设计全攻略

基于SSM+Vue的楼宇智能化管理系统毕业设计全攻略

2026年的毕设选题又到集中开工期了。每年这个时候,我都能看到不少人在“SSM Vue”这个黄金组合上打转。你看到“楼宇智能节的系统”这个标题,大概率是“楼宇智能化系统”的笔误,或者是指楼宇的智能节点/智能终端。不管是哪种,核心…

2026/10/12 22:08:51 阅读更多 →

最新新闻

ESP32舵机控制全攻略:从PWM基础到多路同步与物联网实战

ESP32舵机控制全攻略:从PWM基础到多路同步与物联网实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:19:02 阅读更多 →
通讯时断时续排查:接线正常后,物理层与供电层隐性故障诊断

通讯时断时续排查:接线正常后,物理层与供电层隐性故障诊断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:19:02 阅读更多 →
Linux与Windows服务器间XML文件共享数据交换方案

Linux与Windows服务器间XML文件共享数据交换方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:19:02 阅读更多 →
TOTP双因素认证原理与实战:从算法到工程落地

TOTP双因素认证原理与实战:从算法到工程落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:19:02 阅读更多 →
C++高性能Point类设计:值语义、浮点容差与STL友好实践

C++高性能Point类设计:值语义、浮点容差与STL友好实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:19:02 阅读更多 →
微信小程序自定义导航栏完整指南:高度计算与组件封装

微信小程序自定义导航栏完整指南:高度计算与组件封装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:18:01 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →