实战:安装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 语句,并确保表结构清晰、引用关系正确。通过合理地设计数据库模式和遵循命名规范,可以避免大多数的语法错误。

相关推荐
XiaoH2335 分钟前
培训机构Day15
sql·mysql
ThisIsClark26 分钟前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
Python之栈1 小时前
【无标题】
数据库·python·mysql
szxinmai主板定制专家2 小时前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
亦世凡华、2 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
TGB-Earnest3 小时前
【py脚本+logstash+es实现自动化检测工具】
大数据·elasticsearch·自动化
大圣数据星球5 小时前
Fluss 写入数据湖实战
大数据·设计模式·flink
suweijie7685 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
Data跳动11 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark