Step8—MariaDB 初始化
Ambari Server 后面会把元数据写入 MariaDB,所以数据库要提前准备好。这一步只处理 MariaDB 服务本身:安装、字符集、监听地址、root 密码和远程连通验证。Ambari 专用库和专用用户放到 Step9 再创建。
本文只在核心节点hadoop1.test.com初始化 MariaDB,工作节点只做连接验证。
安装 MariaDB
如果 Step1 已经安装过,可以直接跳到下一节。
sudodnf-yinstallMariaDB-server MariaDB-client||\sudoyum-yinstallMariaDB-server MariaDB-clientsudosystemctlenable--nowmariadbsudoaptupdatesudoaptinstall-ymariadb-server mariadb-clientsudosystemctlenable--nowmariadb写入 MariaDB 配置
不要直接覆盖系统主配置文件。RHEL 系我建议写到/etc/my.cnf.d/99-ambari.cnf,Ubuntu 写到/etc/mysql/mariadb.conf.d/99-ambari.cnf。
sudomkdir-p/etc/my.cnf.dsudotee/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 EOFsudomkdir-p/etc/mysql/mariadb.conf.dsudotee/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::: tipbind-address=0.0.0.0是为了让工作节点能连核心节点数据库。生产环境更建议配合防火墙和安全组限制来源,只允许集群内网段访问 3306。
:::
::: details 可选的 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];thenifcommand-vmariadb-install-db>/dev/null2>&1;thensudomariadb-install-db--user=mysql--datadir=/var/lib/mysqlelsesudomysql_install_db--user=mysql--datadir=/var/lib/mysqlfifi启动并检查 MariaDB
sudosystemctl restart mariadbsudosystemctlenablemariadbsudosystemctl status mariadb --no-pager确认 3306 监听和字符集:
ss-lntp|grep':3306 'sudomariadb--protocol=socket-uroot-e"SHOW VARIABLES LIKE 'character_set_server';"能看到0.0.0.0:3306和utf8mb4,说明基础配置已经生效。
初始化 root 密码
为了让教程更容易跟着跑,本文演示环境统一使用:
| 用户名 | 密码 |
|---|---|
root | root |
::: warning
这里的root/root只是为了演示和快速跑通安装流程。生产环境请改成高复杂度密码,并按公司的安全规范限制数据库来源地址。
:::
如果当前 root 可以通过 socket 登录,执行:
sudomariadb--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:
mysql-uroot-p放通 3306
演示环境可以直接放通 3306。生产环境建议只允许集群网段访问,或者通过安全组限制来源。
sudofirewall-cmd --add-port=3306/tcp--permanentsudofirewall-cmd--reloadsudoufw allow3306/tcpsudoufw reload如果没有启用防火墙,可以跳过;云主机仍然要检查安全组。
验证 root 连接
先在hadoop1.test.com本机验证:
mysql-uroot-p-e'SELECT USER(), VERSION();'密码输入root。
再到hadoop2.test.com和hadoop3.test.com远程验证:
mysql-hhadoop1.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 创建数据库和用户。