Step8—MariaDB 初始化
# Step8—MariaDB 初始化
Ambari Server 后面会把元数据写入 MariaDB,所以数据库要提前准备好。这一步只处理 MariaDB 服务本身:安装、字符集、监听地址、root 密码和远程连通验证。Ambari 专用库和专用用户放到 Step9 再创建。
本文只在核心节点 hadoop1.test.com 初始化 MariaDB,工作节点只做连接验证。
# 安装 MariaDB
如果 Step1 已经安装过,可以直接跳到下一节。
sudo dnf -y install MariaDB-server MariaDB-client || \
sudo yum -y install MariaDB-server MariaDB-client
sudo systemctl enable --now mariadb
2
3
4
sudo apt update
sudo apt install -y mariadb-server mariadb-client
sudo systemctl enable --now mariadb
2
3
4
// Make sure to add code blocks to your code group
# 写入 MariaDB 配置
不要直接覆盖系统主配置文件。RHEL 系我建议写到 /etc/my.cnf.d/99-ambari.cnf,Ubuntu 写到 /etc/mysql/mariadb.conf.d/99-ambari.cnf。
sudo mkdir -p /etc/my.cnf.d
sudo tee /etc/my.cnf.d/99-ambari.cnf >/dev/null <<'EOF'
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-storage-engine=InnoDB
innodb_file_per_table=1
bind-address=0.0.0.0
max_connections=500
[mysqldump]
default-character-set=utf8mb4
EOF
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo mkdir -p /etc/mysql/mariadb.conf.d
sudo tee /etc/mysql/mariadb.conf.d/99-ambari.cnf >/dev/null <<'EOF'
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-storage-engine=InnoDB
innodb_file_per_table=1
bind-address=0.0.0.0
max_connections=500
[mysqldump]
default-character-set=utf8mb4
EOF
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Make sure to add code blocks to your code group

提示
bind-address=0.0.0.0 是为了让工作节点能连核心节点数据库。生产环境更建议配合防火墙和安全组限制来源,只允许集群内网段访问 3306。
可选的 InnoDB 调优项
如果数据库节点内存充足,可以再按机器规格调整 innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size 等参数。不要直接照抄固定值,2C4G、8C32G 和独立数据库服务器的参数不应该一样。新环境先保证字符集、监听地址和服务稳定,再做性能参数。
# 初始化数据目录
大多数发行版安装 mariadb-server 后会自动初始化数据目录。如果 /var/lib/mysql/mysql 不存在,再手动初始化:
if [ ! -d /var/lib/mysql/mysql ]; then
if command -v mariadb-install-db >/dev/null 2>&1; then
sudo mariadb-install-db --user=mysql --datadir=/var/lib/mysql
else
sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql
fi
fi
2
3
4
5
6
7
# 启动并检查 MariaDB
sudo systemctl restart mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb --no-pager
2
3
确认 3306 监听和字符集:
ss -lntp | grep ':3306 '
sudo mariadb --protocol=socket -uroot -e "SHOW VARIABLES LIKE 'character_set_server';"
2
能看到 0.0.0.0:3306 和 utf8mb4,说明基础配置已经生效。
# 初始化 root 密码
为了让教程更容易跟着跑,本文演示环境统一使用:
| 用户名 | 密码 |
|---|---|
root | root |
注意
这里的 root/root 只是为了演示和快速跑通安装流程。生产环境请改成高复杂度密码,并按公司的安全规范限制数据库来源地址。
如果当前 root 可以通过 socket 登录,执行:
sudo mariadb --protocol=socket -uroot <<'EOF'
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db LIKE 'test\\_%';
CREATE USER IF NOT EXISTS 'root'@'localhost' IDENTIFIED BY 'root';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'root';
ALTER USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
如果当前 root 已经有密码,用密码登录后执行同样的清理和 ALTER USER:
mysql -uroot -p
# 放通 3306
演示环境可以直接放通 3306。生产环境建议只允许集群网段访问,或者通过安全组限制来源。
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2
sudo ufw allow 3306/tcp
sudo ufw reload
2
// Make sure to add code blocks to your code group
如果没有启用防火墙,可以跳过;云主机仍然要检查安全组。
# 验证 root 连接
先在 hadoop1.test.com 本机验证:
mysql -uroot -p -e 'SELECT USER(), VERSION();'
密码输入 root。
再到 hadoop2.test.com 和 hadoop3.test.com 远程验证:
mysql -h hadoop1.test.com -uroot -p -e 'SELECT 1 AS ok;'
密码同样输入 root。

返回 1 就说明端口、监听地址和 root 授权都正常。
# 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 只能本机登录,远程失败 | bind-address 仍是 127.0.0.1 或防火墙未放通 | 改配置后重启,并检查 3306 规则 |
| 远程提示 Access denied | 'root'@'%' 没授权或密码不是 root | 重新执行 root 授权 SQL |
| 3306 没监听 | 服务未启动或配置错误 | 看 journalctl -u mariadb |
| socket 登录失败 | root 认证方式或密码已被改过 | 使用 mysql -uroot -p 登录 |
| 工作节点无 mysql 命令 | 没装客户端 | 安装 MariaDB-client 或 mariadb-client |
MariaDB 远程验证通过后,就可以给 Ambari Server 创建数据库和用户。