技术求助:将RabbitMQ-Server数据库恢复至其他主机的操作方法
把备份的RabbitMQ数据库恢复到新主机的实操指南
兄弟,我帮你梳理下怎么把备份的RabbitMQ数据库恢复到新主机上,结合你遇到的LVM扩容后服务挂起的情况,按下面步骤来绝对稳:
一、先把新主机环境搭对
- 必须给新主机装完全相同版本的RabbitMQ(3.6.6-1.el7.noarch)和对应版本的Erlang!版本不匹配的话,mnesia数据库根本读不出来,这是最容易踩的坑。
- 先把新主机上的RabbitMQ停掉:
systemctl stop rabbitmq-server - 确认真的停了:
systemctl status rabbitmq-server,看到inactive (dead)就ok。
二、处理你备份的mnesia目录
- 把你备份的旧mnesia目录(原路径一般是
/var/lib/rabbitmq/mnesia/rabbit@旧主机名)传到新主机,用scp最方便:scp -r /本地备份路径/rabbit@旧主机名 新主机账号@新主机IP:/tmp/ - 重点:mnesia目录的命名规则是
rabbit@{主机名},所以先查新主机的主机名:hostname,如果新主机名和旧的不一样,得把备份目录改名为rabbit@{新主机名},不然启动会找不到数据。
三、替换新主机的默认mnesia目录
- 先把新主机自带的mnesia目录备份一下,以防万一:
mv /var/lib/rabbitmq/mnesia/rabbit@新主机名 /var/lib/rabbitmq/mnesia/rabbit@新主机名.bak - 把改好名的备份目录移到正确位置:
mv /tmp/rabbit@新主机名 /var/lib/rabbitmq/mnesia/ - 给目录设置正确的权限,RabbitMQ是用
rabbitmq用户跑的,所以:chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia/rabbit@新主机名 chmod -R 755 /var/lib/rabbitmq/mnesia/rabbit@新主机名
四、调整节点名称(如果主机名变了)
- 如果新主机名和旧主机不一样,得在RabbitMQ配置里指定节点名:
编辑/etc/rabbitmq/rabbitmq-env.conf(没有的话直接创建),加一行:NODENAME=rabbit@新主机名 - 这样启动的时候就会用这个节点名加载对应的mnesia数据了。
五、启动服务并验证
- 启动RabbitMQ:
systemctl start rabbitmq-server - 看状态:
systemctl status rabbitmq-server,显示active (running)就成功一半了。 - 再验证数据:用
rabbitmqctl list_queues看看之前的队列是不是都在,要是能列出来,说明数据完全恢复了。
额外提醒
- 如果之前是集群环境,别忘了把旧主机的Erlang cookie复制到新主机!cookie文件在
/var/lib/rabbitmq/.erlang.cookie,复制完要改权限:chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie,chmod 400 /var/lib/rabbitmq/.erlang.cookie,不然集群连不上。 - 新主机的
/var/lib/分区一定要留够空间,别再犯之前存储不足的错了,提前规划好LVM或者挂载更大的磁盘。
内容的提问来源于stack exchange,提问作者Unpossible
相关产品推荐
相关产品推荐

