Cacti 数据库同步方法
cacti
rrdtool
mysql
Cacti 不同主机间的数据库同步脚本
使用的软件有
Rsync scp mysql
1.免密钥登录
首先做主备服务器的免密钥登录,要求主服务器能免密钥登录其他节点服务器
1.1 在A机下生成公钥/私钥对。
ssh-keygen -t rsa -P ‘‘
-P表示密码,-P ‘’ 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在/home/chenlb下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
1.2 把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制
scp .ssh/id_rsa.pub [email protected]:/root/id_rsa.pub
[email protected]‘s password:
id_rsa.pub 100% 223 0.2KB/s 00:00
由于还没有免密码登录的,所以要输入密码
1.3 B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里
ssh-keygen -t rsa -P ‘‘
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
authorized_keys的权限要是600
1.4 A机登录B机
ssh 192.168.1.2
The authenticity of host ‘192.168.1.2 (192.168.1.2)‘ can‘t be established.
RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.1.2‘ (RSA) to the list of known hosts.
Last login: Thu Feb 3 09:53:18 2017 from root
第一次登录是时要你输入yes,现在A机可以无密码登录B机了。
小结:登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可
2.同步脚本
touch /var/www/sqlbackup.sh
chmod +x /var/www/sqlbackup.sh
将以下脚本创建到 /var/www/sqlbackup.sh 并赋予执行权限
修改其中的数据库用户名 密码 通知邮箱 节点服务器 登录口令 及数据库备份恢复密码
#!/bin/bash
# cacti 数据库主备同步脚本
# Make by Fenei
# E-Mail : [email protected]
# Date : 07-Feb-2017
# URL:http://babyfenei.blog.51cto.com/443861/1852324
#-----------------------------------------------------
# 本脚本自动备份cacti数据,并通过SCP发送至远程服务器并远程执行数据库恢复操作
# 要求主服务器可免密钥登录节点服务器
# 本脚本会自动打包备份的数据库并保存1个月
USER="cactiuser"
PASSWORD="cactiuser"
DATABASE="cacti"
MAIL="[email protected]"
#告警通知邮箱
BACKUP_DIR=/var/www/sqlbackup/
CANAME=cacti.sql
#备份文件存储路径
LOGFILE=/var/log/data_backup.log
#日志文件路径
DATE=`date +%Y%m%d-%H%M`
ARCHIVE=$DATE.sql.tar.gz
OPTIONS="-u$USER -p$PASSWORD $DATABASE --ignore-table=cacti.settings"
# --ignore-table=cacti.settings 是备份时跳过settings表,防止各个CA settings 设置一样,可根据需求更改
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ]
then
mkdir -p "$BACKUP_DIR"
fi
#开始备份之前,将备份信息头写入日记文件
echo " ">> $LOGFILE
echo "--------------------" >> $LOGFILE
#切换至备份目录
cd $BACKUP_DIR
mysqldump $OPTIONS > $BACKUP_DIR$CANAME
#判断数据库备份是否成功
if [[ $? == 0 ]]
then
tar czvf $ARCHIVE $CANAME >> $LOGFILE 2>&1
echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
else
echo "Database Backup Fail!" >> $LOGFILE
#备份失败后向管理者发送邮件提醒
echo "Backup Alter Mail" |mail -s "database:$DATABASE Daily Backup Fail" $MAIL
fi
echo "Backup Process Done"
# 备份文件为cacti.sql并远程备份到节点服务器
###############电信CA同步###############
scp -P 2141 $BACKUP_DIR$CANAME [email protected]192.168.1.2:/tmp/ >> $LOGFILE 2>&1
if [[ $? == 0 ]]
then
echo "scp Process down"
ssh -t -p 2141 [email protected]192.168.1.2 "mysql -u$USER -p$PASSWORD $DATABASE </tmp/cacti.sql"
ssh -t -p 2141 [email protected]192.168.1.2 "rm -f /tmp/cacti.sql"
echo "shell Process down!"
else
echo "Backup Alter Mail" |mail -s "电信CA数据库同步出错" $MAIL
fi
###############电信CA同步###############
rm -f $BACKUP_DIR$CANAME
#删除31天以上的备份文件
#Cleaning
find $BACKUP_DIR -type f -mtime +31 -name "*.tar.gz" -exec rm -f {} \;
3.创建crond任务计划
echo "58 23 * * * root /var/www/sqlbackup.sh > /dev/null 2>&1" >> /etc/cron.d/backup
service crond restart
4. 次日检查数据库同步结果
时间: 2024-10-28 10:10:06