CDH初始化scm_prepare_database.sh数据库遇到的问题

本文档指导解决Cloudera Manager在配置数据库过程中遇到的问题,确保数据库表的纯净状态,避免用户权限表中出现额外记录导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在设置 Cloudera Manager 数据库
格式:
在这里插入图片描述
如果报错
(1)数据库中必须没有表,用户权限表中没有增加记录

<think>首先,用户的问题是:在CDH安装Cloudera Manager时,初始化数据库失败,出现MySQL主键校验不通过的问题。用户希望找到解决方法。 我需要参考提供的引用内容: - 引用[1]:提到在启动服务时可能因权限问题报错,需要检查日志文件。 - 引用[2]:显示Hue连接MySQL数据库失败的错误日志片段。 - 引用[3]:描述了安装CDH时创建目录、设置权限和初始化数据库的命令。 - 引用[4]:提到在Agent节点配置server_host。 用户的特定问题是关于MySQL主键校验错误。这通常发生在数据库初始化过程中,当MySQL的sql_mode设置导致严格模式下的主键约束问题。 在CDH安装中,初始化数据库使用脚本如`scm_prepare_database.sh`,这可能在引用[3]中提到过:`/opt/cm-5.6.0/share/cmf/schema/scm_prepare_database.sh`。 MySQL主键校验错误可能由于MySQL的sql_mode包含NO_ZERO_IN_DATE或NO_ZERO_DATE等严格模式设置。解决方法通常是调整MySQL的sql_mode。 现在,构建回答: 1. **确认问题**:描述MySQL主键校验错误的原因。 2. **提供解决方案**:建议修改MySQL的sql_mode。 3. **参考引用**:在适当的地方添加引用标识。 4. **结构清晰**:分步解释。 5. **生成相关问题**:在最后添加相关问题。 回答结构: - 引言:简述问题。 - 原因分析:解释为什么会出现主键校验错误。 - 解决方案:分步指导如何修改sql_mode。 - 验证步骤:如何验证问题是否解决。 - 相关问题:生成相关问题。 使用中文回答。 确保LaTeX格式正确:如果涉及数学达式,使用$...$或$$...$$,但在这个问题中可能不需要,因为它是数据库相关。 添加引用: - 引用[3]提到初始化数据库的命令,可以引用。 - 引用[1]提到检查日志,可以用于错误诊断。 最终,生成相关问题。</think>### CDH安装Cloudera Manager时MySQL主键校验错误的解决方案 在安装CDH时,使用Cloudera Manager初始化数据库(如MySQL)时,如果出现“主键校验失败”错误,这通常是由于MySQL的严格模式(strict mode)设置导致的。具体来说,MySQL的`sql_mode`参数可能包含`NO_ZERO_IN_DATE`或`NO_ZERO_DATE`等选项,这些选项会阻止某些日期字段(如`0000-00-00`)作为主键值,而Cloudera Manager的初始化脚本可能尝试使用此类默认值[^3]。以下是逐步解决方案,基于常见故障场景和最佳实践。 #### 问题原因分析 - **核心原因**:MySQL的`sql_mode`设置为严格模式(strict mode),导致数据库初始化脚本(如`scm_prepare_database.sh`)在创建系统时,无法处理某些默认值(如日期或零值),从而引发主键约束错误[^3]。 - **典型错误日志**:在`/var/log/cloudera-scm-server`或`/var/log/mysql`目录下,您可能看到类似错误: ``` ERROR: Failed to initialize database: ERROR 1067 (42000) at line 25: Invalid default value for 'created_time' ``` 这示日期字段的默认值违反了MySQL的校验规则[^1][^2]。 #### 解决方案:修改MySQL的sql_mode 以下步骤需以root用户或具有sudo权限的用户执行。操作前,请备份MySQL配置文件(如`/etc/my.cnf`或`/etc/mysql/my.cnf`)。 1. **登录MySQL并检查当前sql_mode**: ```bash mysql -u root -p # 输入密码后进入MySQL命令行 ``` 在MySQL命令行中运行: ```sql SELECT @@GLOBAL.sql_mode; ``` 如果输出包含`NO_ZERO_IN_DATE`、`NO_ZERO_DATE`或`STRICT_TRANS_TABLES`,说明严格模式已启用。 2. **临时修改sql_mode(立即生效,重启后失效)**: 在MySQL命令行中执行: ```sql SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; ``` 此命令移除了`NO_ZERO_IN_DATE`和`NO_ZERO_DATE`选项,允许零值日期作为主键默认值[^3]。 3. **永久修改sql_mode(修改配置文件)**: - 编辑MySQL配置文件: ```bash sudo vi /etc/my.cnf # 或 /etc/mysql/my.cnf,具体路径根据系统而定 ``` - 在`[mysqld]`部分添加或修改以下行: ```ini sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` - 保存文件并重启MySQL服务: ```bash sudo systemctl restart mysqld # 或 sudo service mysql restart ``` 4. **重新运行Cloudera Manager初始化脚本**: - 使用引用[3]中提到的脚本,但确保指定正确的MySQL参数: ```bash /opt/cm-<version>/share/cmf/schema/scm_prepare_database.sh mysql scm -h<数据库主机> -u<用户名> -p<密码> --scm-host <CM Server主机名> ``` 例如: ```bash /opt/cm-5.6.0/share/cmf/schema/scm_prepare_database.sh mysql scm -hlocalhost -uroot -proot --scm-host cm-server ``` - 如果脚本执行成功,您将看到`All done, your SCM database is configured!`消息[^3]。 5. **验证和错误排查**: - **检查日志**:如果仍失败,查看`/var/log/cloudera-scm-server/cloudera-scm-server.log`和`/var/log/mysql/error.log`,确认错误是否解决[^1][^2]。 - **权限问题**:确保运行脚本的用户(如`cloudera-scm`)对MySQL有足够权限(例如`GRANT ALL PRIVILEGES ON scm.* TO '用户'@'主机';`)[^4]。 - **数据库兼容性**:MySQL版本需为5.7或更高(CDH 5.x支持),避免使用MySQL 8.x的默认严格模式。 #### 注意事项 - **安权衡**:修改`sql_mode`会降低MySQL的严格性,可能增加数据不一致风险。建议在初始化后恢复严格模式(如果业务允许)。 - **环境一致性**:确保所有节点(如CM Server和Agent)的MySQL配置相同,避免Agent节点因`server_host`设置错误导致连接问题[^4]。 - **备份优先**:操作前备份数据库和配置文件,防止意外损坏。 通过以上步骤,大多数主键校验错误问题可解决。如果问题持续,提供具体错误日志以进一步诊断[^1][^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值