MySQL数据库备份,全量备份所有数据库,并传输到别的服务器
一、备份信息
- 数据库类型:MySQL
- 备份方法:借用 MySQL 自带的 mysqldump 命令导出sql语句
- 备份的库:所有已创建的库,包括MySQL默认的库
- 备份数据:每次全量备份,非增量型备份
- 利用sh脚本 + Linux 自带的定时任务工具 crontab,实现定时备份
二、完整的sh脚本
- 完整的shell脚本:
# 数据库信息 USER_NAME="root" # 数据库登录用户名 PASSWD="root" # 数据库登录密码 HOST="localhost" # 数据库地址 ZFBM="--default-character-set=utf8" # 其他变量信息 BIN_DIR="/usr/bin" # mysql命令所在路径 BCK_DIR="/home/backup/db" # 备份文件存放目录 DATE=`date +%Y%m%d` # 日期,每天进行备份一次,每个文件通过日期进行区分 # 备份全部数据库 ${BIN_DIR}/mysqldump --opt -u${USER_NAME} -p${PASS} -h${HOST} ${ZFBM} --all-databases > ${BCK_DIR}/db101-${DATE}.sql # 导出sql语句 sleep 5m cd ${BCK_DIR} tar -zcvf db101-${DATE}.tar db101-${DATE}.sql # 进行打包 sleep 30s scp db101-${DATE}.tar root@192.168.5.102:/root/backup/db # 传输到别的服务器 sleep 1m find ${BCK_DIR} -name "db101-*.sql" -type f -mmin +1 -exec rm {} \; > /dev/null 2>&1 # 删除备份文件,-mmin +1 表示1分钟前的备份文件 find ${BCK_DIR} -name "db101-*.tar" -type f -mtime +2 -exec rm {} \; > /dev/null 2>&1 # 删除历史备份文件,-mtime +2 表示2天前的数据
三、其他
- 该脚本备份的所有的数据库文件,不是非常适合数据庞大的数据库。
- 因为会备份包括MySQL默认的库,所有恢复的时候,会覆盖本地的已创建的备份用户名和对应的密码。
- 免密传输到其他的服务器,可以参照《Linux系统通过rsa免密码登录、文件传输》。
- 单库备份:修改备份语句中 –all-databases 为库名即可。例如:备份库 classinfo
${BIN_DIR}/mysqldump --opt -u${USER} -p${PASS} -h${HOST} ${ZFBM} classinfo > ${BCK_DIR}/db101-${DATE}.sql