MySql开发之自动同步表结构

yizhihongxing

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日

相关文章

  • 使用命令行检测Ubuntu版本方法

    Ubuntu是一款常用的Linux操作系统,不同版本的Ubuntu存在着不同的特性和功能,因此在进行一些软件安装和配置时,会基于不同版本进行操作。本文将详细说明在Ubuntu系统中使用命令行检测Ubuntu版本的方法。 使用lsb_release命令检测Ubuntu版本 Ubuntu系统提供了lsb_release命令,用于查看当前系统的版本信息。 打开终端…

    database 2023年5月22日
    00
  • MySQL常用的日期时间函数汇总(附实例)

    MySQL 常用的日期时间函数是在处理日期时间时经常用到的函数。以下是常见的日期时间函数汇总,以及附带实例说明。 1. DATE_FORMAT DATE_FORMAT 函数用于将日期格式化为特定的格式。其语法如下: DATE_FORMAT(date,format) 其中, date 是一个日期值,format 是我们想要的日期显示格式。例如: SELECT …

    database 2023年5月22日
    00
  • springmvc+mybatis 做分页sql 语句实例代码

    下面我将为您详细讲解如何使用SpringMVC和MyBatis实现分页查询。 1. 创建分页类 在开始之前需要先创建一个分页类,用来存放分页查询所需的参数,如下: public class PageInfo { // 当前页码,默认为第一页 private int pageNum = 1; // 每页显示的记录数,默认为10 private int page…

    database 2023年5月21日
    00
  • Centos MySQL 5.7安装、升级教程

    CentOS 7上安装MySQL 5.7 MySQL 5.7是当前最新稳定版本,它的新特性包括更好的性能和可扩展性,更好的JSON支持和更大的安全性。在CentOS 7上,MySQL 5.7安装过程如下: 更新系统 在安装MySQL 5.7之前,我们需要先更新系统: yum update -y 添加MySQL Yum Repository 下载MySQL Y…

    database 2023年5月22日
    00
  • asp在线执行sql语句的函数

    下面我将为您详细讲解“asp在线执行sql语句的函数”的完整攻略。 什么是“asp在线执行sql语句的函数”? “asp在线执行sql语句的函数”是指在ASP网页中使用VBScript编写的函数,用于在网页中连接到数据库并执行SQL语句,获取或修改数据库的内容。这个函数可以方便我们进行网页开发,提高网站的运行效率。 函数的基本语法 下面是“asp在线执行sq…

    database 2023年5月21日
    00
  • SQL 使用另一个表的数据更新记录

    使用另一个表的数据更新记录可以通过SQL的UPDATE语句来实现,下面我们来详细讲解。 更新方式 在更新数据时,我们会使用UPDATE语句来执行更新操作,语法如下: UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition; 其中,table_name是要更新的…

    database 2023年3月27日
    00
  • centos7安装mysql并jdbc测试实例详解

    CentOS7安装MySQL并JDBC测试实例详解 在CentOS7上安装MySQL,并使用Java Database Connectivity测试实例的步骤如下: 步骤一:安装MySQL 在CentOS7上使用以下命令安装MySQL: sudo yum install mysql-server 步骤二:启动MySQL服务 安装完成之后,启动MySQL服务:…

    database 2023年5月22日
    00
  • DBMS中的候选密钥

    在DBMS中,候选密钥是指能够确定关系中每个元组的唯一性的最小键集合。换句话说,它是可以作为关系主键的备选集合。 实际上,一个关系表可能有多个候选密钥,但只有一个可以作为主键,即作为唯一标识关系表中的每个元组的键。 下面,我们来详细讲解DBMS中的候选密钥: 1. 确定候选密钥集合 在DBMS中,确定候选密钥集合需要从关系表中推导出来。具体来讲,候选密钥必须…

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