问题描述
在一个DevOps环境中,需要找到一种自动化数据库创建、更改和其他与应用程序变更相关的修改的方法。他的数据库包括MS SQL、Oracle、MySQL,可能还包括NoSQL数据库。他已经通过网络搜索尽力找到了一些PowerShell维护脚本(备份、重建索引等),但没有找到关于从版本控制系统(如Subversion)中提取DDL,并使用Jenkins或其他工具将这些更改应用于现有数据库或创建新数据库的方法。他发现了一个TOAD工具,但这个工具将在今年晚些时候才能使用,他想知道是否有更便宜的方法。他希望能够了解到是否有最佳实践,或者是否有其他人使用的工具。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
数据库迁移是一个很长时间以来的标准做法,虽然与DevOps关系不大,但显然是必需的。有一些现成的工具,与开发人员使用的ORM无关。
实际决定要将哪些DDL和DML提供给数据库的策略可能会有所不同。在最简单的情况下,您只需跟踪一个全局的“数据库版本”;或者您可以有一个列出已应用的单个迁移的表;或者您定义了一个“期望”的数据库状态,然后工具自己创建所需的DDL来将数据库当前状态更改为新状态。
一个这样的独立工具的例子是Liquibase(开源),它有很多配置方式。我提到这个工具是因为你说你没有太多时间,而且它很快就可以开始使用 – 它有一种模式,其中“配置”只是一个简单的SQL文件,其中包含与SQL注释一起的扁平(而且很小)的元信息。
根据我的经验,最大的挑战是如何处理数据结构的变化;一种方法是使所有迁移都不会丢失任何数据,也不会破坏现有的代码(或数据)。也就是说,您几乎不会在任何迁移中包含DROP TABLE
或ALTER TABLE DROP COLUMN
,而是让一些东西不再使用,并且当一个表、列(或其他任何数据库对象)最终不再使用,并且不可能再次使用时,然后再删除它。要更改列的类型,您将创建一个具有正确类型的新列,并将数据逐步迁移到新列;等等。这将工作直接放在开发人员的肩上,而不是迁移工具上。这是可以接受的,因为这些东西必须与应用程序的面向数据库的代码紧密对应,无论是在ORM层后面还是在ORM层之上。
这与软件开发本身的方法基本相同;即创建具有开关的新功能(使用开关部署软件,并能够快速切换),并并行实施相同功能的多个实现;只有在新实现绝对可靠时才删除旧代码。
这是一个非常简单的方法,可以快速开始使用,并且可以根据需要进行扩展和定制。
方案2
使用脚本或工具来管理数据库的创建、更新、修改和删除可能会增加复杂性,并且需要确保与数据库相关的代码正确设置。
另一种方法是编写脚本或使用工具来控制数据库的创建、更新、修改和删除。您可以使用SQL
脚本和命令来手动执行这些操作,或者使用一些第三方工具来管理数据库的变更。
以下是一个简单的bash脚本示例,可以用来自动化数据库的创建、更新、修改和删除:
#!/bin/bash
# 创建数据库
mysql -u username -p password -e "CREATE DATABASE your_database"
# 更新数据库
mysql -u username -p password -D your_database -e "ALTER TABLE your_table ADD COLUMN new_column INT"
# 修改数据库
mysql -u username -p password -D your_database -e "UPDATE your_table SET column_name = 'new_value' WHERE condition"
# 删除数据库
mysql -u username -p password -e "DROP DATABASE your_database"
在这个示例中,我们使用mysql
命令来执行数据库的创建、更新、修改和删除操作。您需要将username
、password
和your_database
替换为实际的值,并根据需要修改其他命令。
请注意,这只是一个简单的示例,您可能需要根据实际情况进行修改和扩展。
方案3
使用数据库管理工具可以更方便地自动化数据库的创建、更新、修改和删除。
还有一些数据库管理工具可以帮助您更方便地自动化数据库的创建、更新、修改和删除。这些工具通常提供图形界面和命令行界面,可以帮助您执行各种数据库操作。
以下是一些常用的数据库管理工具:
– phpMyAdmin:适用于MySQL数据库的免费开源工具,提供了一个易于使用的图形界面。
– Navicat:适用于多种数据库(如MySQL、Oracle、SQL Server等)的商业工具,提供了一个强大的图形界面和丰富的功能。
– DBeaver:适用于多种数据库的免费开源工具,提供了一个通用的图形界面和强大的功能。
您可以根据自己的需求选择合适的数据库管理工具,并使用它们来自动化数据库的创建、更新、修改和删除操作。
结论
在DevOps环境中自动化数据库的创建、更新、修改和删除是一个常见的需求。您可以使用现成的工具(如Liquibase)或编写脚本来实现自动化。另外,还有一些数据库管理工具可以帮助您更方便地执行这些操作。根据您的具体需求和偏好,选择合适的方法和工具来实现自动化。