Linux如何配置系统备份方案?_Linux全量与增量备份技巧

linux系统备份需选择合适工具并制定清晰策略。首先,备份内容应包括/etc配置文件、/home用户数据、/var/www应用数据、关键日志及软件包列表;其次,常用工具包括rsync(推荐用于增量备份)、tar(适合全量打包)、dump/restore(文件系统级备份)、dd(磁盘镜像)和lvm快照(一致性备份);再者,备份目标可选外部硬盘、nas或云存储;最后,通过cron实现自动化,并定期验证恢复有效性。全量备份适用于数据变化小的场景,而增量备份适合频繁变更的数据,结合使用可平衡效率与恢复便捷性。最佳实践包括明确备份范围、遵循3-2-1异地存储原则、设置保留策略、保障备份安全及处理权限、一致性、存储空间和网络传输等常见问题。

Linux如何配置系统备份方案?_Linux全量与增量备份技巧

配置Linux系统备份,核心在于选择合适的工具、制定清晰的策略,并确保其自动化与可恢复性。这并非一蹴而就的简单命令,而是一套需要深思熟虑的流程,涉及到数据的重要性、恢复时间目标(RTO)和恢复点目标(RPO)的权衡。无论是全量还是增量备份,关键在于理解其背后的原理和适用场景,并将其融入日常运维实践。

Linux如何配置系统备份方案?_Linux全量与增量备份技巧

解决方案

Linux系统备份方案的构建,本质上是对数据安全和业务连续性的投资。它通常围绕几个核心要素展开:备份什么、用什么工具备份、备份到哪里、如何自动化以及如何验证。

首先,备份什么至关重要。你不可能备份整个系统,那既不高效也无必要。通常,你需要关注:

Linux如何配置系统备份方案?_Linux全量与增量备份技巧配置文件: /etc 目录下的所有内容,这是系统和应用运行的基石。用户数据: /home 目录,包含用户文档、设置等。应用数据: 比如Web服务器的/var/www,数据库文件(通常需要通过数据库自身的导出工具而非直接复制文件),以及其他自定义应用的数据目录。关键日志: 某些/var/log下的特定日志文件,用于审计或故障排查。软件包列表: dpkg --get-selections (Debian/Ubuntu) 或 rpm -qa (RHEL/CentOS) 可以记录已安装的软件包,便于灾难恢复后快速重建环境。

其次,用什么工具是实现备份的关键。Linux生态提供了多种选择,各有侧重:

rsync 这是我个人最常用也最推荐的工具,尤其适用于增量备份。它能高效地同步文件和目录,只传输差异部分,并能保留文件权限、时间戳、符号链接等。其强大的--link-dest选项是实现硬链接式增量备份(也称作”合成全量”或”增量备份但看起来像全量”)的核心。tar 创建归档文件(tarball)的瑞士军刀。适合打包整个目录或文件集,并可以结合gzipbzip2进行压缩。全量备份时非常方便,但其原生增量备份功能(--listed-incremental)相对复杂且不常用。dumprestore 这是Linux文件系统级别的备份工具,可以直接备份整个文件系统(如ext4),能够处理硬链接和特殊文件,适合对整个分区进行全量或增量备份,但使用起来不如rsync灵活。dd 块级复制工具,可以复制整个磁盘或分区,生成镜像文件。适用于系统迁移或制作完整系统快照,但备份粒度大,不适合日常文件级备份。LVM快照: 如果你的系统使用了逻辑卷管理(LVM),可以在不中断服务的情况下创建文件系统的一致性快照,然后从快照中进行备份。这对于需要备份数据库或运行中应用的数据尤其有用。

再者,备份到哪里同样重要。本地备份虽然方便,但无法抵御硬件故障或物理灾害。远程备份是更稳健的选择:

Linux如何配置系统备份方案?_Linux全量与增量备份技巧外部硬盘/USB驱动器: 简单直接,适合小型服务器或个人电脑网络附加存储(NAS): 通过NFS或SMB/CIFS协议挂载,提供共享存储空间。另一台服务器/云存储: 通过ssh结合rsync,或者使用云服务商提供的CLI工具(如AWS S3 CLI, Azure CLI)将备份数据上传到云端。

最后,自动化和验证是备份方案的生命线。手动备份容易遗漏或出错,而没有经过验证的备份形同虚设。

自动化: 使用cron定时任务来调度备份脚本。验证: 定期进行恢复演练,确保备份数据是完整且可用的。这往往是被忽视但最关键的一步。

Linux系统备份,全量与增量备份策略如何选择与实施?

在Linux系统备份中,全量备份(Full Backup)和增量备份(Incremental Backup)是两种最基本的策略。选择哪种,或者如何组合它们,取决于你的数据变化频率、存储空间、恢复时间目标(RTO)和恢复点目标(RPO)。

全量备份(Full Backup)

概念: 每次备份都复制所有选定的数据,不考虑上次备份以来的变化。

优点: 恢复最简单、最快,因为所有数据都在一个备份集中。

缺点: 占用存储空间大,备份时间长,尤其对于大量数据。

适用场景: 数据不经常变化,或作为周/月度基线备份。例如,我通常会设定每周日凌晨进行一次全量备份,确保有一个完整的“快照”。

实施示例(使用tar):

#!/bin/bashBACKUP_DIR="/mnt/backup/full_backups"SOURCE_DIR="/var/www /etc /home"TIMESTAMP=$(date +%Y%m%d_%H%M%S)BACKUP_FILE="${BACKUP_DIR}/system_full_${TIMESTAMP}.tar.gz"mkdir -p "$BACKUP_DIR"tar -czvf "$BACKUP_FILE" $SOURCE_DIR --exclude=/var/www/cache --exclude=/home/user/.cache# 排除一些不必要的目录可以显著减少备份大小

这里需要注意,tar--exclude参数非常重要,比如/proc/sys/dev/run/tmp这些不应该被备份的虚拟文件系统或临时文件。

增量备份(Incremental Backup)

概念: 首次进行全量备份,之后每次只备份自上次任何类型备份(无论是全量还是增量)以来发生变化或新增的数据。

优点: 备份速度快,占用存储空间小。

缺点: 恢复复杂,需要原始全量备份和所有后续的增量备份链。如果链中任何一个环节损坏,恢复就可能失败。RTO会变长。

适用场景: 数据变化频繁,但对存储空间和备份窗口有严格限制的场景。例如,每日的日常备份。

实施示例(使用rsync--link-dest):rsync--link-dest选项是实现“硬链接式增量备份”的利器。它并非传统意义上的增量备份,而是在目标位置创建看起来像全量备份的目录结构,但未修改的文件通过硬链接指向前一个备份,只复制新增或修改的文件。

#!/bin/bashBACKUP_BASE="/mnt/backup/rsync_snapshots"SOURCE_DIR="/var/www /etc /home"CURRENT_SNAPSHOT="${BACKUP_BASE}/$(date +%Y%m%d_%H%M%S)"LAST_SNAPSHOT=$(find "$BACKUP_BASE" -maxdepth 1 -type d -name "2*" | sort -r | head -n 1) # 找到最近的快照目录mkdir -p "$CURRENT_SNAPSHOT"if [ -n "$LAST_SNAPSHOT" ]; then    echo "Performing incremental backup using --link-dest from $LAST_SNAPSHOT"    # --archive (-a): 等同于 -rlptgoD,递归、保留软链接、权限、时间、组、所有者、设备文件和特殊文件    # --delete: 删除目标中源没有的文件    # --link-dest: 未修改的文件通过硬链接指向这个目录,节省空间    rsync -a --delete --link-dest="$LAST_SNAPSHOT" $SOURCE_DIR "$CURRENT_SNAPSHOT"else    echo "Performing initial full backup."    rsync -a $SOURCE_DIR "$CURRENT_SNAPSHOT"fi# 排除列表可以放在一个文件里,然后用 --exclude-from=EXCLUDE_FILE# 例如:--exclude '/proc/*' --exclude '/sys/*' --exclude '/dev/*'

这种方式生成的每个“快照”目录,看起来都是一个完整的全量备份,但实际占用的空间是增量式的,恢复时也只需指向最新的快照目录,非常方便。

商汤商量 商汤商量

商汤科技研发的AI对话工具,商量商量,都能解决。

商汤商量 36 查看详情 商汤商量

差异备份(Differential Backup)

概念: 首次进行全量备份,之后每次只备份自上次全量备份以来发生变化或新增的数据。优点: 恢复相对简单,只需全量备份和最新的一个差异备份。比增量备份的恢复链更短。缺点: 差异备份会随着时间推移逐渐增大,备份时间也会变长。适用场景: 介于全量和增量之间,需要较快恢复但又不想每次都全量备份的场景。例如,每周全量,周一到周五每天差异备份。实施: rsync也可以通过一些脚本逻辑实现差异备份,例如,总是--link-dest到最近的全量备份目录。tar--listed-incremental也可以实现,但管理起来比较繁琐。

策略组合:最常见的策略是“全量 + 增量”或“全量 + 差异”。例如:

每周全量备份: 提供一个稳定的恢复点。每日增量备份(或rsync --link-dest快照): 捕获日常数据变化,节省空间和时间。这种组合提供了良好的平衡,既有完整的基线,又有高效的日常更新。

配置Linux系统备份,有哪些常用的工具和最佳实践?

除了前面提到的rsynctardump/restoredd,还有一些更现代、功能更强大的备份工具值得了解。同时,遵循一些最佳实践能让你的备份方案更可靠。

常用工具的深入探讨:

rsync

优势: 效率极高(只传输差异),可跨网络同步(通过SSH),保留文件属性(权限、时间戳、所有者、组),支持排除列表,支持断点续传。高级用法:--delete: 同步时删除目标中源没有的文件,保持一致性。--exclude-from=FILE: 从文件中读取需要排除的路径列表,非常灵活。--dry-run: 模拟操作,不实际执行,用于测试。--compress: 传输时压缩数据,减少网络带宽占用。局限: 不处理文件系统层面的元数据(如ACLs、xattrs),需要配合其他工具或手动处理。

tar

优势: 广泛可用,打包和解包方便,支持多种压缩格式(gzip, bzip2, xz),可以备份到标准输出,便于管道操作。高级用法:-C /path/to/extract: 解压到指定目录。--exclude: 排除特定文件或目录。--use-compress-program=pigz: 使用更快的并行压缩工具。局限: 默认不适合增量备份(虽然有--listed-incremental但复杂),不适合实时同步。

LVM快照:

优势: 可以在不中断应用服务的情况下,获取文件系统的一致性视图。这对于数据库、邮件服务器等持续写入的应用至关重要。使用流程:创建快照:lvcreate --size 1G --snapshot --name my_snapshot /dev/vg_name/lv_name挂载快照:mount /dev/vg_name/my_snapshot /mnt/snapshot/mnt/snapshot进行备份(使用rsynctar)。取消挂载并删除快照:umount /mnt/snapshot && lvremove /dev/vg_name/my_snapshot局限: 需要LVM支持,快照本身会占用空间,且如果原始逻辑卷变化过快,快照可能溢出。

现代备份工具(如borgbackup, restic):

优势: 数据去重(deduplication),加密,压缩,远程备份支持(SSH, S3等),易于管理,支持快照式备份。它们能显著节省存储空间,并提供更高级的功能。适用场景: 对数据安全、存储效率和管理便利性有更高要求的场景。我个人用borgbackup备份一些重要的开发项目,它的去重和加密特性让人很安心。局限: 需要额外安装,学习曲线比rsync/tar略高。

备份最佳实践:

明确备份范围:

必备份: /etc (配置), /home (用户数据), /var/www (Web应用), /var/lib/mysql (数据库,但最好用mysqldump等工具导出), /opt (自定义应用)。不备份: /proc, /sys, /dev, /run, /tmp, /mnt, /media, /lost+found。这些是虚拟文件系统、临时文件或挂载点,备份无意义且可能导致问题。按需备份: /var/log (日志文件), /var/spool (邮件队列), /usr/local (本地安装软件)。

异地存储原则(3-2-1法则):

3份数据: 原始数据 + 2份备份。2种不同存储介质: 例如,本地硬盘 + 外部硬盘/NAS/云存储。1份异地存储: 至少一份备份存放在远离原始数据的地方,以防火灾、盗窃等物理灾害。

自动化:

使用cron定时任务调度备份脚本。例如,每天凌晨执行一次增量备份,每周执行一次全量备份。将备份脚本放在/usr/local/bin/opt/scripts等标准位置,并确保它们有执行权限。

备份验证与恢复演练:

这是最容易被忽视但最关键的一步。没有验证的备份是无效的。定期(比如每月或每季度)尝试从备份中恢复部分关键文件或目录到测试环境。模拟一次完整的系统恢复过程,验证整个方案的有效性。

监控与日志:

确保备份脚本的输出被记录到日志文件,并定期检查日志,或配置邮件通知,以便及时发现备份失败。检查备份目标存储空间的剩余量,避免因空间不足导致备份失败。

安全性:

备份数据可能包含敏感信息,确保备份存储介质的安全。对远程备份使用SSH等加密传输协议。对存储在不可信介质上的备份数据进行加密(例如,使用gpg加密tar包,或使用LUKS加密整个备份分区)。限制备份用户对备份目录的权限,遵循最小权限原则。

保留策略(Retention Policy):

确定备份需要保留多长时间,以及保留多少个版本。常见的有“祖父-父-子”(GFS)策略:保留若干个每日备份(子),若干个每周备份(父),若干个每月备份(祖父)。定期清理过期备份,释放存储空间。

Linux备份方案实施中,如何应对常见挑战与错误?

实施Linux系统备份方案,并非一帆风顺,总会遇到一些棘手的问题。理解这些常见挑战并提前规划应对策略,能大大提升备份方案的健壮性。

权限和特殊文件处理:

挑战: rsync在同步时可能会遇到某些特殊权限的文件(如setuid位的文件)、设备文件、命名管道等。如果目标文件系统不支持或权限设置不当,可能导致备份不完整或恢复后功能异常。应对:使用rsync -a(即--archive)参数,它包含了-rlptgoD,会尽力保留权限、时间戳、符号链接、所有者、组、设备文件和特殊文件。对于设备文件(/dev),通常不备份,因为它们是内核在启动时动态创建的。如果确实需要保留某些特殊的ACLs或xattrs,rsync--acls--xattrs参数,但需要目标文件系统支持。运行备份的用户应具有足够的读取权限(通常是root用户或通过sudo)。

打开的文件和数据库一致性问题:

挑战: 当文件正在被写入时进行备份,可能导致备份文件不完整或损坏。特别是数据库文件,直接复制正在运行的数据库文件几乎一定会导致数据不一致。应对:LVM快照: 这是处理文件系统一致性的黄金标准。在创建快照后,文件系统在快照点是静态的,可以安全地进行备份。数据库导出工具: 对于MySQL使用mysqldump,PostgreSQL使用pg_dump,MongoDB使用mongodump等。这些工具会在导出时锁定表或使用事务,确保导出数据的一致性。服务停机: 如果允许,在备份关键数据前暂时停止相关服务,备份完成后再启动。这是最简单粗暴但最有效的一致性保障。

存储空间管理与清理:

挑战: 备份数据会持续增长,最终可能耗尽存储空间。应对:保留策略: 严格执行前面提到的保留策略,定期删除过期备份。自动化清理脚本: 编写脚本,结合find命令根据文件修改时间或名称模式删除旧的备份文件。压缩: 对备份文件进行高效压缩,如使用tar.xz而非tar.gz去重备份工具: 考虑使用borgbackuprestic,它们内置了数据去重功能,能显著减少存储占用。

网络传输中断或性能瓶颈:

挑战: 远程备份时,网络不稳定可能导致传输中断,或带宽不足导致备份时间过长。应对:rsync--partial--append 允许断点续传,如果传输中断,下次运行时可以从中断处继续。带宽限制: `rsync –bwlimit=KBPS

以上就是Linux如何配置系统备份方案?_Linux全量与增量备份技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/430002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
安装VSCode时磁盘空间不足的应对办法
上一篇 2025年11月7日 13:23:26
长连接(Keep-Alive)与心跳检测(Heartbeat)实现
下一篇 2025年11月7日 13:23:32

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    900
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    000
  • Debian syslog性能优化技巧有哪些

    提升Debian系统syslog (通常基于rsyslog)性能,关键在于精简配置和高效处理日志。以下策略能有效优化日志管理,提升系统整体性能: 精简配置,高效加载: 在rsyslog配置文件中,仅加载必要的输入、输出和解析模块。 使用全局指令设置日志级别和格式,避免不必要的处理。 自定义模板: 创…

    2026年5月10日
    000
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 网站标题关键词更新后,搜索引擎为何仍显示旧标题?

    网站标题更新后,搜索引擎为何显示旧标题? 网站SEO优化中,站长常修改网站标题关键词,期望搜索结果显示自定义标题。然而,即使更新标签、meta keywords、meta description和结构化数据中的name属性后,搜索结果仍显示旧标题,这令人费解。本文将对此进行解释。 问题:站长修改了网…

    2026年5月10日
    100
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    000
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    000
  • 谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    使用谷歌浏览器的开发者工具截图步骤:1. 按ctrl+shift+i(windows/linux)或cmd+option+i(mac)打开开发者工具。2. 点击右上角三个点,选择”更多工具”,再选择”截图”。3. 选择截取整个页面。推荐的谷歌浏览器扩展…

    2026年5月10日 用户投稿
    100
  • Python中怎样使用pymongo?

    在python中使用pymongo可以轻松地与mongodb数据库进行交互。1)安装pymongo:pip install pymongo。2)连接到mongodb:from pymongo import mongoclient; client = mongoclient(‘mongod…

    2026年5月10日
    000
  • JS如何实现迭代器?迭代器协议

    JavaScript中实现迭代器需遵循可迭代协议和迭代器协议,通过定义[Symbol.iterator]方法返回具备next()方法的迭代器对象,从而支持for…of和展开运算符;该机制统一了数据结构的遍历接口,实现惰性求值,适用于自定义对象、树、图及无限序列等复杂场景,提升代码通用性与…

    2026年5月10日
    000
  • JavaScript函数中插入加载动画(Spinner)的正确方法

    本文旨在解决在JavaScript函数中插入加载动画(Spinner)时遇到的异步问题。通过引入async/await和Promise.all,确保在数据处理完成前后正确显示和隐藏加载动画,提升用户体验。我们将提供两种实现方案,并详细解释其原理和优势。 在Web开发中,当执行耗时操作时,显示加载动画…

    2026年5月10日
    000
  • Golang空接口如何应用在项目中

    空接口可用于接收任意类型值,常见于日志函数、通用数据结构、JSON动态解析及配置驱动逻辑,提升代码灵活性,但需配合类型断言确保安全,避免滥用以降低维护成本。 空接口 interface{} 在 Go 语言中是一个非常灵活的类型,它可以存储任何类型的值。虽然它牺牲了一部分类型安全,但在实际项目中合理使…

    2026年5月10日
    100
  • MySQL数据库不支持中文的解决办法

    接上一篇文章,在解决了mysql+flask环境配置问题之后,往数据库存中文字符串会报1366错误,提示不正确的字符。继而发现默认的mysql采用了latin1字符集,这种编码是不支持中文的。 如果想支持中文的话,需要设置一下mysql字符集。 众所周知utf-8是可以的,gbk也没问题,为了可扩展…

    用户投稿 2026年5月10日
    000

发表回复

登录后才能评论
关注微信