原因:直接从官方下载的zabbix_appliance镜像搭建的监控平台运行一段时间后,发现经常性的mysql崩溃,经排查发现是它的zabbix数据库分区只有4G。
由于监控的数据量太大导致分区爆满,引发mysql崩溃无法启动的故障,只好想办法扩容zabbix数据库所在的空间。
经过各种尝试后使用如下方法成功解决问题。
思路:虚拟机上添加一块硬盘,创建新分区并挂载到扩容目录,迁移mysql的数据库目录到扩容目录,修改mysql、php和zabbix的配置文件,恢复正常运行。
- 原zabbix数据库(容量:4G):
/var/lib/mysql/zabbix (/dev/sda5 <-- /var/lib/mysql)
- 扩容目录的zabbix数据库位置(容量:100G):
/data/mysql_data/mysql/zabbix (/dev/sdb1 <-- /data/mysql_data)
1、加一块硬盘
- 在虚拟机上面加一个100G的硬盘。
2、对新添加的硬盘进行分区
fdisk -l
- 创建分区,按m可查看帮助
fdisk /dev/sdb
输入:n
Enter
选择:p
Enter
Enter
Enter
Enter
输入:w
Enter
3、安装mkfs.ext4命令和格式化新磁盘
yum install e4fsprogs -y
mkfs -t ext4 /dev/sdb1
4、创建扩容目录(即迁移后的目录)并挂载新磁盘
mkdir mysql_data
# 创建扩容目录
ls -l /dev/disk/by-uuid/
# 查看新磁盘UUID号码
- 配置挂载信息,如果用mount挂载,重启后可能失效
vi /etc/fstab
UUID=a8058c20-37e5-44dd-a192-3394505d7c16 /data/mysql_data ext4 defaults 0 0
# 添加,UUID 就是刚刚查询到的那个sdb1的UUID,画红框的那个
:wq
# 保存
reboot now
# 重启系统
df -hT
# 重启后看一下磁盘信息
5、迁移mysql数据库目录
- 停止MySQL服务、拷贝目录、给zabbix.cnf增加写权限
systemctl stop mysqld
cp -rf /var/lib/mysql /data/mysql_data/
cd /etc/my.cnf.d/
chmod u+w zabbix.cnf
- 修改zabbix.cnf路径:
vi zabbix.cnf
datadir = /data/mysql_data/mysql/
- 增加client.cnf路径:
vi client.cnf
[client]
socket = /data/mysql_data/mysql/mysql.sock
- 修改mysql-server.cnf路径:
vi mysql-server.cnf
[mysqld]
datadir=/data/mysql_data/mysql
socket=/data/mysql_data/mysql/mysql.sock
- 目录下的所有文件和子目录的所有者和所属组都设置为 mysql:mysql;启动MySQL
chown -R mysql:mysql /data/mysql_data/mysql/
systemctl start mysql
# 如果启动报错,就重启下系统
6、进入mysql查看迁移是否成功
mysql -uroot -p
# 提示输入密码,直接Enter
select @@datadir;
# 查看路径是否迁移成功
7、修改php和zabbix_web配置文件指定mysql.sock迁移后的位置
- 查找php.ini位置
find / -name php.ini
- 修改:php.ini
vi /etc/php.ini
mysqli.default_socket = /data/mysql_data/mysql/mysql.sock
# 大概在1123行
- 重启php-fpm
systemctl restart php-fpm
- 修改zabbix_server.conf:
vi /etc/zabbix/zabbix_server.conf
DBSocket=/data/mysql_data/mysql/mysql.sock
CacheSize=2048M
# 前面#号要去掉。
- 重启zabbix服务
systemctl restart zabbix-server
注:如果不指定迁移后的mysql.sock文件位置的话,zabbix会自动从默认位置
/var/lib/mysql/mysql.sock
读取。