元数据包括用户、虚拟主机(vhost)、队列、交换机、绑定关系等,是RabbitMQ运行的核心配置。常用方法如下:
save_definitions命令导出所有元数据到JSON文件,操作简单且兼容性好。rabbitmqctl save_definitions /var/backups/rabbitmq_definitions_$(date +%F).jsonhttp://服务器IP:15672,默认账号guest/guest),进入“Admin”→“Export definitions”,选择需要导出的项目(如队列、交换机),下载JSON文件。消息数据是业务核心,需确保持久化配置(队列和消息均需设置为durable)后进行备份:
/var/lib/rabbitmq/mnesia目录(含队列数据、索引等)。停止服务后备份该目录可保证数据一致性。sudo systemctl stop rabbitmq-server
sudo tar -czvf /var/backups/rabbitmq_messages_$(date +%F).tar.gz /var/lib/rabbitmq/
sudo systemctl start rabbitmq-server
说明:适用于需要完整备份消息的场景,但需停机,建议在低峰期操作。git clone https://github.com/ctide/rabbitmq-dump.git
cd rabbitmq-dump && sudo make install
rabbitmq-dump -u admin -p password -H localhost -P 5672 -e /var/backups/rabbitmq_queue_messages.json
说明:适合需要增量备份或实时备份的场景。生产环境需通过定时任务实现定期自动备份,避免人为遗漏:
crontab -e,添加每日凌晨2点执行元数据备份、每周日凌晨2点执行消息数据备份的任务。0 2 * * * /usr/bin/rabbitmqctl save_definitions /var/backups/rabbitmq_definitions_$(date +\%F).json
0 2 * * 0 /bin/tar -czvf /var/backups/rabbitmq_messages_$(date +\%F).tar.gz /var/lib/rabbitmq/
说明:确保备份文件存储在独立分区(如/var/backups),避免磁盘空间不足。sudo systemctl stop rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl import_definitions /var/backups/rabbitmq_definitions_2025-09-19.json
rabbitmqctl start_app
说明:恢复后会覆盖现有配置,需确保备份文件版本与当前RabbitMQ版本兼容。sudo systemctl stop rabbitmq-server
sudo rm -rf /var/lib/rabbitmq/*
sudo tar -xzvf /var/backups/rabbitmq_messages_2025-09-19.tar.gz -C /var/lib/rabbitmq/
sudo systemctl start rabbitmq-server
说明:适用于数据目录损坏或丢失的场景,恢复后消息会恢复到备份时的状态。若RabbitMQ因配置错误无法启动,可恢复之前备份的配置文件:
sudo systemctl stop rabbitmq-server
sudo cp /var/backups/rabbitmq.conf.2025-09-19 /etc/rabbitmq/rabbitmq.conf
sudo systemctl start rabbitmq-server
说明:恢复前需确认配置文件的兼容性(如Erlang版本、RabbitMQ版本)。ha-mode=all),即使单节点故障也不会丢失数据。