Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85363
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-26 13:33
文章分类

全部博文(31)

文章存档

2009年(5)

2008年(26)

我的朋友

分类: Mysql/postgreSQL

2009-02-22 16:37:15


实现环境
 1台MYSQL服务器(简称A机)
 1台备份服务器(简称B机,配置不用太高,建议做RAID1)
注意: 以上两台机器均安装LINUX系统
 
实现的服务器
 mysqldump 用来备份数据库SQL语句
 crontab 用来定时执行数据库备份脚本
 scp 用来实现将文件传递
 
实现过程
 在A上定时执行数据库备份脚本
 A机将备份的数据库文件传递到B机
 
操作步骤
1) 设置无需密码就可以由A机访问B机
用root身份在A机上输入如下命令
# ssh-keygen -t dsa      (生成密钥)
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):   直接按下回车键即可
Enter passphrase (empty for no passphrase):   直接按下回车键即可
Enter same passphrase again:           直接按下回车键即可
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
passphrase(密钥保护) 保留为空,否则使用ssh时将要求输入passphrase(密钥保护)
# cd /root/.ssh
# echo id_dsa.pub >> authorized_keys
# chmod 644 authorized_keys
# scp –pr authorized_keys IP:/root/.ssh/        此处IP为B机器IP地址
# rm –f authorized_keys
# ssh IP “mkdir /usr/local/backup”      (此处IP为B机器IP地址,此时SSH登陆B机器时就无需输入密码了)
 
2) 在A机器上建立数据库备份脚本,名为mysql-backup.sh,脚本内容如下
#!/bin/bash
# 日期: 2008年-4月-25日
# 本脚本用来自动备份MYSQL数据库SQL语句
# 定义服务器IP和服务器名称对应关系
SER_INFO=(192.168.1.201=ggtv_wap \
192.168.1.229=tj_G.net \
192.168.1.21=tian_jin)
# 提取当前主机公网IP地址
netcfg=/etc/sysconfig/network-scripts/ifcfg-eth
IPADD=`grep IPADDR $netcfg[0-1] | awk -F= '{print $2}' | grep -e 192.168.1. -e 172.16.105.`
# 判断当前主机的名称
for ipadd in ${SER_INFO[@]}
do
 IP=`echo $ipadd | cut -d= -f1`
    if [ $IPADD = $IP ] ; then
        ser=`echo $ipadd | cut -d= -f2`
  break
    fi
done
# -==定义本脚本需要用到的变量==-
# 获取当前系统日期,格式为: 2008-04-25
DATE=`date "+%F"`
# 定义mysql 服务的主目录
DB_DIR=/usr/local/mysql
# 定义备份后的路径
BAK_DIR=/usr/local/backup
BAK_PATH=$BAK_DIR/$DATE
# 定义备份服务器IP地址
BAK_SER=192.168.1.100
# 判断备份文件存放的路径是否存在
if [ ! -d $BAK_PATH ]; then
    mkdir -p $BAK_PATH
fi
# 进入/usr/local/mysql/data  目录查看都有哪些数据库
cd $DB_DIR/data
DB_NAME=`ls -dF -1 * | grep "/$" | cut -d/ -f1`
# 利用mysqldump 对所有数据库进行SQL语句备份
for db_name in $DB_NAME
do
 $DB_DIR/bin/mysqldump $db_name > $BAK_PATH/$ser-$db_name-$DATE.sql
done
scp –pr $BAK_PATH $BAK_SER:$BAK_DIR
exit 0

3) 在A机上添加计划任务
# chmod 755 /etc/mysql-backup.sh
# crontab –e
0  12  *  *  * /etc/mysql-backup.sh
小提示
crontab 书写格式             
格式 *     *     *     *     *     Command
含意 分    时    日     月    周     指令串
取值 0-59 0-23  1-31  1-12  0-7    脚本或系统命令
 
阅读(988) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~