设为首页 加入收藏

TOP

[MySQL-MM] 生产环境自动恢复MM中一台M2库的过程,分享从零开始写的自动化重建脚本以及思路(一)
2014-11-24 08:21:50 来源: 作者: 【 】 浏览:7
Tags:MySQL-MM 生产 环境 自动 恢复 过程 分享 从零 开始 自动化 重建 脚本 以及 思路
[MySQL-MM] 生产环境自动恢复MM中一台M2库的过程,分享从零开始写的自动化重建脚本以及思路
1 简介
有N0+组MM节点,如果每次都是手动修复,一次两次还好,次数多了难免有些无用功了,因为建立自动脚本,避免每次都在M库手动备份,手动copy,手动建立连接,手动设置复制信息的过程,我的目的,一个sh run command,所有的事情都准备妥当了,然后就泡一杯雀巢咖啡或者普洱茶,在一边静静的等待或者还可以借此小憩片刻,看着M2修复成功:
2 环境
必须是MM架构,而且一台主库M1是完好无损的,一台主库M2可以根据M1主库来进行重建;如果MS架构,自己可以稍微做一下脚本修改动作,也能使用,架构如下图所示:
3 总体思路,建立主脚本a_build_rep.sh
思路分为13个步骤,如a_build_rep.sh脚本中的备注
#!/bin/bash
set -x
set -e
set -u
#(1)准备好目录以及全局变量
BACKUP_FOLDER=/mysqldata/shared/backup2
TEMP_SETUP_FOLDER=/tmp/sharding_setup_1
MYSQL_EXEC=/opt/mysql/product/mysql/bin/mysql
#(2)设置参数,$1是要修复的M2库,$2是正在运行良好的M1库
db1=$2
db2=$1
#(3)在这里设置好一些所必用的环境变量,比如备份用户,备份用户密码,以及复制帐号密码,甚至一些super帐号
BACKUP_USER="backupuser"
BACKUP_PASSWORD="#xx$"
AGENT_PASSWORD='#xx$'
REPLICATION_USER=replication
REPLICATION_PASSWORD='#xx$'
REPLICA_PASSWORD='#xx$'
MONITOR_PASSWORD='#xx$'
WRITER_ETH='eth0'
SUPER_USER=backupuser
SUPER_PASSWORD='#xx$'
#(4)由于磁盘空间所限,建立这些目录,如果目录已经存在,则清空这些目录。
ssh -t $db1 "rm -rf $TEMP_SETUP_FOLDER && mkdir -p $TEMP_SETUP_FOLDER && chmod 777 $TEMP_SETUP_FOLDER"
ssh -t $db2 "rm -rf $TEMP_SETUP_FOLDER && mkdir -p $TEMP_SETUP_FOLDER && chmod 777 $TEMP_SETUP_FOLDER"
#(5)将在线备份脚本 create_hot_backup.sh copy到即将要进行在线备份的M1库上面,并且调用此脚本进行在线备份,此备份用来去另一个M2库上进行恢复。
echo "Taking hotbackup on db1..."
scp create_hot_backup.sh $db1:$TEMP_SETUP_FOLDER/create_hot_backup.sh
ssh -t $db1 "sudo -u mysql mkdir -p $BACKUP_FOLDER"
ssh -t $db1 "sudo -i -u mysql $TEMP_SETUP_FOLDER/create_hot_backup.sh '$BACKUP_FOLDER' '$BACKUP_USER' '$BACKUP_PASSWORD' N Y"
#(6)停止M2的MySQL服务
echo "Hotbackup completed. Now restore the hotbackup on db2..."
ssh -t $db2 "sudo /etc/init.d/mysql stop"
#(7)将restore_hot_backup.sh脚本copy到M2库上,并调用此脚本在M2库上面进行恢复操作。
scp restore_hot_backup.sh $db2:$TEMP_SETUP_FOLDER/restore_hot_backup.sh
ssh -t $db2 "sudo -i -u mysql $TEMP_SETUP_FOLDER/restore_hot_backup.sh '$BACKUP_FOLDER' '$BACKUP_USER' '$BACKUP_PASSWORD' '$TEMP_SETUP_FOLDER' Y"
#(8)恢复完,启动M2库。
ssh -t $db2 "sudo /etc/init.d/mysql start"
echo "Restore completed. Now rebuild replication between db1 and db2..."
#(9)建立M2上面的复制功能,M1为master,M2为slave;
echo "Setup replication from db1 to db2"
echo "Setup replication from db1 to db2"
scp $db2:$TEMP_SETUP_FOLDER/xtrabackup_binlog_info.master xtrabackup_binlog_info.db1
binlog_filename=`cat xtrabackup_binlog_info.db1 | awk '{print $1}'`
binlog_pos=`cat xtrabackup_binlog_info.db1 | awk '{print $2}'`
$MYSQL_EXEC -h$db2 -ummm_agent -p"$AGENT_PASSWORD" -e "SLAVE STOP;"
$MYSQL_EXEC -h$db2 -ummm_agent -p"$AGENT_PASSWORD" -e "CHANGE MASTER TO MASTER_HOST='$db1', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='$REPLICATION_PASSWORD', MASTER_LOG_FILE='$binlog_filename', MASTER_LOG_POS=$binlog_pos;"
$MYSQL_EXEC -h$db2 -ummm_agent -p"$AGENT_PASSWORD" -e "SLAVE START;"
#(10)Check M2库的复制功能状态,是否搭建成功
echo "Check db2 replication status."
if ! $MYSQL_EXEC -h$db2 -ummm_agent -p"$AGENT_PASSWORD" -e "SHOW SLAVE STATUS\G" | grep "Slave_SQL_Running: Yes
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用mysql federated引擎构建MySQ.. 下一篇mysql创建存储过程和函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)