当你第一次在本地运行Datart时,内置的H2数据库确实能快速启动项目,但它的局限性很快就会显现——数据易丢失、性能瓶颈、缺乏企业级功能支持。对于需要长期稳定运行的开发测试环境,甚至是预生产环境,将数据源迁移到MySQL这样的成熟关系型数据库几乎是必然选择。
迁移过程看似只是修改几个连接字符串,但实际涉及配置文件解析、SQL脚本执行、权限配置等多个技术环节。本文将带你深入每个配置细节,确保迁移后的Datart实例既稳定又高效。
在开始迁移前,需要确保基础环境符合要求。MySQL 5.7是最低推荐版本,建议使用5.7.24及以上小版本以避免已知兼容性问题。以下是完整的检查清单:
提示:生产环境建议为Datart创建专用数据库用户,避免使用root账号
迁移的核心在于两个配置文件的修改:datart.conf和application-demo.yml。它们分别控制不同层面的数据源行为。
这个全局配置文件位于/config目录,主要设置数据库连接池参数:
properties复制# 数据源类型(无需修改)
data.source.type=mysql
# 连接池配置
data.source.initialSize=5
data.source.minIdle=5
data.source.maxActive=20
data.source.maxWait=60000
# 生产环境建议开启
data.source.testWhileIdle=true
data.source.timeBetweenEvictionRunsMillis=30000
关键参数说明:
| 参数 | 推荐值 | 作用 |
|---|---|---|
| maxActive | 20-50 | 最大活跃连接数,根据服务器配置调整 |
| maxWait | 30000-60000 | 获取连接超时时间(ms) |
| timeBetweenEvictionRunsMillis | 30000 | 空闲连接检查间隔 |
这个Spring Boot配置文件需要更详细的MySQL连接设置:
yaml复制spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/datart?useSSL=false&serverTimezone=UTC
username: datart_user
password: StrongPassword123!
hikari:
connection-timeout: 30000
maximum-pool-size: 15
特别注意URL参数:
useSSL=false:本地环境可禁用SSL加密serverTimezone=UTC:避免时区不一致导致的时间问题配置文件修改后,需要初始化MySQL数据库结构。官方提供了两种方式:
当使用高权限账号时,Datart启动时会自动:
如果自动初始化失败,可手动执行位于/server/src/main/resources/db/migration的脚本:
bash复制# 登录MySQL客户端
mysql -u root -p
# 创建数据库
CREATE DATABASE datart CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 执行初始化脚本
USE datart;
SOURCE /path/to/V1.0.0__Initial_Setup.sql;
典型问题解决方案:
utf8mb4以支持完整Unicode完成迁移后,需要进行全面功能验证:
基础功能检查:
性能基准测试:
sql复制-- 检查查询响应时间
SELECT * FROM viz_dashboards WHERE 1=1;
-- 监控连接池状态
SHOW STATUS LIKE 'Threads_connected';
生产环境优化建议:
viz_views表添加合适索引OPTIMIZE TABLE维护innodb_buffer_pool_size(建议为可用内存的70%)遇到问题时,可依次检查以下环节:
连接失败:
java复制// 典型错误日志示例
Communications link failure: The last packet sent successfully...
解决方案:检查防火墙设置和MySQL的bind-address配置
表不存在错误:
确认所有迁移脚本已执行,检查数据库字符集设置
性能下降:
调整连接池参数,增加MySQL的max_connections值
迁移完成后,你会发现查询响应时间明显缩短,特别是在处理大型数据集时。曾经在H2上需要5秒加载的仪表板,现在可能只需要不到1秒。更重要的是,你再也不用担心意外关闭服务导致数据丢失了——所有配置和仪表板都安全地存储在可靠的MySQL数据库中。