原因:直接从官方下载的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

如何将zabbix的数据库连到外部 zabbix数据库迁移_如何将zabbix的数据库连到外部

  • 创建分区,按m可查看帮助
fdisk /dev/sdb
输入:n
Enter
选择:p
Enter
Enter
Enter
Enter
输入:w
Enter

如何将zabbix的数据库连到外部 zabbix数据库迁移_如何将zabbix的数据库连到外部_02

3、安装mkfs.ext4命令和格式化新磁盘

yum install e4fsprogs -y
mkfs -t ext4 /dev/sdb1

4、创建扩容目录(即迁移后的目录)并挂载新磁盘

mkdir mysql_data
# 创建扩容目录
ls -l /dev/disk/by-uuid/
# 查看新磁盘UUID号码

如何将zabbix的数据库连到外部 zabbix数据库迁移_zabbix_03

  • 配置挂载信息,如果用mount挂载,重启后可能失效

vi /etc/fstab

UUID=a8058c20-37e5-44dd-a192-3394505d7c16 /data/mysql_data        ext4    defaults        0 0

# 添加,UUID 就是刚刚查询到的那个sdb1的UUID,画红框的那个
:wq
# 保存

如何将zabbix的数据库连到外部 zabbix数据库迁移_数据库_04

reboot now
# 重启系统
df -hT
# 重启后看一下磁盘信息

如何将zabbix的数据库连到外部 zabbix数据库迁移_mysql_05

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;
# 查看路径是否迁移成功

如何将zabbix的数据库连到外部 zabbix数据库迁移_zabbix_06

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读取。