最近在测试 PostgreSQL,学习从基本的使用,维护以及性能调优到利用各种 PostgreSQL 内置的先进功能,当然了,最好的学习永远都是实践,因此便有了这篇教程(学习笔记)。
部署环境: Ubuntu 24.04 x64, Zabbix 7.0 LTS
首先安装 PostgreSQL 16 和 pgloader。
1 | apt install postgresql-common -y |
安装完成后我们首先需要确保数据库服务器的安全性,限制 PostgreSQL 只能监听 localhost。
修改 /etc/postgresql/16/main/postgresql.conf
,确保 listen_addresses
配置项的值为 localhost
, 其余的配置保持默认即可。
修改完成后重启 PostgreSQL 进程。
1 | systemctl restart postgresql |
然后我们需要修改 postgres
用户的密码
1 | sudo -u postgres psql |
修改 /etc/postgresql/16/main/pg_hba.conf
,添加以下配置以允许 zabbix
用户通过本地连接至 zabbix
数据库,并强制用户使用 scram-sha-256
传输加密后的密码
1 | local zabbix zabbix scram-sha-256 |
添加 zabbix
用户,创建 zabbix
数据库,并且将数据库所有者修改为 zabbix
。
1 | sudo -u postgres createuser --pwprompt zabbix |
然后我们需要创建数据库迁移所需要的文件 create.sql
,alter.sql
和 zabbix_migrate.load
。
下载并解压 Zabbix 源代码,其中包括了数据库结构文件,这正是我们所需要的。
1 | wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.0.tar.gz |
将 schema.sql 复制至根目录,生成 create.sql
与 alter.sql
。
1 | cp zabbix-7.0.0/database/postgresql/schema.sql . |
创建 zabbix_migrate.load
文件并写入以下内容。
1 | LOAD DATABASE |
注意这里假设你的 MariaDB 中 Zabbix 数据库名为 zabbix
,用户名为 zabbix
。
停止 Zabbix Server 并使用 pgloader 迁移数据库。注意如果你的 zabbix 数据库数据量非常大,但服务器内存又非常有限时(<4G),你可以在开始迁移之前创建一个临时 Swap 文件以避免迁移过程因为内存不足而被中断。
1 | systemctl stop zabbix-server |
这里使用环境变量而不是写入配置文件的原因是因为密码中含有特殊字符,因此会导致迁移文件无法被正确读取,进而导致迁移失败。
pgloader 的文档中并没有记载除了 PostgreSQL 密码之外,使用环境变量导入数据库连接密码的变量名。我是在阅读了 pgloader 的源代码后才了解到 MYSQL_PWD
这个环境变量的存在。
移除 Zabbix Server MySQL,安装 Zabbix Server PostgreSQL 和对应的 PHP 扩展。
1 | apt remove zabbix-server-mysql -y |
移除 Zabbix 前端的配置文件,重启 Zabbix Server 并将其设为开机启动。
1 | \rm /etc/zabbix/web/zabbix.conf.php |
然后这时再访问 Zabbix 前端时会要求你输入数据库的连接信息,数据库类型选择 PostgreSQL,输入你在之前步骤中配置的 zabbix
用户密码。
在确认无误后,这时就可以停止 MariaDB ,卸载相关软件包并删除旧的数据。
1 | systemctl stop mariadb |
Source