FreeSWITCH配置SQLite替代PostgreSQL及FusionPBX数据库迁移咨询
FreeSWITCH 配置SQLite替代PostgreSQL作为内部数据库
完全可行。FreeSWITCH核心原生就内置了SQLite驱动支持,不需要额外编译安装第三方模块,本身绝大多数内部模块的默认存储选项就包含SQLite,相比PostgreSQL更轻量,没有额外服务占用,适合单机小规模部署场景。
具体配置步骤如下:
- 先停服避免配置写入冲突:
systemctl stop freeswitch - 修改核心数据库配置,打开
/etc/freeswitch/autoload_configs/switch.conf.xml,找到核心数据库配置段,替换原PostgreSQL的DSN配置为SQLite路径:
<!-- 注释原有PostgreSQL配置 <param name="core-db-dsn" value="pgsql://host=127.0.0.1 dbname=freeswitch user=freeswitch password=你的密码 options='-c client_min_messages=NOTICE' application_name='freeswitch'" /> --> <!-- 新增SQLite配置,数据库文件建议放在FreeSWITCH默认的db目录下 --> <param name="core-db-dsn" value="sqlite:///var/lib/freeswitch/db/core.db" />
- 逐个修改各独立模块的数据库配置,所有需要调整的配置文件都存放在
/etc/freeswitch/autoload_configs/目录下:callcenter.conf.xml:将队列存储DSN修改为sqlite:///var/lib/freeswitch/db/callcenter.dbvoicemail.conf.xml:将语音邮件存储DSN修改为sqlite:///var/lib/freeswitch/db/voicemail.dbsofia.conf.xml:将SIP注册信息存储DSN修改为sqlite:///var/lib/freeswitch/db/sofia_reg.db
注意:所有配置里的数据库路径要保证freeswitch用户有完整读写权限,不要放在/root等无权访问的目录下
- 修正目录权限后启动服务验证:
chown -R freeswitch:freeswitch /var/lib/freeswitch/db/ && systemctl start freeswitch,进入fs_cli执行status命令,无数据库连接报错即为配置生效。
FusionPBX PostgreSQL迁移SQLite实施方案
前置提醒:SQLite是文件型数据库,不支持多进程高并发写入,仅适合单机部署、并发呼叫低于50路的场景,高并发生产环境不建议做此迁移
具体迁移步骤如下:
- 停全栈服务避免迁移过程中有新数据写入导致不一致:
systemctl stop nginx php-fpm freeswitch - 全量备份原有PostgreSQL数据,避免迁移失败丢失配置:
pg_dump fusionpbx > /root/fusionpbx_pg_backup.sql - 安装PHP对应的SQLite扩展,根据自身系统版本执行对应命令:
- Debian/Ubuntu:
apt install php-sqlite3(注意匹配当前运行的PHP版本号) - CentOS/RHEL:
dnf install php-pdo_sqlite php-sqlite3
- Debian/Ubuntu:
- 创建SQLite数据库文件并配置基础权限:
touch /var/lib/freeswitch/db/fusionpbx.db chown www-data:freeswitch /var/lib/freeswitch/db/fusionpbx.db chmod 660 /var/lib/freeswitch/db/fusionpbx.db - 完成结构同步与数据导入:
直接导出PostgreSQL的SQL语句无法直接导入SQLite,需要提前过滤PostgreSQL专属语法:将
SERIAL字段类型替换为INTEGER PRIMARY KEY AUTOINCREMENT、将NOW()函数替换为标准SQL的CURRENT_TIMESTAMP、删除所有SQL语句里的public.schema前缀。可以先执行FusionPBX自带的结构初始化脚本在SQLite库中生成所有表,再逐表导入数据,导完核对核心表(分机、拨号方案、用户、通话记录、录音配置)的记录条数和原PostgreSQL库完全一致,避免丢数据。 - 修改FusionPBX数据库连接配置,打开
/etc/fusionpbx/config.php,替换原有PostgreSQL连接段为SQLite配置:// 注释原有PostgreSQL配置 // $db['type'] = 'pgsql'; // $db['host'] = '127.0.0.1'; // $db['name'] = 'fusionpbx'; // $db['user'] = 'fusionpbx'; // $db['pass'] = '你的PG密码'; // 新增SQLite配置 $db['type'] = 'sqlite'; $db['path'] = '/var/lib/freeswitch/db/fusionpbx.db'; - 再次校验所有db文件的权限,保证Web进程和FreeSWITCH进程都有读写权限,之后启动全栈服务验证:
登录FusionPBX后台检查分机注册、呼叫路由、录音、语音邮件功能是否正常,查看系统日志无数据库连接报错即为迁移完成。systemctl start nginx php-fpm freeswitch
常见踩坑说明
- 权限问题占迁移报错的80%以上:SQLite靠文件系统权限控制访问,必须保证www-data(Web进程用户)和freeswitch(通话进程用户)对db文件及上级目录都有读写权限,否则会出现后台能打开但呼叫失败、或者呼叫正常但后台打不开的问题
- 迁移后如果出现SIP注册异常、呼叫路由不生效,可以先停服务删除
/var/lib/freeswitch/db/目录下除了fusionpbx.db之外的其他db文件,重启FreeSWITCH会自动重建对应表结构 - SQLite不支持网络访问,也不支持多节点同时挂载同一个db文件写入,多机集群场景不要使用
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

