# go-mysql **Repository Path**: kevin186/go-mysql ## Basic Information - **Project Name**: go-mysql - **Description**: 使用golang操作mysql数据库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-14 - **Last Updated**: 2025-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go CMDB 配置管理数据库后端服务 这是一个基于Golang开发的CMDB(配置管理数据库)后端服务,提供完整的服务器资源管理功能,支持RESTful API操作。本服务支持多种数据库操作模式,并对中文处理进行了优化。 ## 主要功能特性 - 完整的服务器资源CRUD管理 - RESTful API接口设计 - 支持原生SQL和GORM两种数据库操作模式 - 支持数据库操作模式动态切换 - 优化的MySQL 8数据库字符集配置,支持中文正常显示 - 完整的CORS跨域支持 - 自动数据库迁移和表结构管理 - 优化的数据库连接池配置 - 预置示例测试数据 - 健康检查和API状态监控 ## 技术栈 - **Go** 1.20 - **Gin** Web框架 v1.9.1 - **GORM** ORM框架 v1.25.5 - **MySQL 8.0** 数据库 - **Go-MySQL-Driver** v1.5.2 ## 项目结构 ``` ├── main.go # 主程序入口和完整实现 ├── go.mod # Go模块定义和依赖管理 ├── go.sum # 依赖校验和 ├── README.md # 项目文档 └── go-mysql # 编译后的二进制文件(Windows) ``` ## 快速开始 ### 1. 前置条件 - Go 1.20或更高版本 - MySQL 8.0数据库服务 - 数据库连接信息: - 主机:172.16.200.102 - 端口:3306 - 用户名:root - 密码:rootpassword - 数据库:cmdb(自动创建) ### 2. 安装依赖 ```bash go mod tidy ``` ### 3. 启动服务 ```bash go run main.go ``` 服务将在 http://localhost:8080 启动。 ## 数据库配置 服务启动时会自动执行以下操作: 1. 连接到MySQL默认数据库 2. 创建cmdb数据库(如果不存在) 3. 设置utf8mb4字符集和排序规则 4. 连接到cmdb数据库 5. 自动迁移数据库表结构(保留现有数据) 6. 配置数据库连接池(最大空闲连接:10,最大打开连接:100) 7. 如果表为空,插入示例测试数据 ## API接口文档 ### 系统接口 #### 健康检查 - **GET** `/api/health` - 响应示例: ```json { "status": "ok", "time": "2023-10-13T22:32:33.1805194+08:00" } ``` #### 数据库模式切换 - **POST** `/api/toggle-db-mode` - 请求体:`{"use_raw_sql": true/false}` - 响应示例: ```json { "message": "数据库操作模式已切换", "current_mode": "gorm", "use_raw_sql": false } ``` ### 服务器资源管理接口 #### 获取服务器列表 - **GET** `/api/servers` - 响应:服务器列表JSON数组 #### 创建服务器 - **POST** `/api/servers` - 请求体:服务器信息JSON对象(不包含id、created_at、updated_at字段) - 响应:创建的服务器完整信息 - **注意**:为了正确处理中文,请设置Content-Type头为 `application/json; charset=utf-8` #### 获取服务器详情 - **GET** `/api/servers/:id` - 参数:服务器ID(整数) - 响应:服务器详细信息JSON对象 #### 更新服务器 - **PUT** `/api/servers/:id` - 参数:服务器ID(整数) - 请求体:要更新的字段JSON对象 - 响应:更新后的服务器完整信息 #### 删除服务器 - **DELETE** `/api/servers/:id` - 参数:服务器ID(整数) - 响应:成功或错误消息 ## 数据结构 ### 服务器数据模型 ```json { "id": 1, "name": "web-server-01", "ip": "192.168.1.101", "hostname": "web-01.example.com", "os": "Ubuntu 20.04 LTS", "cpu": "4核心", "memory": 8, "disk": 200, "status": "running", "deploy_time": "2023-09-13T22:31:46.966Z", "last_checkin": "2023-10-13T22:31:46.966Z", "created_at": "2023-10-13T22:31:46.966Z", "updated_at": "2023-10-13T22:31:46.966Z" } ``` ## 示例请求 ### 1. 创建服务器(PowerShell) ```powershell Invoke-RestMethod -Uri http://localhost:8080/api/servers -Method POST -Body (ConvertTo-Json @{ name='web-server-new'; ip='192.168.1.200'; hostname='new-server.example.com'; os='Ubuntu 22.04 LTS'; cpu='8核心'; memory=16; disk=500; status='running' }) -ContentType 'application/json; charset=utf-8' ``` ### 2. 更新服务器状态 ```powershell Invoke-RestMethod -Uri http://localhost:8080/api/servers/1 -Method PUT -Body (ConvertTo-Json @{ status='maintenance' }) -ContentType 'application/json' ``` ### 3. 切换数据库操作模式 ```powershell Invoke-RestMethod -Uri http://localhost:8080/api/toggle-db-mode -Method POST -Body (ConvertTo-Json @{ use_raw_sql=$true }) -ContentType 'application/json' ``` ## 数据库表结构 系统使用GORM自动创建以下表结构: ```sql CREATE TABLE `servers` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `hostname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `os` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `cpu` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `memory` bigint DEFAULT NULL, `disk` bigint DEFAULT NULL, `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `deploy_time` datetime(3) DEFAULT NULL, `last_checkin` datetime(3) DEFAULT NULL, `created_at` datetime(3) DEFAULT NULL, `updated_at` datetime(3) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_servers_name` (`name`), UNIQUE KEY `idx_servers_ip` (`ip`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` ## 中文显示问题解决方案 ### 已解决的问题 本服务已优化中文显示问题,主要通过以下配置确保中文正常显示: 1. **数据库字符集配置**: - 数据库创建时设置utf8mb4字符集 - 表结构使用utf8mb4_unicode_ci排序规则 - 连接时通过`SET NAMES utf8mb4`设置客户端字符集 2. **客户端请求处理**: - 客户端发送请求时需指定`Content-Type: application/json; charset=utf-8` - 服务端保留原始请求数据,避免重复编码转换 3. **服务端优化**: - 增强的数据模型设计,明确指定字符集 - 优化的数据库操作逻辑,减少字符集转换 - 详细的日志记录,便于排查问题 ## 注意事项 1. 数据库连接信息目前硬编码在代码中,生产环境建议使用配置文件或环境变量 2. 默认使用8080端口,请确保该端口未被占用 3. 支持的服务器状态有:running(运行中)、stopped(已停止)、maintenance(维护中) 4. 服务器名称和IP地址是唯一的,系统会自动检查重复 5. 本项目为演示目的,在生产环境中建议添加身份验证和授权机制 6. 服务启动时会保留现有数据,只进行必要的表结构迁移 ## 性能优化特性 - 优化的数据库连接池配置 - 合理的字段长度设计 - 唯一索引优化查询效率 - 支持原生SQL和ORM两种模式,可根据需求切换 - 详细的日志记录便于问题排查和性能分析 - 保留原始数据以减少不必要的数据转换