安装ambari轻松适配mysql8
在使用 ambari-server setup --jdbc-db=mysql --jdbc-driver=/path/to/mysql/com.mysql.jdbc.Driver
命令进行配置时,这里主要是配置 Ambari 服务器以使用 MySQL 作为数据库并指定 MySQL JDBC 驱动程序的路径。以下是详细的操作步骤:
操作准备
-
下载并安装 MySQL JDBC 驱动程序:
从 MySQL Connector/J 官方下载页面 下载适合的 JDBC 驱动程序(通常是
.tar.gz
或.zip
文件)。解压下载的文件:
bashtar -xzvf mysql-connector-java-8.0.23.tar.gz
将解压后的
.jar
文件保存到一个明确的路径,例如/usr/share/java/
:bashsudo cp mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar /usr/share/java/
配置 Ambari 使用 MySQL
-
设置 JDBC 驱动:
使用以下命令设置 JDBC 驱动程序:
bashambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-8.0.23.jar
MySQL 数据库配置
在继续之前,请确保你已经配置好 MySQL 数据库和用户:
-
登录 MySQL:
cssmysql -u root -p
-
创建 Ambari 数据库和用户:
sqlCREATE DATABASE ambari; CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari_password'; GRANT ALL PRIVILEGES ON ambari.* TO 'ambari'@'localhost'; FLUSH PRIVILEGES;
安装和配置 Ambari Server
-
初始化设置:
运行以下命令进行 Ambari Server 的初次设置:
arduinosudo 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 (****) :输入刚设置的数据库用户密码
- 选择数据库:[1. PostgreSQL 2. Oracle 3. MySQL 4. Sodium] :选择
-
启动 Ambari Server:
配置完成后,启动 Ambari Server:
sqlsudo ambari-server start
-
检查 Ambari Server 状态:
确保 Ambari Server 正常启动:
luasudo ambari-server status
关键步骤总结
- 下载并保存 JDBC 驱动程序。
- 配置 MySQL 数据库和用户。
- 使用
ambari-server setup
命令配置 Ambari Server。 - 启动并检查 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)
);
此外,假如你还需要创建更多的表或有其他类似的问题,请确保在引用表名、列名时,合理使用反引号,特别是在使用保留字时。
具体步骤说明
-
创建
groups
表 :表名groups
是 MySQL 的保留字,为了避免语法错误,我们用反引号括起来。sqlsql CREATE TABLE `groups` ( group_id INTEGER PRIMARY KEY, principal_id BIGINT NOT NULL, group_name VARCHAR(255) NOT NULL );
-
创建
members
表 :同样,在引用groups
表时也使用反引号。sqlCREATE 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
用于创建两个表 groups
和 members
,并添加适当的主键、外键和唯一约束。
确保以下几点:
- 数据库中不存在重复的表名或冲突的键名。
- 引用的外键表(例如,
adminprincipal
和users
表)已经存在,并且对应的principal_id
和user_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)
);
注意事项
-
反引号使用: 在SQL中,反引号可以用于避免与MySQL保留字的冲突。尽量为表名和列名使用反引号。
-
外键引用检查 : 确保存在被引用的表和列 ,例如
adminprincipal(principal_id)
和users(user_id)
:sqlsql CREATE TABLE adminprincipal ( principal_id BIGINT PRIMARY KEY, -- 其他列 ... ); CREATE TABLE users ( user_id INTEGER PRIMARY KEY, -- 其他列 ... );
-
数据类型一致性 : 确保外键引用的数据类型和长度与其主键或唯一键匹配。例如,
group_id
和principal_id
数据类型需要在所有相关表中一致。
总结
通过这些步骤,你应该能够成功配置 Ambari 使用 MySQL 作为数据库,并启动 Ambari Server。如果遇到任何问题,请检查 Ambari 和 MySQL 日志,获取更多详细的错误信息并进行相应排查。SQL 语法错误是由于使用了保留字作为表名。通过使用反引号将保留字括起来,能够避免语法冲突。如果错误仍然存在,请仔细检查你的 SQL 语句,并确保表结构清晰、引用关系正确。通过合理地设计数据库模式和遵循命名规范,可以避免大多数的语法错误。