【Ambari Plus】Step8—MariaDB 初始化

Step8---MariaDB 初始化

Ambari Server 后面会把元数据写入 MariaDB,所以数据库要提前准备好。这一步只处理 MariaDB 服务本身:安装、字符集、监听地址、root 密码和远程连通验证。Ambari 专用库和专用用户放到 Step9 再创建。

本文只在核心节点 hadoop1.test.com 初始化 MariaDB,工作节点只做连接验证。

安装 MariaDB

如果 Step1 已经安装过,可以直接跳到下一节。

bash 复制代码
sudo dnf -y install MariaDB-server MariaDB-client || \
sudo yum -y install MariaDB-server MariaDB-client

sudo systemctl enable --now mariadb
bash 复制代码
sudo apt update
sudo apt install -y mariadb-server mariadb-client

sudo systemctl enable --now mariadb

写入 MariaDB 配置

不要直接覆盖系统主配置文件。RHEL 系我建议写到 /etc/my.cnf.d/99-ambari.cnf,Ubuntu 写到 /etc/mysql/mariadb.conf.d/99-ambari.cnf

bash 复制代码
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
bash 复制代码
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

::: tip

bind-address=0.0.0.0 是为了让工作节点能连核心节点数据库。生产环境更建议配合防火墙和安全组限制来源,只允许集群内网段访问 3306。

:::

::: details 可选的 InnoDB 调优项

如果数据库节点内存充足,可以再按机器规格调整 innodb_buffer_pool_sizeinnodb_log_file_sizeinnodb_log_buffer_size 等参数。不要直接照抄固定值,2C4G、8C32G 和独立数据库服务器的参数不应该一样。新环境先保证字符集、监听地址和服务稳定,再做性能参数。

:::

初始化数据目录

大多数发行版安装 mariadb-server 后会自动初始化数据目录。如果 /var/lib/mysql/mysql 不存在,再手动初始化:

bash 复制代码
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

启动并检查 MariaDB

bash 复制代码
sudo systemctl restart mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb --no-pager

确认 3306 监听和字符集:

bash 复制代码
ss -lntp | grep ':3306 '
sudo mariadb --protocol=socket -uroot -e "SHOW VARIABLES LIKE 'character_set_server';"

能看到 0.0.0.0:3306utf8mb4,说明基础配置已经生效。

初始化 root 密码

为了让教程更容易跟着跑,本文演示环境统一使用:

用户名 密码
root root

::: warning

这里的 root/root 只是为了演示和快速跑通安装流程。生产环境请改成高复杂度密码,并按公司的安全规范限制数据库来源地址。

:::

如果当前 root 可以通过 socket 登录,执行:

bash 复制代码
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

如果当前 root 已经有密码,用密码登录后执行同样的清理和 ALTER USER

bash 复制代码
mysql -uroot -p

放通 3306

演示环境可以直接放通 3306。生产环境建议只允许集群网段访问,或者通过安全组限制来源。

bash 复制代码
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
bash 复制代码
sudo ufw allow 3306/tcp
sudo ufw reload

如果没有启用防火墙,可以跳过;云主机仍然要检查安全组。

验证 root 连接

先在 hadoop1.test.com 本机验证:

bash 复制代码
mysql -uroot -p -e 'SELECT USER(), VERSION();'

密码输入 root

再到 hadoop2.test.comhadoop3.test.com 远程验证:

bash 复制代码
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-clientmariadb-client

MariaDB 远程验证通过后,就可以给 Ambari Server 创建数据库和用户。