# Lyzsys 数据库设计文档 ## 📖 目录 - [数据库概述](#数据库概述) - [设计规范](#设计规范) - [核心表设计](#核心表设计) - [索引设计](#索引设计) - [数据字典](#数据字典) - [多租户设计](#多租户设计) - [数据库优化](#数据库优化) - [数据库管理](#数据库管理) --- ## 数据库概述 ### 技术选型 | 特性 | 说明 | |------|------| | 数据库 | MySQL 5.7+ / 8.0+ | | 字符集 | utf8mb4 | | 排序规则 | utf8mb4_unicode_ci | | 引擎 | InnoDB | | 时区 | Asia/Shanghai | ### 支持的数据库 - MySQL 5.7、8.0+ - PostgreSQL 9.6+ | Oracle 11g+ | SQL Server 2012+ | H2 2.x (开发测试) ### 数据库特点 1. **多数据库支持**: 通过 MyBatis Plus 实现 2. **租户隔离**: 支持多租户数据隔离 3. **逻辑删除**: 支持软删除 4. **数据权限**: 支持行级数据权限 5. **审计日志**: 完整的创建、更新日志 --- ## 设计规范 ### 命名规范 #### 数据库命名 - 格式: `lyzsys` - 示例: `lyzsys` #### 表命名 - 格式: `{模块}_{业务}_{实体}` - 规则: 小写字母 + 下划线 - 示例: - `system_users` - 系统用户表 - `system_roles` - 系统角色表 - `mall_orders` - 商城订单表 - `bpm_process_instance` - 工作流实例表 #### 字段命名 - 格式: 小写字母 + 下划线 - 规则: 使用有意义的单词组合 - 示例: - `user_id` - 用户 ID - `user_name` - 用户名 - `create_time` - 创建时间 - `update_time` - 更新时间 #### 索引命名 - 主键索引: `PRIMARY` - 唯一索引: `uniq_{字段名}` - 普通索引: `idx_{字段名}` - 示例: - `uniq_username` - 用户名唯一索引 - `idx_dept_id` - 部门 ID 普通索引 ### 字段类型 #### 整数类型 | 类型 | 字节 | 范围 | 用途 | |------|------|------|------| | TINYINT | 1 | -128 ~ 127 | 状态、标识 | | SMALLINT | 2 | -32768 ~ 32767 | 枚举值 | | INT | 4 | -21亿 ~ 21亿 | 数量、序号 | | BIGINT | 8 | 极大数值 | 主键、外键 | #### 字符串类型 | 类型 | 长度 | 用途 | |------|------|------| | CHAR | 0-255 | 固定长度字符串 | | VARCHAR | 0-65535 | 变长字符串 | | TEXT | 0-65535 | 长文本 | | LONGTEXT | 0-4294967295 | 超长文本 | #### 日期时间类型 | 类型 | 格式 | 用途 | |------|------|------| | DATE | YYYY-MM-DD | 日期 | | DATETIME | YYYY-MM-DD HH:MM:SS | 日期时间 | | TIMESTAMP | 时间戳 | 时间戳 | #### 小数类型 | 类型 | 用途 | |------|------| | DECIMAL(M,D) | 金额、精度数值 | ### 通用字段 每张表都包含以下通用字段: ```sql -- 主键 id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' -- 创建信息 create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' creator VARCHAR(64) COMMENT '创建人' -- 更新信息 update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' updater VARCHAR(64) COMMENT '更新人' -- 删除标记 deleted BIT NOT NULL DEFAULT FALSE COMMENT '是否删除' -- 租户 ID (多租户表) tenant_id BIGINT NOT NULL COMMENT '租户 ID' ``` --- ## 核心表设计 ### 系统管理模块 #### 1. 用户表 (system_users) ```sql CREATE TABLE `system_users` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` VARCHAR(30) NOT NULL COMMENT '用户账号', `password` VARCHAR(100) NOT NULL COMMENT '密码', `nickname` VARCHAR(30) NOT NULL COMMENT '用户昵称', `remark` VARCHAR(500) COMMENT '备注', `dept_id` BIGINT NOT NULL COMMENT '部门ID', `post_ids` VARCHAR(255) COMMENT '岗位编号数组', `email` VARCHAR(50) COMMENT '用户邮箱', `mobile` VARCHAR(11) COMMENT '手机号码', `sex` TINYINT COMMENT '用户性别', `avatar` VARCHAR(100) COMMENT '头像地址', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)', `login_ip` VARCHAR(50) COMMENT '最后登录IP', `login_date` DATETIME COMMENT '最后登录时间', `tenant_id` BIGINT NOT NULL COMMENT '租户 ID', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`) ) ENGINE=InnoDB COMMENT='用户信息表'; ``` #### 2. 角色表 (system_roles) ```sql CREATE TABLE `system_roles` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色ID', `name` VARCHAR(30) NOT NULL COMMENT '角色名称', `code` VARCHAR(100) NOT NULL COMMENT '角色权限字符串', `sort` INT NOT NULL COMMENT '显示顺序', `data_scope` TINYINT NOT NULL DEFAULT 1 COMMENT '数据范围(1:全部数据权限 2:本部门及以下数据权限 3:本部门数据权限 4:仅本人数据权限)', `data_scope_dept_ids` VARCHAR(500) COMMENT '数据范围-部门数组', `status` TINYINT NOT NULL COMMENT '角色状态(0正常 1停用)', `type` TINYINT NOT NULL COMMENT '角色类型(1:系统内置 2:自定义)', `remark` VARCHAR(500) COMMENT '备注', `tenant_id` BIGINT NOT NULL COMMENT '租户 ID', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='角色信息表'; ``` #### 3. 菜单表 (system_menu) ```sql CREATE TABLE `system_menu` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '菜单ID', `name` VARCHAR(50) NOT NULL COMMENT '菜单名称', `permission` VARCHAR(100) NOT NULL COMMENT '权限标识', `type` TINYINT NOT NULL COMMENT '菜单类型(1:目录 2:菜单 3:按钮)', `sort` INT NOT NULL DEFAULT 0 COMMENT '显示顺序', `parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父菜单ID', `path` VARCHAR(200) COMMENT '路由地址', `icon` VARCHAR(100) COMMENT '菜单图标', `component` VARCHAR(255) COMMENT '组件路径', `component_name` VARCHAR(255) COMMENT '组件名', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '菜单状态(0正常 1停用)', `visible` BIT NOT NULL DEFAULT TRUE COMMENT '是否可见', `keep_alive` BIT NOT NULL DEFAULT FALSE COMMENT '是否缓存', `always_show` BIT NOT NULL DEFAULT FALSE COMMENT '是否总是显示', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='菜单权限表'; ``` #### 4. 部门表 (system_dept) ```sql CREATE TABLE `system_dept` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '部门id', `parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父部门id', `name` VARCHAR(30) NOT NULL COMMENT '部门名称', `sort` INT NOT NULL DEFAULT 0 COMMENT '显示顺序', `leader_user_id` BIGINT COMMENT '负责人', `phone` VARCHAR(11) COMMENT '联系电话', `email` VARCHAR(64) COMMENT '邮箱', `status` TINYINT NOT NULL COMMENT '部门状态(0正常 1停用)', `tenant_id` BIGINT NOT NULL COMMENT '租户 ID', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='部门表'; ``` #### 5. 字典表 (system_dict_type) ```sql CREATE TABLE `system_dict_type` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '字典主键', `name` VARCHAR(100) NOT NULL COMMENT '字典名称', `type` VARCHAR(100) NOT NULL COMMENT '字典类型', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0正常 1停用)', `remark` VARCHAR(500) COMMENT '备注', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uniq_type` (`type`, `update_time`, `deleted`) ) ENGINE=InnoDB COMMENT='字典类型表'; ``` ### 基础设施模块 #### 6. 代码生成表 (infra_codegen_column) ```sql CREATE TABLE `infra_codegen_column` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号', `table_id` BIGINT NOT NULL COMMENT '表编号', `column_name` VARCHAR(200) NOT NULL COMMENT '字段名', `data_type` VARCHAR(100) NOT NULL COMMENT '字段类型', `column_comment` VARCHAR(500) COMMENT '字段描述', `nullable` BIT NOT NULL COMMENT '是否允许为空', `pk` BIT NOT NULL COMMENT '是否主键', `ordinal_position` INT NOT NULL COMMENT '排序', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='代码生成字段表'; ``` #### 7. 定时任务表 (infra_job) ```sql CREATE TABLE `infra_job` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '任务ID', `name` VARCHAR(200) NOT NULL COMMENT '任务名称', `status` TINYINT NOT NULL COMMENT '任务状态', `handler_name` VARCHAR(200) NOT NULL COMMENT '处理器的名字', `handler_param` VARCHAR(500) COMMENT '处理器的参数', `cron_expression` VARCHAR(100) NOT NULL COMMENT 'Cron 表达式', `retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数', `retry_interval` INT NOT NULL DEFAULT 0 COMMENT '重试间隔', `monitor_timeout` INT NOT NULL DEFAULT 0 COMMENT '监控超时时间', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='定时任务表'; ``` ### 工作流模块 #### 8. 流程实例表 (bpm_process_instance) ```sql CREATE TABLE `bpm_process_instance` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号', `process_definition_id` VARCHAR(64) NOT NULL COMMENT '流程定义的编号', `process_instance_id` VARCHAR(64) NOT NULL COMMENT '流程实例的编号', `start_user_id` BIGINT NOT NULL COMMENT '发起人的用户编号', `name` VARCHAR(255) COMMENT '流程实例的名字', `business_key` VARCHAR(64) COMMENT '业务标识', `status` TINYINT NOT NULL COMMENT '流程实例的状态', `tenant_id` BIGINT NOT NULL COMMENT '租户 ID', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='流程实例表'; ``` ### 商城模块 #### 9. 商品表 (mall_product) ```sql CREATE TABLE `mall_product` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '商品编号', `name` VARCHAR(200) NOT NULL COMMENT '商品名称', `sell_point` VARCHAR(500) COMMENT '卖点', `description` VARCHAR(2000) COMMENT '商品详情', `category_id` BIGINT NOT NULL COMMENT '分类编号', `brand_id` BIGINT COMMENT '品牌编号', `price` BIGINT NOT NULL COMMENT '价格,单位:分', `stock` INT NOT NULL COMMENT '库存', `pic_url` VARCHAR(500) COMMENT '商品主图', `status` TINYINT NOT NULL COMMENT '商品状态', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='商品表'; ``` #### 10. 订单表 (mall_order) ```sql CREATE TABLE `mall_order` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单编号', `user_id` BIGINT NOT NULL COMMENT '用户编号', `order_no` VARCHAR(64) NOT NULL COMMENT '订单号', `total_price` BIGINT NOT NULL COMMENT '订单总价,单位:分', `status` TINYINT NOT NULL COMMENT '订单状态', `pay_time` DATETIME COMMENT '付款时间', `delivery_time` DATETIME COMMENT '发货时间', `receiver_time` DATETIME COMMENT '收货时间', `comment_time` DATETIME COMMENT '评论时间', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uniq_order_no` (`order_no`) ) ENGINE=InnoDB COMMENT='订单表'; ``` --- ## 索引设计 ### 索引类型 #### 1. 主键索引 (PRIMARY KEY) 每张表都有主键索引: ```sql PRIMARY KEY (`id`) ``` #### 2. 唯一索引 (UNIQUE) 用于保证字段的唯一性: ```sql UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`) ``` #### 3. 普通索引 (INDEX) 用于提升查询性能: ```sql KEY `idx_dept_id` (`dept_id`) ``` #### 4. 联合索引 用于多字段查询: ```sql KEY `idx_user_id_status` (`user_id`, `status`) ``` ### 索引规范 1. **主键索引**: 使用自增 BIGINT 2. **唯一索引**: 业务唯一字段 3. **普通索引**: 频繁查询的字段 4. **联合索引**: 多字段组合查询,遵循最左前缀原则 5. **索引数量**: 单表索引不超过 5 个 ### 索引示例 ```sql -- 用户表索引 PRIMARY KEY (`id`) UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`) KEY `idx_dept_id` (`dept_id`) KEY `idx_status` (`status`) -- 订单表索引 PRIMARY KEY (`id`) UNIQUE KEY `uniq_order_no` (`order_no`) KEY `idx_user_id` (`user_id`) KEY `idx_status` (`status`) KEY `idx_create_time` (`create_time`) ``` --- ## 数据字典 ### 通用数据字典 #### 1. 用户性别 (system_user_sex) | 字典值 | 字典标签 | 颜色 | |--------|----------|------| | 1 | 男 | blue | | 2 | 女 | pink | | 3 | 未知 | gray | #### 2. 用户状态 (system_common_status) | 字典值 | 字典标签 | 颜色 | |--------|----------|------| | 0 | 启用 | success | | 1 | 停用 | danger | #### 3. 菜单类型 (system_menu_type) | 字典值 | 字典标签 | 颜色 | |--------|----------|------| | 1 | 目录 | | | 2 | 菜单 | | | 3 | 按钮 | | #### 4. 数据范围 (system_data_scope) | 字典值 | 字典标签 | |--------|----------| | 1 | 全部数据权限 | | 2 | 本部门及以下数据权限 | | 3 | 本部门数据权限 | | 4 | 仅本人数据权限 | #### 5. 流程实例状态 (bpm_process_instance_status) | 字典值 | 字典标签 | 颜色 | |--------|----------|------| | 1 | 进行中 | primary | | 2 | 已结束 | success | --- ## 多租户设计 ### 租户隔离策略 #### 1. 共享数据库、共享 Schema 所有租户共享同一个数据库,通过 `tenant_id` 字段隔离。 #### 2. 自动过滤 MyBatis Plus 拦截器自动添加租户条件: ```java // 查询时自动添加租户条件 List users = userMapper.selectList(); // 实际 SQL SELECT * FROM system_users WHERE deleted = 0 AND tenant_id = 1 ``` ### 租户表设计 #### 租户表 (system_tenant) ```sql CREATE TABLE `system_tenant` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '租户编号', `name` VARCHAR(30) NOT NULL COMMENT '租户名', `contact_user_id` BIGINT NOT NULL COMMENT '联系人的用户编号', `contact_name` VARCHAR(30) NOT NULL COMMENT '联系人', `contact_mobile` VARCHAR(11) COMMENT '联系手机', `status` TINYINT NOT NULL COMMENT '租户状态', `website` VARCHAR(256) COMMENT '绑定域名', `package_id` BIGINT NOT NULL COMMENT '租户套餐编号', `expire_time` DATETIME NOT NULL COMMENT '过期时间', `account_count` INT NOT NULL COMMENT '账号数量', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='租户表'; ``` #### 租户套餐表 (system_tenant_package) ```sql CREATE TABLE `system_tenant_package` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '套餐编号', `name` VARCHAR(30) NOT NULL COMMENT '套餐名', `status` TINYINT NOT NULL COMMENT '套餐状态', `remark` VARCHAR(500) COMMENT '备注', `menu_ids` VARCHAR(500) NOT NULL COMMENT '关联的菜单编号', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `creator` VARCHAR(64) COMMENT '创建人', `updater` VARCHAR(64) COMMENT '更新人', `deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='租户套餐表'; ``` --- ## 数据库优化 ### SQL 优化 #### 1. 避免全表扫描 ```sql -- 不推荐 SELECT * FROM system_users -- 推荐 SELECT id, username, nickname FROM system_users ``` #### 2. 使用索引 ```sql -- 不推荐 SELECT * FROM system_users WHERE SUBSTRING(username, 1, 3) = 'adm' -- 推荐 SELECT * FROM system_users WHERE username LIKE 'adm%' ``` #### 3. 分页查询 ```sql -- 使用分页插件 SELECT * FROM system_users LIMIT 10 OFFSET 0 ``` ### 表结构优化 #### 1. 字段类型选择 ```sql -- 不推荐 VARCHAR(1000) -- 过长 -- 推荐 VARCHAR(200) -- 合理长度 ``` #### 2. 字段数量控制 单表字段数量不超过 50 个。 #### 3. 表分区 大表可以采用分区策略: ```sql -- 按时间分区 CREATE TABLE `system_operate_log` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `create_time` DATETIME NOT NULL, PRIMARY KEY (`id`, `create_time`) ) ENGINE=InnoDB PARTITION BY RANGE (TO_DAYS(create_time)) ( PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')), PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01')) ); ``` --- ## 数据库管理 ### 数据库备份 #### 1. 逻辑备份 ```bash # 备份 mysqldump -u root -p lyzsys > lyzsys_backup.sql # 恢复 mysql -u root -p lyzsys < lyzsys_backup.sql ``` #### 2. 物理备份 ```bash # 复制数据文件 cp -r /var/lib/mysql/lyzsys /backup/lyzsys ``` ### 数据库监控 #### 1. 慢查询日志 ```sql -- 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; ``` #### 2. 性能监控 ```sql -- 查看连接数 SHOW PROCESSLIST; -- 查看状态 SHOW STATUS; ``` ### 数据库维护 #### 1. 表优化 ```sql -- 优化表 OPTIMIZE TABLE system_users; -- 分析表 ANALYZE TABLE system_users; -- 修复表 REPAIR TABLE system_users; ``` #### 2. 索引优化 ```sql -- 查看索引使用情况 SHOW INDEX FROM system_users; -- 删除无用索引 DROP INDEX idx_unused ON system_users; ``` --- **文档版本**: v1.0.0 **最后更新**: 2025-01-19 **维护团队**: Lyzsys 数据库团队