Rundeck CE 4.8部署MariaDB数据库异常排查求助
问题解决与疑问解答
核心错误分析
日志中的errno: 121 "Duplicate key on write or update"是MariaDB的约束冲突错误,原因是数据库中残留了未完成的表结构或重复的约束名称,导致Liquibase自动执行schema变更时失败。
分步解决方案
1. 重建干净的数据库环境
登录MariaDB执行以下命令:
-- 删除现有数据库 DROP DATABASE rundeck; -- 重新创建数据库(指定utf8mb4编码避免字符集问题) CREATE DATABASE rundeck CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 重新授权用户 GRANT ALL PRIVILEGES ON rundeck.* TO 'rundeckuser'@'%' IDENTIFIED BY '你的密码'; -- 刷新权限 FLUSH PRIVILEGES;
2. 修正Rundeck配置文件
调整rundeck-config.properties的关键配置项:
# 保留自动更新schema的设置 dataSource.dbCreate = update # 优化JDBC URL,添加字符集参数 dataSource.url = jdbc:mysql://mysql.rundeck.local/rundeck?autoReconnect=true&useSSL=false&characterEncoding=utf8mb4 # 确保Liquibase自动更新开关开启 grails.plugin.databasemigration.updateOnStart=true
3. 验证数据库用户权限
用rundeckuser登录MariaDB,执行以下命令验证权限:
-- 查看用户权限 SHOW GRANTS FOR 'rundeckuser'@'%'; -- 测试写入权限 CREATE TABLE test(id INT); DROP TABLE test;
如果能成功执行建表和删表操作,说明用户具备完整的写入权限。
4. 清理Rundeck临时缓存
删除Rundeck安装目录下的临时文件:
rmdir /s /q E:/rundeck/server/tmp
然后重新启动Rundeck服务。
疑问解答
- 数据库Schema设置方法:Rundeck 4.x版本通过内置的Liquibase工具自动创建和维护数据库Schema,无需手动执行脚本,只要数据库连接配置正确,启动时会自动完成表结构初始化。
- 是否需要从H2迁移:不需要。全新部署时直接配置MariaDB作为初始数据库即可,只有当你已经使用H2运行并需要保留现有数据时,才需要执行迁移操作。
- 权限检查方式:通过上述的
SHOW GRANTS命令查看授权,或手动执行建表/删表操作验证写入权限。
内容的提问来源于stack exchange,提问作者sigfried
相关产品推荐
相关产品推荐

