Ubuntu 上 RabbitMQ 的备份与恢复
一、核心概念与准备
rabbitmqctl eval 'rabbit_mnesia:dir().' 获取,常见路径为 /var/lib/rabbitmq/mnesia/rabbit@sudo rabbitmq-plugins enable rabbitmq_managementsudo apt-get install rabbitmq-server(完成后可用 rabbitmqadmin --version 验证)。二、元数据备份与恢复(在线、不含消息)
sudo rabbitmqctl export_definitions /backup/definitions-$(date +%F).jsonsudo rabbitmqadmin export /backup/definitions.clisudo rabbitmqctl stop_app && sudo rabbitmqctl import_definitions /backup/definitions-$(date +%F).json && sudo rabbitmqctl start_appcurl -X POST -u <user>:<pass> http://localhost:15672/api/definitions -H "Content-Type: application/json" --data-binary @/backup/definitions-$(date +%F).json三、消息数据备份与恢复(含消息,需停写或离线)
rabbitmqctl eval 'rabbit_mnesia:dir().'(示例:/var/lib/rabbitmq/mnesia/rabbit@node1)sudo systemctl stop rabbitmq-serversudo tar czf /backup/rabbitmq_mnesia_$(date +%F).tar.gz -C /var/lib/rabbitmq/mnesia .sudo systemctl stop rabbitmq-serversudo rm -rf /var/lib/rabbitmq/mnesia/rabbit@node1/* && sudo tar xzf /backup/rabbitmq_mnesia_$(date +%F).tar.gz -C /var/lib/rabbitmq/mnesiasudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmqsudo systemctl start rabbitmq-server && rabbitmqctl list_queues name messagesdocker exec <container> tar czf /backup/rabbitmq_$(date +%F).tar.gz -C /var/lib/rabbitmq .docker cp backup.tar.gz <container>:/tmp && docker exec <container> tar xzf /tmp/backup.tar.gz -C /四、集群与高可用建议
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-params":2,"ha-sync-mode":"automatic"}'rabbitmqadmin declare queue name=order_queue durable=true arguments='{"x-queue-type":"quorum"}'五、自动化与演练清单
0 2 * * * /usr/sbin/rabbitmqctl export_definitions /backup/defs-$(date +\%F).json0 3 * * 0 /usr/sbin/systemctl stop rabbitmq-server && /bin/tar czf /backup/mnesia-$(date +\%F).tar.gz -C /var/lib/rabbitmq/mnesia . && /usr/sbin/systemctl start rabbitmq-serverrsync -avz /backup/ backup@backup-host:/data/rabbitmq/rabbitmqctl cluster_status 检查分区与节点状态,必要时 reset 后重新加入集群。