Redundant database: Difference between revisions
(Add database_backup_desc_dir parameter for migration) |
(Fix AI Summary format: use bold labels instead of sub-headings) |
||
| (11 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{DISPLAYTITLE:Database | {{DISPLAYTITLE:Database Redundancy and Migration}} | ||
[[Category: | [[Category:Configuration]] | ||
[[Category:High Availability]] | |||
This guide | This guide covers methods for replicating, synchronizing, and migrating the VoIPmonitor CDR database between instances. | ||
== Overview | == Overview == | ||
VoIPmonitor offers the following methods for CDR synchronization: | |||
{| class="wikitable" | |||
|- | |||
! Method !! Description !! Use Case | |||
|- | |||
| '''Database Backup Mode''' || Dedicated sniffer reads from source DB, writes to destination DB || Online migration, read-only replicas, hot-standby | |||
|- | |||
| '''Master-Master Replication''' || Bidirectional MySQL/MariaDB replication || Full HA with automatic failover (see [[Mysql_master-master_replication_hints|Master-Master Replication]]) | |||
|} | |||
{{Note|Both methods synchronize CDR data only. GUI settings (users, alerts, capture rules) must be migrated separately via '''Tools → Backup & Restore'''.}} | |||
== Database Backup Mode == | |||
A dedicated VoIPmonitor instance reads CDRs from a source database and writes them to a destination database. This is the recommended method for online GUI migration. | |||
=== Architecture === | |||
=== Architecture | |||
<kroki lang="plantuml"> | <kroki lang="plantuml"> | ||
| Line 36: | Line 30: | ||
skinparam shadowing false | skinparam shadowing false | ||
skinparam defaultFontName Arial | skinparam defaultFontName Arial | ||
rectangle "OLD Server" | rectangle "OLD Server" { | ||
rectangle " | rectangle "Sniffer" as SNIFF | ||
database " | database "Source DB" as SRC | ||
} | } | ||
rectangle "NEW Server" | rectangle "NEW Server" { | ||
rectangle "Migration\nInstance" as MIG | rectangle "Migration\nInstance" as MIG | ||
database " | database "Destination DB" as DST | ||
} | } | ||
SNIFF -down-> | SNIFF -down-> SRC : writes CDRs | ||
MIG -left-> | MIG -left-> SRC : reads\n(database_backup_from_*) | ||
MIG -down-> | MIG -down-> DST : writes\n(mysql*) | ||
note bottom of MIG | note bottom of MIG | ||
No packet capture | |||
managerport = 5030 | |||
end note | end note | ||
@enduml | @enduml | ||
</kroki> | </kroki> | ||
== Online GUI Migration Workflow | === Online GUI Migration Workflow === | ||
=== | |||
# Install VoIPmonitor GUI on the new server with a fresh database | |||
# '''Backup configuration:''' On old GUI → '''Tools → Backup & Restore''' → backup configuration tables | |||
# Install VoIPmonitor GUI on the new server with a fresh | # '''Restore configuration:''' On new GUI → upload the backup file (do this BEFORE starting migration) | ||
# | # Create migration config file (see below) | ||
# Start migration instance | |||
# | |||
# Create | |||
# | |||
# Once replication catches up, switch users to the new GUI | # Once replication catches up, switch users to the new GUI | ||
# Stop migration instance and decommission | # Stop migration instance and decommission old server | ||
=== Configuration === | |||
== | |||
Copy the original config and modify for migration mode: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
scp root@old-server:/etc/voipmonitor.conf /etc/voipmonitor-migrate.conf | scp root@old-server:/etc/voipmonitor.conf /etc/voipmonitor-migrate.conf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Required modifications in <code>/etc/voipmonitor-migrate.conf</code>:''' | |||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
# | # 1. Avoid port conflict with production sniffer | ||
managerport = 5030 | managerport = 5030 | ||
# | # 2. DISABLE packet capture (comment out all interface lines) | ||
# interface = eth0 | |||
# interface = eth0 | |||
# | # 3. Destination Database (NEW server - local) | ||
mysqlhost = 127.0.0.1 | |||
mysqlhost | mysqldb = voipmonitor | ||
mysqldb | mysqlusername = root | ||
mysqlusername | mysqlpassword = new_password | ||
mysqlpassword | |||
# | # 4. Source Database (OLD server - remote) | ||
database_backup_from_mysqlhost = 192.168.0.1 | database_backup_from_mysqlhost = 192.168.0.1 | ||
database_backup_from_mysqldb = voipmonitor | database_backup_from_mysqldb = voipmonitor | ||
database_backup_from_mysqlusername = root | database_backup_from_mysqlusername = root | ||
database_backup_from_mysqlpassword = | database_backup_from_mysqlpassword = old_password | ||
# | # 5. Start date for replication | ||
database_backup_from_date = 2024-01-01 | |||
database_backup_from_date | |||
# Performance tuning | # 6. Performance tuning | ||
database_backup_insert_threads | database_backup_insert_threads = 3 # Higher = faster but more load | ||
database_backup_pause | database_backup_pause = 3 # Higher = less load on source DB | ||
# | |||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Parameter Reference:''' | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 185: | Line 105: | ||
! Parameter !! Description | ! Parameter !! Description | ||
|- | |- | ||
| <code> | | <code>database_backup_from_date</code> || Start date for sync (YYYY-MM-DD) | ||
|- | |- | ||
| <code> | | <code>database_backup_insert_threads</code> || Parallel write threads (higher = faster, more load) | ||
|- | |- | ||
| <code> | | <code>database_backup_pause</code> || Seconds between batches (higher = gentler on source DB) | ||
|- | |- | ||
| <code> | | <code>database_backup_desc_dir</code> || Set <code>yes</code> to also write new incoming data to destination | ||
|} | |} | ||
= | === Running the Migration === | ||
== Running the | |||
'''Test manually first:''' | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
voipmonitor --config-file /etc/voipmonitor-migrate.conf -k -v 1 | voipmonitor --config-file /etc/voipmonitor-migrate.conf -k -v 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Run as systemd service:''' | |||
Create <code>/etc/systemd/system/voipmonitor-migrate.service</code>: | |||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
[Unit] | [Unit] | ||
Description=VoIPmonitor Database Migration | Description=VoIPmonitor Database Migration | ||
After=network.target mysql.service | After=network.target mysql.service | ||
| Line 253: | Line 138: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl daemon-reload | systemctl daemon-reload | ||
systemctl enable | systemctl enable --now voipmonitor-migrate | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Migrating PCAP Files == | ||
Database migration does NOT include PCAP files. Migrate separately using rsync: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
rsync -avz root@old-server:/var/spool/voipmonitor/ /var/spool/voipmonitor/ | rsync -avz root@old-server:/var/spool/voipmonitor/ /var/spool/voipmonitor/ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Warning|1='''Timezone must match between servers.''' PCAP paths use local timezone (<code>spooldir/YYYY-MM-DD/HH/MM/</code>). Mismatched timezones cause GUI to fail finding historical PCAPs.}} | |||
= | <syntaxhighlight lang="bash"> | ||
# Check timezone | |||
timedatectl | |||
# Set timezone | |||
timedatectl set-timezone Europe/Prague | |||
</syntaxhighlight> | |||
== Schema Compatibility == | |||
The database | The migration instance automatically handles database schema upgrades. This is useful when: | ||
* Migrating to different MySQL/MariaDB versions | |||
* Upgrading VoIPmonitor versions during migration | |||
* Moving from local MySQL to remote Percona | |||
To | '''To identify schema changes manually:''' | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl restart voipmonitor | |||
tail -f /var/log/voipmonitor/voipmonitor.log | grep -E "CLI|ALTER|CREATE TABLE" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
= | {{Warning|1=For cross-version migration (e.g., MySQL 5.7 to 8.0), use the migration instance method instead of mysqldump. It handles schema differences automatically.}} | ||
== See Also == | |||
* [[Mysql_master-master_replication_hints|Master-Master Replication]] | |||
* [[Backing_Up_GUI_Configuration|Backing Up GUI Configuration]] | |||
* [[Multiple_sniffer_instancies|Multiple Sniffer Instances]] | |||
== AI Summary for RAG == | == AI Summary for RAG == | ||
'''Keywords:''' database | '''Summary:''' VoIPmonitor supports two methods for CDR database redundancy: (1) Database Backup Mode — a dedicated migration instance reads CDRs from source DB and writes to destination using database_backup_from_* parameters, recommended for online server migration; (2) Master-Master MySQL replication for full HA. GUI settings migrate separately via Backup & Restore. PCAP files require separate rsync migration with matching timezones. | ||
'''Keywords:''' database backup, migration, redundant database, CDR replication, database_backup_from_mysqlhost, database_backup_from_date, database_backup_insert_threads, database_backup_pause, voipmonitor-migrate.conf, PCAP migration, rsync, timezone, master-master replication, high availability | |||
'''Key Questions:''' | '''Key Questions:''' | ||
* How | * How to migrate VoIPmonitor database to a new server? | ||
* What | * What are the database_backup_from parameters for database migration? | ||
* How to move old CDR records to another server? | |||
* How to migrate PCAP files to a new server? | |||
* What is the difference between database backup mode and master-master replication? | |||
* How | * How to migrate GUI settings between servers? | ||
* How | |||
* | |||
* | |||
Latest revision as of 00:13, 11 February 2026
This guide covers methods for replicating, synchronizing, and migrating the VoIPmonitor CDR database between instances.
Overview
VoIPmonitor offers the following methods for CDR synchronization:
| Method | Description | Use Case |
|---|---|---|
| Database Backup Mode | Dedicated sniffer reads from source DB, writes to destination DB | Online migration, read-only replicas, hot-standby |
| Master-Master Replication | Bidirectional MySQL/MariaDB replication | Full HA with automatic failover (see Master-Master Replication) |
ℹ️ Note: Both methods synchronize CDR data only. GUI settings (users, alerts, capture rules) must be migrated separately via Tools → Backup & Restore.
Database Backup Mode
A dedicated VoIPmonitor instance reads CDRs from a source database and writes them to a destination database. This is the recommended method for online GUI migration.
Architecture
Online GUI Migration Workflow
- Install VoIPmonitor GUI on the new server with a fresh database
- Backup configuration: On old GUI → Tools → Backup & Restore → backup configuration tables
- Restore configuration: On new GUI → upload the backup file (do this BEFORE starting migration)
- Create migration config file (see below)
- Start migration instance
- Once replication catches up, switch users to the new GUI
- Stop migration instance and decommission old server
Configuration
Copy the original config and modify for migration mode:
scp root@old-server:/etc/voipmonitor.conf /etc/voipmonitor-migrate.conf
Required modifications in /etc/voipmonitor-migrate.conf:
# 1. Avoid port conflict with production sniffer
managerport = 5030
# 2. DISABLE packet capture (comment out all interface lines)
# interface = eth0
# 3. Destination Database (NEW server - local)
mysqlhost = 127.0.0.1
mysqldb = voipmonitor
mysqlusername = root
mysqlpassword = new_password
# 4. Source Database (OLD server - remote)
database_backup_from_mysqlhost = 192.168.0.1
database_backup_from_mysqldb = voipmonitor
database_backup_from_mysqlusername = root
database_backup_from_mysqlpassword = old_password
# 5. Start date for replication
database_backup_from_date = 2024-01-01
# 6. Performance tuning
database_backup_insert_threads = 3 # Higher = faster but more load
database_backup_pause = 3 # Higher = less load on source DB
Parameter Reference:
| Parameter | Description |
|---|---|
database_backup_from_date |
Start date for sync (YYYY-MM-DD) |
database_backup_insert_threads |
Parallel write threads (higher = faster, more load) |
database_backup_pause |
Seconds between batches (higher = gentler on source DB) |
database_backup_desc_dir |
Set yes to also write new incoming data to destination
|
Running the Migration
Test manually first:
voipmonitor --config-file /etc/voipmonitor-migrate.conf -k -v 1
Run as systemd service:
Create /etc/systemd/system/voipmonitor-migrate.service:
[Unit]
Description=VoIPmonitor Database Migration
After=network.target mysql.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/voipmonitor -c /etc/voipmonitor-migrate.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now voipmonitor-migrate
Migrating PCAP Files
Database migration does NOT include PCAP files. Migrate separately using rsync:
rsync -avz root@old-server:/var/spool/voipmonitor/ /var/spool/voipmonitor/
⚠️ Warning: Timezone must match between servers. PCAP paths use local timezone (spooldir/YYYY-MM-DD/HH/MM/). Mismatched timezones cause GUI to fail finding historical PCAPs.
# Check timezone
timedatectl
# Set timezone
timedatectl set-timezone Europe/Prague
Schema Compatibility
The migration instance automatically handles database schema upgrades. This is useful when:
- Migrating to different MySQL/MariaDB versions
- Upgrading VoIPmonitor versions during migration
- Moving from local MySQL to remote Percona
To identify schema changes manually:
systemctl restart voipmonitor
tail -f /var/log/voipmonitor/voipmonitor.log | grep -E "CLI|ALTER|CREATE TABLE"
⚠️ Warning: For cross-version migration (e.g., MySQL 5.7 to 8.0), use the migration instance method instead of mysqldump. It handles schema differences automatically.
See Also
AI Summary for RAG
Summary: VoIPmonitor supports two methods for CDR database redundancy: (1) Database Backup Mode — a dedicated migration instance reads CDRs from source DB and writes to destination using database_backup_from_* parameters, recommended for online server migration; (2) Master-Master MySQL replication for full HA. GUI settings migrate separately via Backup & Restore. PCAP files require separate rsync migration with matching timezones.
Keywords: database backup, migration, redundant database, CDR replication, database_backup_from_mysqlhost, database_backup_from_date, database_backup_insert_threads, database_backup_pause, voipmonitor-migrate.conf, PCAP migration, rsync, timezone, master-master replication, high availability
Key Questions:
- How to migrate VoIPmonitor database to a new server?
- What are the database_backup_from parameters for database migration?
- How to move old CDR records to another server?
- How to migrate PCAP files to a new server?
- What is the difference between database backup mode and master-master replication?
- How to migrate GUI settings between servers?