Ambari 乱码问题处理及解决方案
# 一、Ambari的乱码问题处理
在部署Ambari集群时,可能会遇到乱码问题,尤其是在后台操作中。乱码问题通常表现在界面上的中文内容未能正确显示,取而代之的是一串乱码字符。这种问题会影响系统的可用性和用户体验,因此需要及时解决。
# 1、乱码问题分析
# 1.1 乱码出现的情况
在使用Ambari时,乱码现象通常在以下几个地方出现:
- 流程进度条:整个页面刷新后,所有的进度条文本显示为乱码。
- 部分中文条目乱码:部分条目能够正常显示中文,但部分条目则显示乱码字符。
溯源思路:
从接口请求开始就能看到乱码,进一步分析发现,数据库中存储的中文数据也显示为乱码。
通过数据库层面的检查,确认了中文数据存储过程中出现了乱码。
提示
出现乱码的根本原因是数据库创建时没有指定字符集为 utf-8,这使得中文字符无法正确存储和显示。
# 1.2 乱码问题出现的原因
乱码问题的根本原因在于数据库创建时,未正确配置字符集。通常情况下,数据库默认使用的是系统字符集,而这个字符集可能不支持存储中文字符,导致乱码。
警告
当数据库表没有指定utf-8字符集时,中文字符在存储过程中会被错误编码,从而导致乱码。
此外,低版本的数据库(如MariaDB 5)也可能会导致此类问题。由于这些版本的数据库不完全支持utf8mb4字符集,可能会在存储中文字符时发生错误。
溯源:
默认的MariaDB版本可能在创建数据库表时出现如下错误:
[42000][1071] (conn=5) Specified key was too long; max key length is 767 bytes
这种情况通常发生在使用utf8mb4字符集时,尤其是在数据库版本较低时。
# 1.3 解决乱码的方案
解决乱码问题的关键在于更换数据库版本,或者修改数据库的字符集设置。以下是推荐的解决方案:
# 1.3.1 使用MariaDB 10版本
对于MariaDB数据库,可以通过升级到10版本来解决字符集问题。MariaDB 10版本对utf8mb4字符集提供了更好的支持,能够避免低版本数据库的问题。
# 1.3.1.1 配置YUM源
首先,需要配置MariaDB 10的YUM源,确保能够从可靠的镜像源安装最新版本的MariaDB。
vim /etc/yum.repos.d/Mariadb.repo
# MariaDB 10.6 CentOS repository list - created 2024-07-04 11:14 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.neusoft.edu.cn/mariadb/yum/10.6/centos/$releasever/$basearch
module_hotfixes = 1
gpgkey = https://mirrors.neusoft.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
2
3
4
5
6
7
8
# 处理repo源
yum clean all && yum makecache
# 安装MariaDB
yum install -y MariaDB-server MariaDB-client
2
3
4
# 1.3.1.2 调整数据库配置
调整MariaDB的配置文件my.cnf
,确保字符集使用utf8mb4,这可以大大提升中文字符的存储能力。
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
2
3
4
5
6
7
# 1.3.1.3 初始化数据库
初始化数据库并设置好root用户的密码,确保数据库的安全性:
# 清理数据文件
rm -rf /var/lib/mysql/* ;
# 初始化MariaDB
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql;
# 杀掉现有的MariaDB进程
kill -9 `ss -anp | grep 3306 | grep mariadbd | awk -F '[=,]' '{print $3}' | uniq`;
# 启动MariaDB
systemctl restart mariadb
2
3
4
5
6
7
8
9
# 1.3.1.4 创建数据库
通过SQL命令创建一个新的数据库,并设置字符集为utf8mb4:
mysql -uroot
CREATE DATABASE ambari CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE ambari;
CREATE USER 'ambari'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
FLUSH PRIVILEGES;
2
3
4
5
6
注意: 在设置数据库时,要确保字符集和排序规则正确配置,以避免乱码问题。
# 1.4 乱码问题验证
在完成数据库配置后,验证乱码问题是否已经得到解决。可以通过检查数据库中的数据来确认中文是否正确存储。
注意
在完成数据库字符集调整后,记得重新启动MariaDB并清理缓存,以确保所有配置生效。