MySql开发之自动同步表结构

MySql开发之自动同步表结构攻略

在 MySQL 开发项目中,表结构同步通常是一个很耗时的任务,特别是在团队协作开发的情况下。你必须确保所有的开发人员和数据库管理人员都知道这个改动。但是,手工同步表结构的过程往往容易出错,因此我们需要一种自动化的方法。下面就介绍一些方法可以自动同步表结构。

使用 "Flyway" 自动同步表结构

"Flyway" 是一种开源工具,它可以帮助我们自动化地控制数据库 schema 的版本管理。当数据 schema 发生变化时,它可以在原有 schema 的基础上自动升级 schema 并且修改相关的数据。"Flyway" 主要的功能是:

  • 自动执行数据库脚本;
  • 控制脚本的顺序和执行顺序;
  • 非常容易和市场上其他工具集成。

安装和配置

"Flyway" 支持多种语言和数据库,具体的安装和配置方式可以参考 Flyway官方文档

下面是一个基本的示例 Docker Compose 文件,它使用 "Flyway" 来管理 MariaDB 的数据库 schema 版本。如果你对 "Flyway" 不熟悉,这是一个可以帮助你快速入门的例子。

version: '3'
services:
  flyway:
    image: boxfuse/flyway:7.7.2
    volumes:
      - ${PWD}/migrations:/flyway/sql
    environment:
      - FLYWAY_URL=jdbc:mariadb://mariadb:3306/flyway
      - FLYWAY_USER=root
      - FLYWAY_PASSWORD=root
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.5
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - '3306:3306'

上述 Docker Compose 文件中,使用的 "boxfuse/flyway" 镜像包含了基本的 "Flyway" 客户端工具。我们把 MariaDB 作为后端数据存储,它会被 "Flyway" 使用。

migrations/ 目录中,我们可以放置 SQL 脚本,"Flyway" 将会在启动时自动执行这些脚本,并记录每一个版本号。

使用 Flyway 进行自动同步

下面我们就来演示 "Flyway" 的自动同步表结构功能。首先,我们在 migrations/ 目录中创建一个 SQL 脚本文件 V1__users.sql,它包含了 Users 数据表的创建 SQL 命令。

CREATE TABLE `Users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然后,我们将这个 SQL 脚本文件添加到我们的代码版本控制工具中。

接下来,我们将 "Flyway" 服务启动起来,并检查 "Flyway" 是否自动执行了 SQL 脚本并创建了 Users 数据表。

docker-compose up -d

当服务启动完成后,我们可以使用以下命令查看 "Flyway" 是否成功创建了 Users 数据表。

docker-compose exec mariadb mysql -proot -e "use flyway; show tables;"

这将输出一个结果,含有 "Users" 表名。

下面我们演示另一个场景,我们新建了一个 SQL 脚本文件 V2__alter_users_table.sql,它用于修改 Users 数据表的结构。如下是 SQL 命令:

ALTER TABLE `Users` ADD COLUMN `email` varchar(100) NOT NULL AFTER `username`;

我们将这个 SQL 脚本文件加入到 migrations/ 目录,并再次使用 docker-compose up -d 命令重启 "Flyway" 服务。"Flyway" 会自动检测到新的 SQL 脚本文件,并执行它来修改我们的 "Users" 数据表。

这时候我们再次使用 docker-compose exec mariadb mysql -proot -e "use flyway; describe Users;" 查询表结构,将会看到一个新添加的 email 字段。

使用 "Liquibase" 自动同步表结构

"Liquibase" 是另一个开源的数据库 schema 版本管理工具,它支持多种数据库,并提供了非常强大的自动化 schema 升级和同步功能。与 "Flyway" 不同的是,"Liquibase" 不仅支持 SQL 脚本,还支持多种 XML 和 YAML 等格式的脚本定义,并且更加灵活。

安装和配置

"Liquibase" 也支持多种语言和数据库,具体的安装和配置方式可以参考 Liquibase官方文档

下面是一个基本的示例 Docker Compose 文件,它使用 "Liquibase" 来管理 PostgreSQL 的数据库 schema 版本:

version: '3'
services:
  liquibase:
    image: liquibase/liquibase:4.4.3
    volumes:
      - ${PWD}/changelog:/liquibase/changelog
    environment:
      - LIQUIBASE_URL=jdbc:postgresql://postgres:5432/liquibase
      - LIQUIBASE_USERNAME=liquibase
      - LIQUIBASE_PASSWORD=liquibase
    depends_on:
      - postgres

  postgres:
    image: postgres:13-alpine
    restart: always
    environment:
      - POSTGRES_USER=liquibase
      - POSTGRES_PASSWORD=liquibase
    ports:
      - '5432:5432'

上述 Docker Compose 文件中,我们使用的是 "liquibase/liquibase:4.4.3" 镜像,它也包含了基本的 "Liquibase" 客户端工具。我们将 PostgreSQL 作为后端数据存储。

changelog/ 目录中,我们可以放置 XML 或 YAML 脚本,"Liquibase" 将会在启动时自动执行这些脚本,并记录每一个版本号。

使用 Liquibase 进行自动同步

下面我们演示如何在 PostgreSQL 数据库中使用 "Liquibase" 来自动同步表结构。

我们在 changelog/ 目录下创建一个 XML 格式的脚本文件 0001_create_user_table.xml,它用于创建一个名为 user 的数据表。如下是 XML 代码:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
    <changeSet id="0001" author="alice">
        <createTable tableName="user">
            <column name="id" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true"/>
            </column>
            <column name="name" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
</databaseChangeLog>

然后,我们将这个 XML 脚本文件添加到我们的代码版本控制工具中。

接下来,我们使用以下命令启动 "Liquibase" 服务:

docker-compose up -d

当服务启动完成后,我们可以使用以下命令检查表结构是否已经创建成功:

docker-compose exec postgres psql -U liquibase -c "SELECT * FROM user;"

现在我们尝试增加一个新列来修改我们的 "user" 数据表。

我们在 changelog/ 目录下新建一个 XML 格式的脚本文件 0002_add_email_column.xml。如下是 XML 代码:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
    <changeSet id="0002" author="bob">
        <addColumn tableName="user">
            <column name="email" type="VARCHAR(255)"/>
        </addColumn>
    </changeSet>
</databaseChangeLog>

之后,我们再次使用以下命令重启 "Liquibase" 服务,它会自动检测到新添加的 XML 脚本文件和之前版本的差异,并自动升级 "user" 数据表结构。

docker-compose up -d

现在我们可以使用以下命令检查 "user" 数据表是否添加了新的列:

docker-compose exec postgres psql -U liquibase -c "SELECT * FROM user;"

以上就是使用 "Flyway" 和 "Liquibase" 自动化同步表结构的基本流程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySql开发之自动同步表结构 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • PostgreSQL数据库的基本查询操作

    PostgreSQL数据库的基本查询操作攻略 PostgreSQL是一款功能强大的开源关系型数据库系统,支持多种数据类型和查询操作。在本篇攻略中,我们将介绍PostgreSQL数据库的基本查询操作,包括如何查询表、过滤数据、排序数据、聚合数据等。以下是具体步骤: 1. 创建表格 在开始查询操作之前,需要先创建一个包含数据的表格。使用如下命令创建一个test表…

    database 2023年5月21日
    00
  • 如何搭建 MySQL 高可用高性能集群

    如何搭建 MySQL 高可用高性能集群? 搭建MySQL高可用高性能集群需要做以下步骤: 1.选择合适的 MySQL 高可用技术方案 MySQL的高可用方案主要有:主从复制、MGR、Galera Cluster等。具体选择哪种方案,需要根据企业实际业务场景、数据量大小、性能要求等因素进行综合考虑。 2.选择合适的部署方案 搭建MySQL高可用高性能集群的部署…

    database 2023年5月22日
    00
  • Springboot集成Jasypt实现配置文件加密的方法

    下面是Spring Boot集成Jasypt实现配置文件加密的方法的完整攻略。 什么是Jasypt? Jasypt是一个开源的Java加密/解密库,可以手动或自动加密文本、属性和配置文件。Jasypt的目标是为Java开发人员提供简单易用、强大高效的数据加密工具。 集成Jasypt实现配置文件加密的方法 1. 添加Jasypt依赖 在Spring Boot项…

    database 2023年5月22日
    00
  • 怪物猎人世界PC版会心流斩击斧配装分享

    怪物猎人世界PC版会心流斩击斧配装分享攻略 简介 本文将介绍PC版怪物猎人世界中会心流斩击斧配装分享的详细攻略,包括装备选择、技能搭配等方面。 装备选择 武器选择 会心流斩击斧升级要求较高,因此推荐使用以下几把斩击斧: 隼斧【飞鸟】 华戟斧 弧月斩 焰双斩 盾选择 盾牌不是核心装备,因此可以根据自己的喜好进行选择。 护甲选择 推荐以下三种套装: 恐暴龙王α套…

    database 2023年5月21日
    00
  • oracle实现动态查询前一天早八点到当天早八点的数据功能示例

    针对“oracle实现动态查询前一天早八点到当天早八点的数据功能”,这个需求可以通过以下步骤来实现。 步骤一:获取查询时间范围 首先,我们需要获取到前一天早八点到当天早八点的时间范围,可以使用以下SQL语句(假设当前时间为2022年3月16日,早上9点): SELECT TRUNC(SYSDATE-1) + INTERVAL ’08’ HOUR AS sta…

    database 2023年5月19日
    00
  • Mysql学习之数据库检索语句DQL大全小白篇

    让我来讲解一下“Mysql学习之数据库检索语句DQL大全小白篇”的完整攻略。 一、概述 本文主要介绍Mysql中的DQL语句,即数据库检索语句。通过本文的学习,您将会了解到Mysql中常用的检索语句以及相关的技巧和注意事项。以下是本文主要内容: 简介和基本语法 常用查询语句 表的连接和联合查询 字符串函数和日期函数 分组和排序 子查询和视图 二、基本语法 M…

    database 2023年5月21日
    00
  • Redis+Hbase+RocketMQ 实际使用问题案例分享

    需求 将Hbase数据,解析后推送到RocketMQ。 redis使用list数据类型,存储了需要推送的数据的RowKey及表名。 简单画个流程图就是: 分析及确定方案 Redis 明确list中元素结构{“rowkey”:rowkey,”table”:table}解析出rowkey; 一次取多个元素加快效率; 取了之后放入重试队列,并删除原来的元素; 处理…

    Redis 2023年4月11日
    00
  • redis集群搭建教程及遇到的问题处理

    Redis集群搭建教程及遇到的问题处理 准备工作 在开始搭建Redis集群之前,需要准备以下工作: 安装Ubuntu操作系统,并按照官方文档安装好Redis Server。 准备至少3台服务器,每台服务器均安装好Redis Server,并配置好主从复制。 步骤一:创建集群 在其中一台服务器上创建Redis集群,执行以下命令: redis-cli –clu…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部