由于系统规划的变更,现要将已部署的Zabbix主机数据库由本地迁移至远程服务器。现将基本思路和操作纪录一二。

2024.05 摄于天津河东区·李公楼地道

创建目标

  1. 在远程数据库服务器上创建对应迁移目标。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 远程MySQL数据库地址为mysql.sujx.net
# 创建数据库和访问用户
mysql -uroot << EOF
CREATE USER 'zabbix'@'%' IDENTIFIED BY 'zabbix';
CREATE DATABASE db_zabbix CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
GRANT all privileges on db_zabbix.* to 'zabbix'@'%';
FLUSH PRIVILEGES;
set global log_bin_trust_function_creators = 0;
exit
EOF

# 防火墙设置
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
  1. 在本地zabbix服务器上进行访问测试
1
2
3
mysql -uzabbix -p -hmysqlsujx.net db_zabbix << EOF
show tables;
EOF

备份数据

  1. 在原Zabbix主机上备份导出MySQL
1
2
3
4
5
6
# 数据落盘
systemctl stop zabbix-server nginx
sync && sync && sync

# 导出数据
mysqldump -B zabbix >/tmp/db_zabbix.sql
  1. 向目标数据库导入数据
    1
    2
    3
    4
    mysql -uzabbix -p -hmysql.sujx.net db_zabbix << EOF
    source /tmp/db_zabbix.sql;
    show tables;
    EOF

重新指向

  1. 配置Server指向
    1
    2
    3
    4
    5
    # 修改zabbix_server的数据库指向
    sed -i 's/DBName=zabbix/DBName=db_zabbix/g; s/# DBHost=localhost/DBName=mysql.sujx.net/g' /etc/zabbix/zabbix_server.conf

    # 拉起服务
    systemctl start zabbix-server
  2. 配置Web指向
    1
    2
    3
    4
    5
    # 修改zabbix_web的数据库指向
    sed -i 's/$DB['SERVER'] = 'localhost'
    /$DB['SERVER'] = 'mysql.singsbox.com.cn'/g; s/$DB['DATABASE'] = 'zabbix'/$DB['DATABASE'] = 'db_zabbix'/g'/etc/zabbix/web/zabbix.conf.php

    systemctl start nginx
  3. 检查服务

清理现场

最后要将原有数据库服务停用并清理原有程序和数据文件

1
2
3
4
5
6
7
8
9
10
11
12
# 删除数据库
mysql -uroot -p -h127.0.0.1<< EOF
drop database zabbix;
exit
EOF

# 禁用本地数据库并卸载
systemctl disable --now mysqld.service
dnf remove -y mysql-server

# 删除临时使用中转数据库文件
rm -rf /tmp/db_zabbix.sql