【生产实践】Dolphinscheduler集群部署后Web控制台不能登录的问题解决了!
<h2 id="问题描述">问题描述</h2><p>Dolphinscheduler按生产手册使用一键脚本集群部署后,控制台登录页面可以打开,但使用默认账户怎么都登录不进去,尝试在数据库中清理登录用户字段,发现数据库中并没有相关用户字段,而后使用Dolphinscheduler初始化脚本建库时发现连接数据库失败。</p>
<p>报错信息:</p>
<pre><code> Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
16:16:08.294 ERROR com.alibaba.druid.pool.DruidDataSource - init datasource error, url: jdbc:mysql://<数据库IP>:3306/ifrsdb?characterEncoding=UTF-8&allowMultiQueries=true
java.sql.SQLException: Access denied for user 'root'@'<hostname>' (using password: YES)
...
16:16:08.300 INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
16:16:08.300 ERROR org.apache.dolphinscheduler.dao.upgrade.UpgradeDao - Access denied for user 'root'@'<hostname>' (using password: YES)
java.sql.SQLException: Access denied for user 'root'@'<hostname>' (using password: YES)
...
16:16:08.301 ERROR org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler - create DolphinScheduler failed
</code></pre>
<h2 id="排查过程">排查过程</h2>
<ul>
<li>首先网络、防火墙、服务可用性等常规巡检项,确保无误</li>
<li>检查数据库授权,从服务器使用mysql命令登录数据库正常,排除数据库问题</li>
<li>检查数据库连接件是否和数据库版本对应,跟其他生产环境使用相同连接件,排除连接件问题</li>
<li>检查启动过程日志,收集报错信息</li>
<li>检查配置文件,确保手动后设置的值正确可用</li>
</ul>
<h2 id="解决关键点">解决关键点</h2>
<p><安装目录>/conf/datasource.properties 记录数据库连接信息</p>
<pre><code>spring.datasource.username=root
spring.datasource.password=<你的密码>##就这地方出问题了
</code></pre>
<p><strong>我的问题是集群部署后安装节点的数据库密码修改对了,但集群其他节点的配置文件中这个密码的地方没有更新,将这个数据库密码设置对了,重启集群就好了。</strong></p>
<h2 id="dolphinscheduler安装时数据库认证失败问题排查备忘录">DolphinScheduler安装时数据库认证失败问题排查备忘录</h2>
<h3 id="问题描述-1">问题描述</h3>
<p>在安装 DolphinScheduler 时,执行数据库初始化脚本(如 create-dolphinscheduler.sh)出现以下错误:</p>
<pre><code>ERROR org.apache.dolphinscheduler.dao.upgrade.UpgradeDao - Access denied for user 'root'@'<hostname>' (using password: YES)
java.sql.SQLException: Access denied for user 'root'@'<hostname>' (using password: YES)
</code></pre>
<p>尽管已通过 <code>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'</code> 授权 root 用户从任意主机访问,但错误依旧存在。同时,日志中出现 MySQL 驱动过时警告:</p>
<pre><code>Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
</code></pre>
<h3 id="可能原因分析">可能原因分析</h3>
<ol>
<li>MySQL 认证插件不兼容:MySQL 8.0 默认使用 caching_sha2_password 认证插件,而旧版 JDBC 驱动可能只支持 mysql_native_password。</li>
<li>JDBC 驱动版本不匹配:使用的 MySQL JDBC 驱动版本过低,不支持当前 MySQL 服务器版本。</li>
<li>数据库连接参数配置错误:datasource.properties 中的 URL、用户名或密码配置有误。</li>
<li>主机名解析异常:DolphinScheduler 服务器通过不同的主机名或 IP 访问 MySQL,导致权限验证失败。</li>
<li>SSL 配置冲突:MySQL 服务器强制要求 SSL 连接,但连接 URL 中未配置正确的 SSL 参数。</li>
</ol>
<h3 id="排查步骤">排查步骤</h3>
<ol>
<li>验证 MySQL 用户权限<br>
确认 root 用户确实拥有从任意主机访问的权限:</li>
</ol>
<pre><code>-- 查看 root 用户权限
SHOW GRANTS FOR 'root'@'%';
-- 若权限不足,重新授权(需替换为实际密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
</code></pre>
<ol start="2">
<li>检查并更新 MySQL JDBC 驱动<br>
确保使用的 JDBC 驱动版本与 MySQL 服务器兼容:</li>
</ol>
<ul>
<li>查看 MySQL 版本:</li>
</ul>
<pre><code>mysql -V
</code></pre>
<ul>
<li>下载对应版本的驱动:</li>
</ul>
<pre><code>MySQL 5.x:推荐使用 mysql-connector-java-5.1.47.jar
MySQL 8.x:必须使用 mysql-connector-java-8.0.x.jar
</code></pre>
<ul>
<li>替换驱动文件:<br>
将下载的 JAR 文件复制到 DolphinScheduler 的 lib/ 目录下,并删除旧版本驱动。</li>
</ul>
<ol start="3">
<li>检查数据库连接配置<br>
编辑 <code>conf/datasource.properties</code>(DolphinScheduler 2.x)或 conf/common.properties(DolphinScheduler 3.x),确保以下参数正确:</li>
</ol>
<pre><code>spring.datasource.url=jdbc:mysql://<数据库IP>:3306/ifrsdb?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=<你的密码>
</code></pre>
<p><strong>关键参数说明:</strong></p>
<ul>
<li>useSSL=false:禁用 SSL 连接(测试环境)</li>
<li>allowPublicKeyRetrieval=true:允许客户端获取公钥(MySQL 8.x 必需)</li>
<li>serverTimezone:指定时区,避免时间戳转换问题</li>
</ul>
<ol start="4">
<li>验证网络连通性<br>
从 DolphinScheduler 服务器测试与 MySQL 服务器的网络连接:</li>
</ol>
<pre><code>ping <数据库IP>
telnet <数据库IP> 3306
</code></pre>
<ol start="5">
<li>检查 MySQL 认证插件<br>
若使用 MySQL 8.x,确认 root 用户的认证插件为 mysql_native_password:</li>
</ol>
<pre><code>SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
-- 若插件为 caching_sha2_password,修改为 mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
</code></pre>
<ol start="6">
<li>临时禁用防火墙或安全组<br>
若存在防火墙,临时关闭以验证是否为网络限制导致:</li>
</ol>
<pre><code># CentOS/RHEL
systemctl stop firewalld
# Ubuntu/Debian
ufw disable
</code></pre>
<p><strong>注意</strong>:完成测试后务必重新启用防火墙,并配置允许访问的规则。</p>
<h3 id="常见错误处理">常见错误处理</h3>
<ul>
<li>错误:Loading class 'com.mysql.jdbc.Driver'
<ul>
<li>原因:使用了过时的驱动类名。</li>
<li>解决:升级到 MySQL Connector/J 8.0+,并确保 lib/ 目录中没有旧版驱动。</li>
</ul>
</li>
<li>错误:Public Key Retrieval is not allowed
<ul>
<li>原因:MySQL 8.x 默认需要公钥检索,但连接 URL 未配置。</li>
<li>解决:在 URL 中添加 allowPublicKeyRetrieval=true。</li>
</ul>
</li>
<li>错误:The server time zone value 'XXX' is unrecognized
<ul>
<li>原因:时区配置不正确。</li>
<li>解决:在 URL 中添加 serverTimezone=Asia/Shanghai(根据实际时区调整)。</li>
</ul>
</li>
</ul>
<h3 id="验证修复结果">验证修复结果</h3>
<ol>
<li>重启 DolphinScheduler 服务:</li>
</ol>
<pre><code>sh bin/stop-all.sh
sh bin/start-all.sh
</code></pre>
<p>重新执行数据库初始化脚本:</p>
<pre><code>sh script/create-dolphinscheduler.sh
</code></pre>
<h3 id="预防措施">预防措施</h3>
<ol>
<li>在安装前,确保 MySQL 版本与 DolphinScheduler 官方文档推荐版本兼容。</li>
<li>使用专用数据库用户(而非 root)进行应用访问,并限制其权限范围。</li>
<li>定期备份数据库,避免数据丢失。</li>
<li>生产环境建议启用 SSL 加密,并配置更严格的网络访问策略。</li>
</ol>
<h3 id="参考文档">参考文档</h3>
<ul>
<li>DolphinScheduler 官方安装文档</li>
<li>MySQL Connector/J 下载</li>
<li>MySQL 用户权限管理</li>
</ul>
<p>原文链接:https://blog.csdn.net/timonium/article/details/147952568</p>
<blockquote>
<p>本文由 白鲸开源 提供发布支持!</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/DolphinScheduler/p/18923976
頁:
[1]