Flyway 迁移:让数据库迁移不再是头疼的事,赶紧看看如何快速上手
数据库迁移是每个开发者都将面对的挑战,尤其是在项目持续扩展、数据库架构频繁调整的背景下,如何确保数据一致性并顺利完成迁移,常常成为一项复杂且容易出错的任务。幸运的是,Flyway 这款开源工具应运而生,它简化了数据库迁移的流程。通过自动化管理迁移脚本,Flyway 让数据库架构的变动变得更加规范、可控。今天,我们将一同探索 Flyway,掌握如何高效执行数据库迁移,从此告别复杂的手动操作,让工作流程更加顺畅。
Flyway 是一款广受欢迎的数据库迁移工具,它支持多种数据库(如 MySQL、PostgreSQL、Oracle 等)。通过 Flyway,开发者可以轻松管理数据库的版本控制,从而确保开发、测试、生产等不同环境中的数据库结构保持一致。
在 Flyway 中,数据库迁移是通过执行 SQL 脚本来完成的。这些 SQL 脚本按顺序执行,Flyway 会确保每个迁移都只被执行一次,避免重复执行。这使得团队合作中的数据库变更管理变得更加规范化、自动化。
迁移(Migration):指对数据库结构进行变更的操作,包括但不限于添加表、修改字段、插入数据等。每一次迁移都代表一次数据库架构的更新。
版本化迁移(Versioned Migrations):每个迁移脚本都附带一个唯一的版本号,确保数据库迁移按照指定的顺序逐步应用,从而避免冲突和重复操作。
未执行(Pending):已添加至 Flyway 管理中的迁移脚本,但尚未被应用到数据库中。它们等待执行,直到数据库迁移进程运行时才会生效。
已执行(Executed):指已成功应用至数据库的迁移脚本。Flyway 会记录并标记每个已执行的迁移,确保其不会重复运行。
Flyway 命令(Flyway Commands):包括多个数据库迁移相关命令,如 Migrate(应用迁移脚本)、Clean(清理数据库)、Info(查看迁移状态)等,这些命令帮助开发者高效管理数据库的迁移与版本控制。
跨平台支持:Flyway 支持多种主流数据库类型,如 MySQL、PostgreSQL、Oracle 等,使其成为跨平台开发团队管理数据库迁移的理想工具。
版本化管理:数据库迁移脚本通过版本控制管理,每个脚本都附带唯一的版本号,确保迁移严格按照顺序执行,从而避免潜在的冲突与遗漏。
多方式操作:Flyway 提供命令行工具(CLI)和桌面应用两种方式,开发者可根据需求选择最合适的方式进行数据库迁移管理,实现灵活、高效的操作体验。
1.在“迁移”标签页中,您应该能够看到刚刚添加的脚本处于“待处理(Pending)”状态。
2.右侧下拉菜单中会显示可用的 Flyway 命令。请确保选择“迁移(Migrate)”选项,然后点击“运行迁移(Run migrate)”按钮。
如果您希望查看将要执行的实际 Flyway 命令,请先展开“查看命令(x 参数)”部分。我们希望这能帮助您学习不同的 CLI 语法,以便日后在 CI/CD 系统中自动化此过程。
3.Flyway Desktop 应显示迁移已成功完成。
4.点击“关闭(Close)”,然后取消勾选“仅显示待处理迁移(Only show pending migrations)”。此时,您将看到迁移状态为“成功(Success)”,并能查看执行该迁移脚本所花费的时间。
5.接下来,我们将重复此过程添加第二个迁移脚本。点击“+ 添加迁移(Add migration)”。
6.输入以下详细信息:
a. 类别(Category):版本化(应默认选中)
b. 版本(Version):默认值为 002_yyyymmddhhmmss,时间戳默认包含,避免多个用户使用相同版本号。
c. 描述(Description):添加人员
d. 脚本(Script):
e.点击“保存(Save)”按钮。
7.这个新迁移应处于“待处理(Pending)”状态,因为它尚未应用到我们的目标数据库。
8.再次,右侧下拉菜单中显示可用的 Flyway 命令,您可以查看 CLI 命令。确保选择“迁移(Migrate)”选项,然后点击“运行迁移(Run migrate)”按钮。
9.Flyway Desktop 应显示迁移成功。点击“关闭”。
10.现在,第三个迁移显示为“成功(Success)”状态,您可以看到执行该迁移脚本所花费的时间。
11.要查看磁盘上的迁移脚本,请点击右上角的蓝色文件夹图标。
12.这将带您进入项目文件夹。双击“migrations”文件夹查看您的两个迁移脚本。
1. 为什么 Flyway 的迁移脚本未执行?
迁移脚本未执行的原因可能是脚本的版本号未按顺序递增,或脚本文件名未遵循 Flyway 的命名规范。请确保每个迁移脚本的版本号独特且严格按时间顺序排列,以确保迁移脚本能被正确识别和执行。
2. 可以回滚数据库迁移吗?
Flyway 本身不支持直接回滚迁移操作。然而,您可以手动编写“撤销”脚本来实现回滚,或者通过数据库备份恢复之前的状态。通过这种方式,您可以有效管理和应对意外情况。
3. 如何自动化 Flyway 迁移?
您可以将 Flyway 命令集成进 CI/CD 流程,在每次部署时自动执行迁移。这样,迁移过程便能与代码发布同步进行,确保数据库始终保持最新状态,且不受人工操作干扰。
1.跨团队协作
当多个开发者共同维护同一数据库时,Flyway 提供的迁移版本控制可以确保数据库架构的一致性,避免各自为政带来的冲突与混乱。
2.自动化部署
在 CI/CD 流程中,Flyway 自动执行数据库迁移,确保每次代码更新后数据库结构紧跟版本,消除手动迁移的繁琐,提升整体部署效率。
3.数据库变更版本控制
若希望通过代码管理数据库变更,Flyway 提供清晰的版本化方案,使得每次数据库变更都有据可依,简化变更管理过程,提升项目的可维护性。
1.迁移脚本测试
在执行每个迁移脚本前,务必进行充分测试,确保脚本的正确性和兼容性,避免在生产环境中引发不可预见的风险。
2.定期检查迁移状态
在开发过程中,定期执行 Info 命令查看迁移状态,确保所有迁移脚本都已按时执行,避免遗漏重要的更新。
3.schema history 表的重要性
Flyway 依赖 schema history 表记录所有已执行的迁移。如果该表发生异常或损坏,可能会导致迁移失败。务必确保该表的完整性和稳定性。
1.命名规范
严格遵循 Flyway 的脚本命名规则,确保每个迁移脚本的版本号和描述都清晰、简洁且具有可读性。规范的命名有助于团队协作和迁移过程的可追溯性。
2.脚本验证
在将迁移脚本应用到生产环境之前,务必在开发和测试环境中进行充分验证。这样能够提前发现潜在问题,确保迁移脚本在正式环境中顺利执行。
3.分阶段迁移
针对大型数据库变更,建议将迁移脚本拆分为多个小阶段,逐步实施。这样能有效降低单次迁移带来的风险,并便于快速定位和解决问题。
Flyway 使数据库迁移变得简洁高效。通过自动化的版本控制和迁移管理,开发者能够轻松维护数据库架构的一致性,同时提升团队协作效率。无论是在本地开发、持续集成,还是生产环境中,Flyway 都能有效地减少人工操作和潜在错误。如果你仍在为数据库迁移而困扰,Flyway 无疑是一个值得尝试的解决方案,它将帮助你彻底摆脱数据库变更的复杂和风险。
数据库迁移新手必看:一步一步创建你的第一个迁移脚本
在项目开发过程中,数据库结构的管理往往让人头疼,尤其是当你需要跨多个环境进行数据库迁移时。你可能曾因数据库版本不一致而大伤脑筋,甚至差点与数据库打起来。今天,我们将带你走一遍创建和管理数据库迁移脚本的全流程——不但帮助你在代码和数据库之间搭建稳固桥梁,还能轻松应对结构变更。放心,虽然讲解专业性十足,但我会把这篇文章写得幽默又生动,保证让你在学习过程中,既收获知识,又能笑出声来!
数据库迁移(Database Migration)指的是管理数据库版本和结构变化的一种方法。通常,随着项目迭代,数据库结构会发生变化,比如新增表、修改字段类型等。为了确保开发环境和生产环境中的数据库一致,使用迁移脚本是一个必不可少的步骤。
在本文中,我们将使用常见的数据库迁移工具来演示如何创建第一个迁移脚本,帮助你快速掌握这一技巧。通过自动化迁移脚本生成和执行的方式,我们能够简化数据库管理工作。
迁移脚本(Migration Script):记录数据库结构变更的代码文件,包含对数据库的增、删、改操作。就像是数据库的“变形金刚”,随时准备应对不同环境下的变化。
版本化(Versioning):数据库结构的每一次变更都对应一个唯一标识,通常结合时间戳,确保每次迁移都有清晰的历史记录,方便后期追踪和管理。就像是数据库的身份证,每次变更都会印上时间戳,确保“身份”独一无二。
SQL(Structured Query Language):结构化查询语言,广泛应用于关系型数据库的操作。它是数据库开发者的“语言”,无需翻译就能直达数据库的核心。
版本号(Version Number):迁移脚本的唯一标识,通常带有时间戳,用来区分不同的迁移脚本。就像是每个迁移脚本的“身份证号码”,让它在所有脚本中永远独一无二。
同步结构变更:迁移脚本的核心任务是确保数据库结构的每一次变动都能精准同步,保证不同环境中的数据库保持一致性。
每次变更都要写迁移脚本:每当数据库结构发生变化,无论是增加表格还是修改字段,都需要创建一个迁移脚本。这个脚本就像是数据库变更的“护照”,确保每一次调整都有据可依。
版本号与时间戳:版本号和时间戳让每个迁移脚本都拥有独特身份,避免不同开发者提交的脚本发生冲突。它们像是数据库迁移的“身份证”,帮助管理不同版本的迁移。
自动化执行:使用迁移工具能够自动执行这些脚本,减少人工操作,确保数据库结构在各个环境中的一致性,避免因为手动执行脚本带来的错误。就像是给数据库装上了“自动驾驶”系统,让它自己按照预定路线行驶。
现在你已创建项目并配置好目标数据库,接下来可以添加第一个迁移脚本。
1.在“迁移”标签页中,点击“+ 添加迁移(Add Migration)”。
2.输入以下详细信息:
a. 类别(Category):版本化(应默认选中)
b. 版本(Version):默认值为 001_yyyymmddhhmmss,时间戳默认包含,避免多个用户使用相同版本号。
c. 描述(Description):创建 person 表
d. 脚本(Script):
e.点击“保存(Save)”按钮。
在一次项目开发过程中,团队成员小王突然有了一个“灵感”——手动修改数据库结构!他觉得,迁移工具这么麻烦,直接通过 SQL 语句把表结构调整一下,不就行了?于是,他信心满满地执行了一条 ALTER TABLE 命令,修改了一些表字段和约束条件,操作完后,他还拍了拍自己的胸脯,心想:“这下优化得更好了,简直是小菜一碟。”
然而,第二天,事儿就大条了。另一位开发人员小张拿到最新的代码,照例运行迁移脚本,准备将数据库结构更新到最新版本。运行时,他突然遇到了一连串报错:表字段不对,约束条件冲突,甚至有些数据类型不匹配!他摸了摸脑袋:“这是哪里出问题了?明明前几天一切正常呀。”
经过一番排查,小张发现,原来小王就在昨天偷偷“优化”了数据库的结构,结果这一手操作直接覆盖了之前已经定义好的结构——就像是在高楼大厦上打了个小洞,结果整座楼塌了。更糟糕的是,这些变更并没有被记录到迁移脚本里,导致其他团队成员根本不知道这些变化。
小王一脸懵逼地说:“我只是想优化一下表结构,谁知道会这么复杂?我这不就是在做一些小改动嘛,哪知道会这么大影响!”他开始怀疑,自己是不是得罪了什么数据库神明,导致这场“数据灾难”。
小张耐心解释:“你可以优化表结构,但必须通过迁移脚本,确保每个人都能同步这些变更。手动修改?那就像是一个人在房间里自己装修,结果整个楼的结构都被搞得乱七八糟。”
这时,小王才意识到问题的严重性:“原来迁移脚本是这样的一回事啊!不但可以帮忙记录每次数据库变更,还能让大家在修改数据库时有据可依,避免像今天这样‘拆东墙补西墙’。”
这个事件也让团队成员更加深刻地认识到,迁移脚本不仅仅是技术工具,它实际上是一个项目协作的核心。每次数据库的变动,都应该通过规范的迁移流程来进行,确保每个成员都能在同一个“数据库框架”内工作,避免“手动操作”的乌龙事件。
从此以后,小王也成了团队里最积极使用迁移工具的成员之一,每当他需要修改数据库结构时,总是会先问:“迁移脚本写了吗?”大家都忍俊不禁,却又心照不宣地为他点了个赞。
1.迁移脚本怎么回滚?
如果迁移脚本执行有问题,别慌!许多数据库迁移工具都提供回滚功能。你只需找到相应版本,执行回滚命令,数据库便能恢复到迁移前的状态。就像按下“撤销”按钮,瞬间回到原点,避免大规模“灾难”发生。
2.每次迁移都要手动写 SQL 吗?
其实不完全是!很多数据库迁移工具支持自动生成迁移脚本,极大地减少手动编写 SQL 的繁琐。你可以像搭积木一样,快速生成所需的数据库结构变更,只需少量干预,省时又省力。
3.迁移失败了怎么办?
迁移失败时,第一步是检查 SQL 脚本的语法和逻辑错误。常见的失败原因通常是权限不足或脚本本身的错误。如果数据库无法执行脚本,确保脚本书写无误且数据库连接正常。就像调试代码一样,找出错误的根源,重新执行即可。
1.项目开发中的数据库结构变更
随着业务不断发展,数据库结构时常需要调整。每次结构变更,迁移脚本就像是数据库的“进化日志”,确保不同环境中的数据库始终保持同步,避免因为手动修改产生的混乱。让你随时随地,轻松应对数据库的“变身”。
2.多人协作的项目
当多个开发人员共同参与项目时,手动修改数据库结构很容易引发冲突。迁移脚本则能有效避免这种情况。每个人都可以在自己的环境中独立进行变更,所有的修改通过迁移脚本自动合并,确保团队合作不受“数据库之乱”的困扰。
3.CI/CD 自动化部署
在持续集成和部署(CI/CD)流程中,数据库结构的变更也必须与代码保持同步。通过自动化执行迁移脚本,你的数据库就像是一个自动调整的“小机器人”,随着代码更新,结构自动升级,省时省力,让部署过程流畅无缝。
1.版本号的唯一性
每次生成新的迁移脚本时,一定要确保版本号唯一,避免与已存在的脚本冲突。版本号就像迁移脚本的“身份证”,每个脚本都有自己的唯一标识,保证它们能有序地“排队”执行,避免混乱。
2.及时提交迁移脚本
数据库结构变更后,别忘了及时生成并提交迁移脚本,确保团队中的每个成员都能同步更新数据库结构。就像做作业一样,拖延只会导致大家的进度不同步,造成不必要的麻烦。
3.测试迁移脚本
在将迁移脚本投入生产环境之前,务必先在开发或测试环境中验证它的正确性。毕竟,生产环境就像是比赛的“终极赛道”,一旦出错,后果可能不堪设想。先在沙盘上练习,确保万无一失,再上“主战场”。
1.小步快跑
每次生成迁移脚本时,尽量将变更拆分成小块,而非一次性做大规模调整。这样可以降低风险,让每个变更都像是“小步快跑”,避免“踩雷”的机会。小步走,稳稳进,确保每个步骤都可控。
2.记录变更
每次生成迁移脚本时,要清晰描述变更内容,这不仅方便日后的回顾,也能帮助团队成员快速理解迁移的目的和影响。就像写日记一样,把每次的调整都记录下来,让数据库迁移有迹可循。
3.版本控制
将迁移脚本纳入版本控制系统,确保每次修改都有明确的记录,方便追踪与恢复。这样,你就能像掌握历史档案一样,随时查看迁移的“历史轨迹”,在遇到问题时迅速回溯。
4.回滚策略
每次迁移脚本都应该配有相应的回滚操作。假如“意外”发生,能够及时恢复到变更前的状态,就像为数据库穿上了“保险套”。有备无患,避免数据库“一失足成千古恨”。
今天的内容让你掌握了如何创建和管理数据库迁移脚本。通过迁移脚本,你和团队能够轻松应对数据库结构变更,避免手动修改带来的混乱。数据库迁移不仅是技术工作,它更是团队协作的关键环节,能让开发、测试、生产环境的数据库保持同步。希望你通过这篇文章,学到更多实用技巧,享受迁移的过程,并在未来的项目中得心应手!
可算换了固态硬盘,怎样又快又好地完成硬盘克隆或数据迁移?
常见需求往往有如下三种:
(1)新台式or笔记本的SSD有些老旧,要换成读写速度更快或容量更大的新固态,保持硬盘克隆后,新硬盘与旧硬盘系统、内容完全一致,且能原封不动地正常启动、运行和使用。
(2)电脑有两块硬盘,其中装系统的硬盘不动,将另一块“仓库盘”换成更快/更大的新固态,并完成数据迁移。新盘上任,旧盘退役。
(3)给系统增加一块新固态,把一部分数据挪到新固态中,让系统盘空间得到解放。
很显然,第2、3两种需求比较容易处理。哪怕是新手小白,你只需把新SSD装配好,再进入windows系统,在新旧SSD之间手动复制粘贴即可无伤完成数据迁移。这种方案虽慢,但稳,不怕数据暴毙,不会后悔终身。当然,也可用软件提高效率。
今天我们要重点说的是第1种需求——要把整块旧SSD(或机械硬盘)上的内容(连同上面安装的系统),完整又无伤地克隆到新SSD上,传统的复制粘贴是不可行的,必须动用特殊手段。
在添加新SSD之前,请大家看看你的台式机主板 or 笔记本的SSD硬盘位,有没有空闲位置?以台式机为例,如果有空闲的M.2 SSD,直接将新SSD装上去即可;如果只有旧SSD的位置,你可以考虑购买一个PCIe 转 M2的转接卡,利用台式机的PCIe卡槽实现新SSD的接入。
这种转接卡也就四十多块,我两三年前JD自营购入两个一直在用,既可以临时转接使用,也可以作为永久的新加M.2 SSD硬盘位,必要时可以插拔、安装到不同主板系统上,临时处理SSD克隆将会变得非常方便。
这种方案比较适合主板有闲置PCI-E X4卡槽的情况。比如,如果你用的是MIni-ITX主板又插了独立显卡,也就没有可以插PCIE转接卡的位置了。
在主板没有多余PCIE卡槽的情况下,就要考虑使用M.2 SSD硬盘盒来将新SSD接入系统。那么只需要花个几十块或百余块购买一款速度至少5Gbps、最好10Gbps以上的M.2 NVMe SSD硬盘盒就好。
这种外接硬盘盒执行SSD克隆的方案,也适合笔记本没有多余M.2 SSD位,但仍要执行“双盘对拷”的情况。
新SSD到手别着急克隆数据,第一步还是要验验货,看看手里的硬盘有没有毛病。
这里给大家演示“整盘克隆”所用的新SSD,是来自铠侠(原“东芝存储器”)品牌推出KIOXIA EXCERIA Pro 极至超速 NVMe 固态硬盘(后面简称:铠侠SE10),之所以选它一是因为它有独立缓存,支持PCIe4.04通道,读写速度规格较高(顺序读7300MB/s,顺序写6400MB/s),做系统盘比市面上廉价的无缓SSD更可靠;二是因为品质拔群,有日本原厂颗粒和核心技术加持,铠侠SE10的读写性能更稳定,不必担心掉盘蓝屏这种糟心事;三是正好蹲到了618的一个还不错的价。我手头紧无缘2TB版本,1TB版本599入手,够我稳用五年以上了。
装好铠侠SE10后进入系统(我的系统是Windows 10 22H2),接着使用以下软件进行常规检测,这里给小白精简步骤,只用以下三款软件做好测试,看符合官标参数范围即可暂时判定合格。
(1)CrystalDiskInfo,可以看到铠侠SE10的全部参数,包括支持NVMe 1.4,支持PCIe 4.0×4通道,以及数据读写量、通电次数等数据,初次使用通电次数应该为0,可以看出我的是新盘。
(2)CrystalDiskMark,这款软件常用来测试固态硬盘的速写速度,注意选对盘符,再选择基准比如1GB和8GB,执行程序后,即可得到如下测试结果。
(3)AS SSD Benchmark,与CDM齐名的SSD测试软件,这款软件还能看到SSD是否做好了4K分区对齐。可以看到,实测铠侠SE10的连续读取速度都与官标参数吻合,尤其在CrystalDiskMark之中,顺序读取速度超过7350MB/s,顺序写入速度超过了6500MB/s,比官标速度还要快一些。
此外,还可以找一些影音文件实测新旧SSD之间拷贝数据的速度。我这块新SSD是很靠谱的,拷贝文件效率高,也没有过多发热。有独立缓存的旗舰级SSD,日常使用也更放心。
一般我们都是小盘往大盘迁移,或同容量SSD之间克隆,不会出现系统盘占用数据量超过新SSD可用空间的问题。不过也有一些特殊情况,比如从4TB的机械硬盘往2TB的SSD上克隆,那么克隆之前还是应该仔细检查确认一下旧硬盘已占用的数据是否超过2TB SSD的容量,若超出或接近,则应提前整理、腾挪一下。
以上准备工作完毕,接下来就要借助软件,把旧SSD的系统和其他数据完整地克隆到铠侠SE10之上了。
数据无价,这类软件不能选太偏门的,整不好就是千古恨。
前几年我最早使用的是DiskGenius,有一定概率出现新盘进不去系统的情况,后来用过一段 “ATI2021”(我也给大家写过教程),不过ATI很快收费了,于是换用免费的 “(傲梅)分区助手” 使用至今。
这里就以(傲梅)分区助手作为系统盘数据整盘迁移的示范软件,请大家酌情参考。
启动傲梅分区助手,在主界面找到“克隆硬盘”功能,点击后弹出如下窗口。
界面如下。点击左侧或上方图标栏的“克隆硬盘”,在弹出窗口中,先选择列表中的“源硬盘”,也就是你的旧硬盘;接着选择“目标硬盘”,也就是你的新SSD。一般刚接入的新SSD是空的,但也可能是忘记提前格式化的硬盘,所以最好提前确定好磁盘序数,以免自己弄错源盘或目标盘。
点击下一步,可以自定义硬盘分区,默认选择“让分去适应整个硬盘的大小”这一项。这个“自适应”的选项,针对的是新旧SSD总容量不同的情况。你也可以将其改为“等比例缩放”,适用于将带有分区的1小盘克隆到大盘的情况。选择右侧的“调整此硬盘上的分区”,则可以给你更多目标硬盘的自由度,前提是自定义分区容量要大于已有文件容量。
当然,你也可以等整盘SSD克隆工作完成之后再做各分区空间的调整,这里就不赘述了。
接下核对执行源、目标等设定。最后点击“完成”关闭小窗口,再点击软件界面左上角的“✔ 提交”按钮,选默认的“重启进入PE模式”→“确认”后,重启电脑。
此后,系统会自动进入WinPE界面,自动执行后续的“硬盘克隆”工作,无人值守,直到进度条100%走满,再次自动重启,新旧两块硬盘就已经实现了完美克隆。
SSD整盘克隆执行结束之后,由于两块SSD的数据状态包括硬盘签名状态都完全一致,这就意味着进入系统时,你可能会看到两个一样的Window10。建议大家先正常关机,断电后拔掉旧SSD,然后开机看能否进入新SSD的系统,如果能,那么大功告成!
后续只需考虑旧SSD的数据要不要留作数据备份盘,或者清空/格式化作为闲置SSD。以及对新SSD再做一些常规测试、考察其工作稳定即可。
等以后再更换、升级新的SSD,也不必再为新硬盘重装系统而折腾半天了,直接用这种方案克隆、替换旧硬盘,无需频繁手动操作、高效的同时,还能保证数据安全。当然,你也可以多置备几个PCI-E转接卡和M.2 SSD硬盘盒,借助它们完成批量克隆备份SSD的工作。
对了,如果是台式机,在克隆结束之后,旧硬盘拆除后,别忘了把新SSD从硬盘盒或PCIe扩展卡装回电脑主板的主SSD位,这样才能保证它的最佳读写性能和稳定的使用环境。
以上就是笔点酷玩给大家提供的“双SSD快速数据迁移/硬盘克隆对拷”攻略,希望我的分享可以给大家一些启发和参考。长文撰写不易,觉得这篇干货有用的朋友,麻烦各位给我点个赞收个藏分个享,我们下期干货好文再会!
Kioxia/铠侠SE10固态硬盘1t 2t pcie4.0 m.2 nvme台式机笔记本SSD ¥649 购买
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。