作为一名不资深的运维工程师和python爱好者,一定要学习一下MySQL。
下面简单的实现了一下如何将MySQL的数据库备份到一个远程Windows服务器当中。
- 首先需要在Windows(IP:192.168.1.5)上面创建一个共享路径:在D盘下面创建一个目录名为HugoShare,在HugoShare目录的属性中点击Share选项卡,在下拉框中找到Everyone,然后点击Add添加到共享用户组中,在权限中选择Read/Write,再Share一下。在Securiy选项卡中找到Everyone这个用户,看看他对这个目录的权限是不是Full,如果不是编辑一下,为了方便起见,先设置成Full。这个时候,你的\\192.168.1.5\HugoShare应该是可以被任何人访问的。
- 在MySQL服务端中测试一下上面的共享目录是否能挂载
首先创建一个目录,mkdir /mnt/HugoShare/,然后安装cifs工具,apt-get install cifs-utils 安装完成输入下面命令mount.cifs //192.168.1.5/HugoShare /mnt/HugoShare -o user="hugo",pass="woaini"。如果挂载成功会返回0,echo $?就会显示0。也可以mount -l | grep "/mnt/HugoShare"看一下是不是真的挂载上了。
- 貌似准备工作已经完成,接下来就写一个脚本
#!/bin/bash
# mysql数据库备份脚本
# 数据库配置
USERNAME=root
PASSWORD="woaini"
DATABASE="hugo"
HOSTNAME="localhost"
# 备份选项配置
BACKUP_SERVER="//192.168.1.5/HugoShare/"
BACKUP_SERVER_OPTIONS="user=zed,pass=woaini"
BACKUP_DIR=/mnt/HugoShare
LOGFILE=$BACKUP_DIR/backup.log
DATE=`date ‘+%Y%m%d-%H%M‘`
DUMPFILE=$DATE.bak.sql
ARCHIVE=$DATE.bak.sql.tgz
OPTIONS="-h$HOSTNAME -u$USERNAME -p$PASSWORD $DATABASE"
# 检查备份目录是否存在
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p $BACKUP_DIR
fi
# 检查windows目录是否挂载
mount -l | grep $BACKUP_DIR > /dev/null 2>&1
if [ $? == 1 ]
then
mount.cifs $BACKUP_SERVER $BACKUP_DIR -o $BACKUP_SERVER_OPTIONS
echo " ==================" >> $LOGFILE
echo "Windows netshare mounted:$BACKUP_SERVER" >> $LOGFILE
fi
# 日志功能
echo " " >> $LOGFILE
echo "====================" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "==================== " >> $LOGFILE
# 备份并归档
cd $BACKUP_DIR
mysqldump $OPTIONS > $DUMPFILE
if [ $? == 0 ] ;
then
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
echo "[$ARCHIVE] backup successful!" >> $LOGFILE
rm -f $DUMPFILE
else
echo "Backup failed " >> $LOGFILE
fi
脚本添加执行权限chmod 777 mysql_dump.sh 看看效果。
可以改进的地方:
接下来的工作就是设置Windows共享目录的安全,指定用户访问。其次就是修改一下脚本,指定备份的整个数据库还是备份单个表,可以在crond中添加计划任务,并且设置日志的轮询工作。更好的方式是设置日志转发邮件的功能。
初次结识shell和MySQL。多多指教!