# table-structure-management-practice **Repository Path**: mark93/table-structure-management-practice ## Basic Information - **Project Name**: table-structure-management-practice - **Description**: 提供一套mysql数据库表结构管理规范及工具,避免实际工作中各环境中的数据库表结构混乱,减少数据库管理员的手工操作步骤,降低维护成本。 需要提前安装好mysql、mysqldump、mysqldiff命令 - **Primary Language**: Shell - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-12 - **Last Updated**: 2024-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 背景 在实际做项目的过程中,往往有多套数据库环境,甚至还有可能出现需要分库分表的情况;当表结构管理缺少规范时,很容易造成混乱,排查起来也费时费力,浪费不必要的资源。 # 解决方案 ![库表结构更新规范](README.assets/库表结构更新规范.png) 表结构版本管理参考git flow流程,分别约定了四个环节feature、develop、release、master,其中feature、develop、release需要在同一个数据库实例中维护(目的是为了简化工具配置),并且只有表定义,没有任何数据,自增ID也是从1开始。 其中feature库作为唯一修改入口,由脚本管理员负责操作,团队的其他成员仅有只读权限。 为了能够简化脚本管理员的工作,这里提供了三个脚本用于完成同数据库实例跨库拷贝表结构、分库分表处理、表结构对比。 # truncate table 详细代码见[0-truncate.sh](./0-truncate.sh),主要说明如下: ```shell sh 0-truncate.sh target_db_name ``` 1. 用于feature、develop、release环节 2. 将数据库中的表进行重置自增ID # copy table 详细代码见[1-copytable.sh](./1-copytable.sh),主要说明如下: ```shell sh 1-copytable.sh source_db_name table_list_file ``` 1. 用于在feature到develop环节之间 2. 先清空目标库中的所有表,将table_list_file登记的表从源库复制到目标库,需要提前安装mysql命令。 3. table_list_file 应该是目标库的名称,其内容每一行是需要拷贝的表名 # split table 详细代码见[2-splitable.sh](./2-splitable.sh),主要说明如下: ```shell sh 2-splitable.sh table_list_file ``` 1. 用于develop环节 2. table_list_file就是需要执行分表的数据库名称,其内容每一行是需要分表的表名 3. 对表进行拆分处理,分表之后原表名会被删除 4.如果不需要执行分库分表,该脚本可以不执行 # compare table 详细代码见[3-comparetable.sh](./3-comparetable.sh),主要说明如下: ```shell sh 3-comparetable.sh source_db_name target_db_name formal_db_name ``` 1. 用于develop到release环节之间 2. 对比所有表,获得需要在release环节要执行的sql语句,由于之前master和release的表结构一致,因此语句也可以在master环节执行