# MySQL数据库日志系统配置说明 ## 概述 系统已升级为使用MySQL数据库存储已处理文件的日志记录,相比纯文本日志具有以下优势: - ✅ **更高的查询效率** - 使用索引快速检索记录 - ✅ **并发安全** - 支持多进程同时访问 - ✅ **数据完整性** - 事务支持和约束保护 - ✅ **统计分析** - 方便进行数据统计和报表生成 - ✅ **扩展性强** - 易于添加新字段和功能 ## 1. 安装MySQL数据库 ### Windows系统 1. 下载MySQL安装包: https://dev.mysql.com/downloads/mysql/ 2. 运行安装程序,选择"Developer Default"配置 3. 设置root密码(建议设置为强密码) 4. 完成安装后,MySQL服务将自动启动 ### 验证安装 打开命令提示符,执行: ```bash mysql --version ``` ## 2. 创建数据库和表 ### 方法一: 使用SQL脚本(推荐) 1. 登录MySQL: ```bash mysql -u root -p ``` 2. 执行项目中的SQL脚本: ```sql source D:/MyPlan/MusicDemo/src/main/resources/schema.sql ``` ### 方法二: 手动创建 ```sql -- 创建数据库 CREATE DATABASE IF NOT EXISTS music_demo DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci; USE music_demo; -- 创建表(表结构会由程序自动创建) ``` ### 验证数据库创建 ```sql -- 查看数据库 SHOW DATABASES; -- 使用数据库 USE music_demo; -- 查看表结构 SHOW TABLES; DESC processed_files; ``` ## 3. 配置应用程序 编辑 `config.properties` 文件: ```properties # 数据库类型(使用mysql) db.type=mysql # MySQL数据库连接配置 db.mysql.host=localhost # 数据库服务器地址 db.mysql.port=3306 # 端口号 db.mysql.database=music_demo # 数据库名称 db.mysql.username=root # 用户名 db.mysql.password=your_password # 密码(请修改为实际密码) # 连接池配置 db.mysql.pool.maxPoolSize=10 # 最大连接数 db.mysql.pool.minIdle=2 # 最小空闲连接数 db.mysql.pool.connectionTimeout=30000 # 连接超时时间(毫秒) ``` **重要提示:** - 请将 `db.mysql.password` 修改为你的MySQL root密码 - 如果MySQL运行在其他服务器,请修改 `db.mysql.host` ## 4. 更新Maven依赖 已添加以下依赖到 `pom.xml`: ```xml com.mysql mysql-connector-j 8.2.0 com.zaxxer HikariCP 5.1.0 ``` 执行以下命令下载依赖: ```bash mvn clean install ``` ## 5. 运行测试 ### 启动应用程序 ```bash mvn compile exec:java -Dexec.mainClass="com.lux032.musicautotagger.Main" ``` ### 查看日志记录 在MySQL中查询已处理的文件: ```sql USE music_demo; -- 查看所有已处理文件 SELECT * FROM processed_files ORDER BY processed_time DESC; -- 查看最近24小时处理的文件 SELECT * FROM recent_processed_files; -- 查看统计信息 SELECT * FROM processing_statistics; -- 按艺术家统计 SELECT artist, COUNT(*) as file_count FROM processed_files GROUP BY artist ORDER BY file_count DESC; -- 按专辑统计 SELECT album, COUNT(*) as file_count FROM processed_files GROUP BY album ORDER BY file_count DESC; ``` ## 6. 数据库表结构 ### processed_files 表 | 字段 | 类型 | 说明 | |------|------|------| | id | BIGINT | 自增主键 | | file_hash | VARCHAR(64) | 文件哈希值(唯一) | | file_name | VARCHAR(500) | 文件名 | | file_path | VARCHAR(1000) | 文件完整路径 | | file_size | BIGINT | 文件大小(字节) | | processed_time | DATETIME | 处理时间 | | recording_id | VARCHAR(100) | MusicBrainz录音ID | | artist | VARCHAR(500) | 艺术家 | | title | VARCHAR(500) | 曲目标题 | | album | VARCHAR(500) | 专辑名称 | | created_at | TIMESTAMP | 记录创建时间 | | updated_at | TIMESTAMP | 记录更新时间 | ### 索引 - `idx_file_hash` - 文件哈希索引(快速查重) - `idx_processed_time` - 处理时间索引(时间范围查询) - `idx_recording_id` - 录音ID索引 - `idx_artist` - 艺术家索引(搜索和统计) - `idx_title` - 标题索引 - `idx_album` - 专辑索引 ## 7. 常见问题 ### Q1: 连接数据库失败 **错误信息:** `Unable to connect to database` **解决方案:** 1. 检查MySQL服务是否启动 2. 验证用户名和密码是否正确 3. 确认数据库 `music_demo` 已创建 4. 检查防火墙是否阻止了3306端口 ### Q2: 找不到表 **错误信息:** `Table 'music_demo.processed_files' doesn't exist` **解决方案:** 程序会自动创建表结构。如果未自动创建,请手动执行: ```bash mysql -u root -p music_demo < src/main/resources/schema.sql ``` ### Q3: 字符编码问题 **问题:** 中文乱码 **解决方案:** 确保MySQL配置使用UTF-8编码: ```sql -- 查看数据库编码 SHOW CREATE DATABASE music_demo; -- 如果不是utf8mb4,重新创建 DROP DATABASE music_demo; CREATE DATABASE music_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ## 8. 性能优化建议 1. **定期清理旧记录** ```sql -- 删除90天前的记录 DELETE FROM processed_files WHERE processed_time < DATE_SUB(NOW(), INTERVAL 90 DAY); ``` 2. **优化表** ```sql OPTIMIZE TABLE processed_files; ``` 3. **监控连接池** - 根据实际并发量调整 `maxPoolSize` - 监控数据库连接数: `SHOW PROCESSLIST;` ## 9. 数据备份 ### 备份数据库 ```bash mysqldump -u root -p music_demo > backup_$(date +%Y%m%d).sql ``` ### 恢复数据库 ```bash mysql -u root -p music_demo < backup_20231201.sql ``` ## 10. 从文本日志迁移 如果你之前使用文本日志,可以编写脚本导入到MySQL: ```java // 读取旧的文本日志文件 // 解析每一行 // 插入到MySQL数据库 ``` 完整的迁移工具可以根据需要开发。 --- **技术支持:** 如有问题请查看项目文档或提交Issue