实战:安装ambari轻松适配mysql8

安装ambari轻松适配mysql8

在使用 ambari-server setup --jdbc-db=mysql --jdbc-driver=/path/to/mysql/com.mysql.jdbc.Driver 命令进行配置时,这里主要是配置 Ambari 服务器以使用 MySQL 作为数据库并指定 MySQL JDBC 驱动程序的路径。以下是详细的操作步骤:

操作准备

  1. 下载并安装 MySQL JDBC 驱动程序

    MySQL Connector/J 官方下载页面 下载适合的 JDBC 驱动程序(通常是 .tar.gz.zip 文件)。

    解压下载的文件:

    bash 复制代码
    tar -xzvf mysql-connector-java-8.0.23.tar.gz

    将解压后的 .jar 文件保存到一个明确的路径,例如 /usr/share/java/

    bash 复制代码
    sudo cp mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar /usr/share/java/

配置 Ambari 使用 MySQL

  1. 设置 JDBC 驱动

    使用以下命令设置 JDBC 驱动程序:

    bash 复制代码
    ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-8.0.23.jar

MySQL 数据库配置

在继续之前,请确保你已经配置好 MySQL 数据库和用户:

  1. 登录 MySQL

    css 复制代码
    mysql -u root -p
  2. 创建 Ambari 数据库和用户

    sql 复制代码
    CREATE DATABASE ambari;
    CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari_password';
    GRANT ALL PRIVILEGES ON ambari.* TO 'ambari'@'localhost';
    FLUSH PRIVILEGES;

安装和配置 Ambari Server

  1. 初始化设置

    运行以下命令进行 Ambari Server 的初次设置:

    arduino 复制代码
    sudo ambari-server setup

    进行提示回复:

    • 选择数据库:1. PostgreSQL 2. Oracle 3. MySQL 4. Sodium :选择 3 (MySQL)
    • Database hostname (localhost) :输入 MySQL 主机名(通常是 localhost 或服务器 IP 地址)
    • Port (3306) :默认即可
    • Database name (ambari) :默认或自定义(这里使用刚创建的 ambari 数据库)
    • Username (ambari) :默认或自定义(这里使用刚创建的 ambari 用户)
    • Enter Database Password (****) :输入刚设置的数据库用户密码
  2. 启动 Ambari Server

    配置完成后,启动 Ambari Server:

    sql 复制代码
    sudo ambari-server start
  3. 检查 Ambari Server 状态

    确保 Ambari Server 正常启动:

    lua 复制代码
    sudo ambari-server status

关键步骤总结

  1. 下载并保存 JDBC 驱动程序
  2. 配置 MySQL 数据库和用户
  3. 使用 ambari-server setup 命令配置 Ambari Server
  4. 启动并检查 Ambari Server 状态

完整示例

以下是一个完整的示例,展示了从下载 JDBC 驱动到启动 Ambari Server 的所有步骤:

shell 复制代码
# 下载并解压 MySQL JDBC 驱动程序
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.23.tar.gz
tar -xzvf mysql-connector-java-8.0.23.tar.gz

# 复制 JDBC 驱动到适当目录
sudo cp mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar /usr/share/java/

# 配置 Ambari 使用 MySQL JDBC 驱动
sudo ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-8.0.23.jar

# 设置 MySQL 数据库和用户
mysql -u root -p -e "
CREATE DATABASE ambari;
CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari_password';
GRANT ALL PRIVILEGES ON ambari.* TO 'ambari'@'localhost';
FLUSH PRIVILEGES;
"

# 初始化 Ambari Server 设置
sudo ambari-server setup

# 根据提示输入相应内容
# 选择 MySQL 为数据库,并输入数据库连接详
# 启动 Ambari Server
sudo ambari-server start

# 检查 Ambari Server 状态
sudo ambari-server status

报错------mysql8数据库初始化错误

sql 复制代码
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups ( group_id INTEGER, principal_id BIGINT NOT NULL, group_name VARCHA' at line 1 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups (group_id), CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFEREN' at line 6

解决

修改初始化sql文件/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql SQL 语句中遇到了语法错误,可能是因为所使用的关键字 "groups" 在 MySQL 中是一个保留字。使用保留字作为表名或列名时,需要使用反引号(``)将其括起来。以下是经过改进的 SQL 语句:

sql 复制代码
CREATE TABLE `groups` (
  group_id INTEGER PRIMARY KEY,
  principal_id BIGINT NOT NULL,
  group_name VARCHAR(255) NOT NULL
);

CREATE TABLE members (
  member_id INTEGER PRIMARY KEY,
  user_id BIGINT NOT NULL,
  group_id INTEGER NOT NULL,
  CONSTRAINT FK_members_group_id FOREIGN KEY (`group_id`) REFERENCES `groups`(`group_id`),
  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users(user_id)
);

此外,假如你还需要创建更多的表或有其他类似的问题,请确保在引用表名、列名时,合理使用反引号,特别是在使用保留字时。

具体步骤说明

  1. 创建 groups :表名 groups 是 MySQL 的保留字,为了避免语法错误,我们用反引号括起来。

    sql 复制代码
    sql
    CREATE TABLE `groups` (
      group_id INTEGER PRIMARY KEY,
      principal_id BIGINT NOT NULL,
      group_name VARCHAR(255) NOT NULL
    );
  2. 创建 members :同样,在引用 groups 表时也使用反引号。

    sql 复制代码
    CREATE TABLE members (
      member_id INTEGER PRIMARY KEY,
      user_id BIGINT NOT NULL,
      group_id INTEGER NOT NULL,
      CONSTRAINT FK_members_group_id FOREIGN KEY (`group_id`) REFERENCES `groups`(`group_id`),
      CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users(user_id)
    );

检查保留字

如果你经常遇到这样的错误,可以参考 MySQL 的官方文档和保留字列表,确保你的表名、列名没有冲突。以下是一些常见的 MySQL 保留字:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • FROM
  • WHERE
  • JOIN
  • GROUP
  • ORDER
  • BY
  • LIMIT
  • HAVING
  • AS
  • IN
  • ON
  • TABLE
  • USER

修改初始化sql

用于创建两个表 groupsmembers,并添加适当的主键、外键和唯一约束。

确保以下几点:

  1. 数据库中不存在重复的表名或冲突的键名。
  2. 引用的外键表(例如,adminprincipalusers 表)已经存在,并且对应的 principal_iduser_id 列存在且结构正确。

表创建脚本(修正和优化)

sql 复制代码
-- 创建 groups 表
CREATE TABLE `groups` (
  `group_id` INTEGER PRIMARY KEY,
  principal_id BIGINT NOT NULL,
  group_name VARCHAR(255) NOT NULL,
  ldap_group INTEGER NOT NULL DEFAULT 0,
  group_type VARCHAR(255) NOT NULL DEFAULT 'LOCAL',
  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
  CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group)
);

-- 创建 members 表
CREATE TABLE members (
  member_id INTEGER PRIMARY KEY,
  `group_id` INTEGER NOT NULL,
  user_id INTEGER NOT NULL,
  CONSTRAINT FK_members_group_id FOREIGN KEY (`group_id`) REFERENCES `groups`(`group_id`),
  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id),
  CONSTRAINT UNQ_members_0 UNIQUE (`group_id`, user_id)
);

注意事项

  1. 反引号使用: 在SQL中,反引号可以用于避免与MySQL保留字的冲突。尽量为表名和列名使用反引号。

  2. 外键引用检查确保存在被引用的表和列 ,例如 adminprincipal(principal_id)users(user_id)

    sql 复制代码
    sql
    CREATE TABLE adminprincipal (
        principal_id BIGINT PRIMARY KEY,
        -- 其他列 ...
    );
    
    CREATE TABLE users (
        user_id INTEGER PRIMARY KEY,
        -- 其他列 ...
    );
  3. 数据类型一致性 : 确保外键引用的数据类型和长度与其主键或唯一键匹配。例如,group_idprincipal_id 数据类型需要在所有相关表中一致。

总结

通过这些步骤,你应该能够成功配置 Ambari 使用 MySQL 作为数据库,并启动 Ambari Server。如果遇到任何问题,请检查 Ambari 和 MySQL 日志,获取更多详细的错误信息并进行相应排查。SQL 语法错误是由于使用了保留字作为表名。通过使用反引号将保留字括起来,能够避免语法冲突。如果错误仍然存在,请仔细检查你的 SQL 语句,并确保表结构清晰、引用关系正确。通过合理地设计数据库模式和遵循命名规范,可以避免大多数的语法错误。

相关推荐
枫叶林FYL21 小时前
Explore with Long-term Memory:基于多模态大语言模型与强化学习的具身探索框架
大数据·人工智能·语言模型
努力攻坚操作系统21 小时前
ClickHouse详细教程
大数据·数据库·clickhouse
财经资讯数据_灵砚智能21 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月28日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能
admin and root21 小时前
Blade站点的渗透测试到MySQL数据库权限接管
数据库·mysql·web安全·渗透测试·移动安全·培训·src赏金
侃谈科技圈21 小时前
践行智驾普惠,魔视智能以全栈自研技术重构量产智驾价值体系
大数据·重构
Bechamz21 小时前
大数据开发学习Day44
大数据·学习
多米哇卡21 小时前
Figure 03 实测 200 小时稳定作业,人形机器人商业化落地提速
大数据·人工智能·机器人
大帅点兵21 小时前
设计一个金融交易监控系统
大数据·clickhouse·flink·spark·kafka·hbase
189228048611 天前
NQ486固态MT29F16T08GSLDHL8-QM:D
大数据·人工智能·科技·microsoft·缓存
Elastic 中国社区官方博客1 天前
Elasticsearch:跨数据库与业务系统进行搜索
大数据·数据库·人工智能·elasticsearch·搜索引擎·全文检索