MySQL备份脚本

#!/bin/bash
date=`date +%Y%m%d`
backDb=$date.sql
backFile
=$date.tar.gz
backHost
=135.26.25.36 #FTP服务器IP地址
backUser=ftp                #FTP服务器用户名
backPwdpassword       #FTP密码

/usr/local/mysql/bin/mysqldump dbname -udbuser -pdbpassword > /home/backup/$backDb
echo -"DB Backup Done!/n"

tar -zcvf /home/phpeye/$backFile  /websites/phpeye/
echo -
"File Backup Done!/n"

ftp -n $backHost<<!
user $backUser $backPwd
passive
put 
/home/backup/$backDb  phpeyebackup/$backDb
bye
!

ftp -n<<!
open $backHost 21
user $backUser $backPwd
port
prompt
put 
/home/phpeye/$backFile  phpeyebackup
bye
!

rm -/home/web_happy/phpeye/$backDb
echo -"Backup Done!/n"

 

 

 

#!/usr/bin/env bash

#
# Created 2005-06-24 by Matthew Montgomery - mmontgom@rackspace.com
#
# Change: 2006-06-01 by Matthew Montgomery
#  Add support for ibbbackup for InnoDB tables
#  Add support for MySQL 4.1 and 5.0
#

DATE=`date -I`
DATADIR="/var/lib/mysql"
BASE_DIR="/mnt/drive2/backup"
BACKUP_DIR="$BASE_DIR/current"
INTERVAL="$1"
RETENTION=14 # days
HOST=`hostname -s`
MYVERSION=`mysql -Bse "SELECT substring_index(version(),'.',2)"`
###  Uncomment this line to specify the path to and enable ibbackup for hotcopy of InnoDB tables.
# IBBACKUP="/usr/local/bin/ibbackup"

if [ "$MYVERSION" = '4.1' ] || [ "$MYVERSION" = '5.0' ] ; then
 PURGELOGS='mysql -e "PURGE MASTER LOGS BEFORE DATE_SUB( NOW(), INTERVAL 1 HOUR )"'
elif [ $MYVERSION = '3.23' -o "$MYVERSION" = '4.0' ]; then
 PURGELOGS='mysql -e "RESET MASTER"'
else
echo "UNSUPPORTED MYSQL VERSION"
exit 1
fi

if [ ! $1 ];
then
 read -p "Backup Interval? (Hourly|Daily) : " INTERVAL
fi

case $INTERVAL in
 hourly | HOURLY | Hourly | 1 )
 echo "Performing HOURLY level backup -- `date`"
 mysql -e "FLUSH LOGS"
 if [ -d $BASE_DIR/$DATE ] && [ "$MYVERSION" = '4.1' -o "$MYVERSION" = '5.0' ] ; then
  rsync -aub $DATADIR/$HOST-bin.?????? $BASE_DIR/$DATE
 elif [ -d $BASE_DIR/$DATE ] && [ "$MYVERSION" = '3.23' -o "$MYVERSION" = '4.0' ] ; then
  rsync -aub $DATADIR/$HOST-bin.??? $BASE_DIR/$DATE
 else
  echo "No destination dir! please run daily backup first." 1>&2
  exit 1
 fi
 sleep 1
 find $BASE_DIR -size 98c -exec rm -rf '{}' /;
 exit 0
 ;;
 daily | DAILY | Daily | 2 )
 echo "Performing DAILY level backup -- `date`"
 if [ ! -d $BACKUP_DIR ];
 then
  echo Creating $BACKUP_DIR
  mkdir -p $BACKUP_DIR
 fi

 if [ ! -z "$IBBACKUP" ] ; then
  $IBBACKUP /etc/my.cnf /etc/my.cnf.ibbackup 2>&1
  $IBBACKUP --apply-log /etc/my.cnf.ibbackup 2>&1
  rm $BACKUP_DIR/ibbackup_logfile
 fi
 mysqlhotcopy --regexp=.* $BACKUP_DIR
 chown -R mysql: $BACKUP_DIR/
 mv $BACKUP_DIR $BASE_DIR/$DATE
 eval $PURGELOGS
 find $BASE_DIR -ctime +$RETENTION -exec rm -rf '{}' /;
 exit 0
 ;;
 * )
 echo "Invalid Selection" 1>&2
 exit 1
esac
 

编写MySQL数据库自动备份脚本是确保数据安全的重要任务,以下是详细的指南: ### 1. 确定备份策略 在编写脚本之前,需要明确备份策略。常见的备份方式包括逻辑备份和物理备份- **逻辑备份**:使用 `mysqldump` 工具进行备份,适合小规模数据库,备份文件为SQL语句,便于恢复[^1]。 - **物理备份**:直接复制数据库的物理文件(如InnoDB表空间文件),适合大规模数据库,恢复速度快[^1]。 ### 2. 设置备份环境 在编写脚本时,需要设置相关变量,包括数据库的用户名、密码、备份目录、备份文件名等。以下是一个简单的备份脚本示例: ```bash #!/bin/bash # 设置备份参数 DB_USER="root" DB_PASSWORD="password" BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d%H%M%S) BACKUP_FILE="$BACKUP_DIR/backup-$DATE.sql" # 执行备份 mysqldump -u$DB_USER -p$DB_PASSWORD --all-databases > $BACKUP_FILE # 压缩备份文件 gzip $BACKUP_FILE ``` ### 3. 定期执行备份 为了实现自动备份,可以使用 `cron` 定时任务。编辑 `crontab` 文件,添加以下行以每天凌晨2点执行备份脚本: ```bash 0 2 * * * /path/to/backup_script.sh ``` ### 4. 清理旧备份 为了避免备份文件占用过多磁盘空间,可以在脚本中添加清理旧备份的功能。例如,删除30天前的备份文件: ```bash # 删除30天前的备份 find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +30 -exec rm {} \; ``` ### 5. 发送邮件通知 为了确保备份成功执行,可以在脚本中添加邮件通知功能。使用 `mail` 命令发送邮件: ```bash # 发送备份完成邮件 echo "MySQL备份已完成,备份文件位于 $BACKUP_FILE.gz" | mail -s "MySQL Backup Completed" admin@example.com ``` ### 6. 验证备份 备份完成后,定期验证备份文件的完整性非常重要。可以使用以下命令验证 `mysqldump` 生成的SQL文件: ```bash gunzip < backup-file.sql.gz | mysql -u username -p database_name ``` ### 7. 安全措施 - **加密备份文件**:使用 `gpg` 或其他加密工具对备份文件进行加密,确保数据安全。 - **网络传输**:如果备份文件需要通过网络传输,建议使用 `scp` 或 `rsync` 等安全工具。 ### 8. 个性化调整 根据实际需求,可以对备份脚本进行个性化调整。例如,选择特定数据库进行备份,或调整备份频率。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值