设为首页 收藏本站
查看: 2910|回复: 6

[经验分享] mysql使用innobackupex备份脚本

[复制链接]

尚未签到

发表于 2013-4-16 08:40:36 | 显示全部楼层 |阅读模式

[Shell] 纯文本查看 复制代码
好久没有写博客,今天更新一个mysql的备份脚本。脚本里面的help信息写的很全了。
#!/bin/bash 
 
#This is a ShellScript For mysql All DB Backup and Bin-log. 
#version v1 
#2013-04-12 
 
#此脚本为一周一个全库备份,每天一个增量备份。每周一为全库备份,其他为增量备份。 
 
# Defaults setting 
port=3306 
weekly=1 
 
#setting 
#设置数据库名,数据库登录,备份路径,日志路径,数据文件位置,以及备份方式 
#默认情况下,用sock登录mysql数据库,备份至/data/backup/db_backup/ 
BackupPath=/data/backup/db_backup/mysql_$port/ 
LogFile=/var/log/innobackupex_mysql_$port.log 
DBdataPath=/data/mysql_$port/data/ 
innobackupex=/usr/bin/innobackupex 
allbackup="$BackupPath""$port"_$(date +%Y-%m-%d)_full 
mysqlbackup="$BackupPath"mysql_$(date +%Y-%m-%d) 
frmbackup="$BackupPath"frm 
weekly=1 
next=$(expr $weekly + 1) 
#Setting End 
 
recovery_single_table(){ 
cat << EOF 
导入或导出单张表: 
  默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能, 
不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项), 
并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import(innodb_import_table_from_xtrabackup=1)选项。 
 
(1)“导出”表 
  导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--export选项将某表导出了: 
  /usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --apply-log --use-memory=4G --export /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  /usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --apply-log --use-memory=4G --export --incremental --incremental-dir=/data/backup/db_backup/mysql_3312/3312_2013-04-16 /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  上面是基于增量备份的,所以--export两次。多次类似。 
(2)“导入”表 
  要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入: 
  mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;或者如果表结构没有问题的话,可以mysql> truncate table mytable; 
  然后将此表的表空间删除: 
  mysql> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE; 
  接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,更改为mysql.mysql的权限,然后使用如下命令将其“导入”: 
  mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE; 
EOF 
} 
 
recovery_all_data(){ 
cat << EOF 
全库恢复: 
1.解压包。 
2./usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --apply-log /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  这里的--apply-log指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中. 
3./etc/init.d/mysql_3312 stop;cd /data/mysql_3312/;mv data data-bak;mkdir data;chown mysql.root data; 
  要恢复需要停掉mysql,然后把数据文件删掉,为了保险把data文件夹改名,新建data文件夹。 
4./usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --copy-back /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  这里的--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常启动。 
5.chown -R mysql.root /data/mysql_3312/data/;/etc/init.d/mysql_3312 start 
  恢复完之后,需要更改数据文件为mysql的使用用户,然后启动mysql。 
6.从库的话,需要查看xtrabackup_slave_info信息,看同步的MASTER_LOG_FILE和MASTER_LOG_POS。 
  mysql> change master to master_host='172.16.2.25',master_port=3312,master_user='repl',master_password='xxx',master_log_file='mysql-bin.000902',master_log_pos=143068038; 
EOF 
} 
 
recovery_incremental_data(){ 
cat << EOF 
增量恢复 
1.解压包。 
2./usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --apply-log /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  这里的--apply-log指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中. 
3./usr/bin/innobackupex --defaults-file=/data/mysql_3309/mysql_3309.cnf --apply-log --use-memory=4G --incremental --incremental-dir=/data/backup/db_backup/mysql_3312/3312_2013-04-16 /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  这里的--incremental-dir为全库备份的(或者上一次备份的) 
4./etc/init.d/mysql_3312 stop;cd /data/mysql_3312/;mv data data-bak;mkdir data;chown mysql.root data; 
  要恢复需要停掉mysql,然后把数据文件删掉,为了保险把data文件夹改名,新建data文件夹。 
5./usr/bin/innobackupex --defaults-file=/data/mysql_3312/mysql_3312.cnf --copy-back --use-memory=4G /data/backup/db_backup/mysql_3312/3312_2013-04-15_full 
  这里的--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常启动。 
6.chown -R mysql.root /data/mysql_3312/data/;/etc/init.d/mysql_3312 start 
  恢复完之后,需要更改数据文件为mysql的使用用户,然后启动mysql。 
7.从库的话,需要查看xtrabackup_slave_info信息,看同步的MASTER_LOG_FILE和MASTER_LOG_POS。 
  mysql> change master to master_host='172.16.2.25',master_port=3312,master_user='repl',master_password='xxx',master_log_file='mysql-bin.000902',master_log_pos=143068038; 
EOF 
} 
 
usage(){ 
cat << EOF 
Usage: 
  这是一个用来备份mysql的shell脚本,主要是用innobackupex来备份数据,用mysqldump来备份表结构,bin-log是每天备份前一天的。 
  备份策略是每周一个全库备份,其他天是增量备份。 
Options: 
  -h|--help 
    显示帮助信息。 
  -p|--port 
    设置mysql端口,默认3306. 
  -w|weekly 
    设置一周内哪一天进行全库备份。默认周一. 
  --recovery_single_table 
    显示恢复单张表方法. 
  --recovery_all_data 
    显示全备份恢复方法. 
  --recovery_incremental_data 
    显示增量备份恢复方法. 
         
Example: 
  $0 -p 3307 -w 1 
EOF 
} 
 
while test -n "$1"; do 
    case "$1" in 
    -p|--port) 
        port=$2 
        shift 
        ;; 
    -h|--help) 
        echo 
        usage 
        echo 
        exit 
        ;; 
    -w|weekly) 
        weekly=$2 
        shift 
        ;; 
    --recovery_single_table) 
        echo 
        recovery_single_table 
        echo 
        exit 
        ;; 
    --recovery_all_data) 
        echo 
        recovery_all_data 
        echo 
        exit 
        ;; 
    --recovery_incremental_data) 
        echo 
        recovery_incremental_data 
        echo 
        exit 
        ;; 
    *) 
        echo "Unknown argument: $1" 
        usage 
        echo  
        exit 
        ;; 
    esac 
    shift 
done 
 
#setting 
#设置数据库名,数据库登录,备份路径,日志路径,数据文件位置,以及备份方式 
#默认情况下,用sock登录mysql数据库,备份至/data/backup/db_backup/ 
BackupPath=/data/backup/db_backup/mysql_$port/ 
LogFile=/var/log/innobackupex_mysql_$port.log 
DBdataPath=/data/mysql_$port/data/ 
innobackupex=/usr/bin/innobackupex 
allbackup="$BackupPath""$port"_$(date +%Y-%m-%d)_full 
mysqlbackup="$BackupPath"mysql_$(date +%Y-%m-%d) 
frmbackup="$BackupPath"frm 
next=$(expr $weekly + 1) 
#Setting End 
 
echo "---------------------------------------------------------------------" >> $LogFile 
echo " $(date +"%y-%m-%d %H:%M:%S") Start " >> $LogFile 
echo "---------------------------------------------------------------------" >> $LogFile 
 
#check folder  
if ! [ -d $BackupPath ];then 
    /bin/mkdir -p $BackupPath 
fi 
 
if ! [ -d $mysqlbackup ];then 
    /bin/mkdir -p $mysqlbackup 
fi 
 
if ! [ -d $frmbackup ];then 
    /bin/mkdir -p $frmbackup 
fi 
 
if ! [ -d $BackupPath/mysql-bin ];then 
    /bin/mkdir -p $BackupPath/mysql-bin 
fi 
 
#Backup $port All Database 
if [ -f "$BackupPath""$port"_$(date +%Y-%m-%d).tar.gz ];then 
    echo "["$BackupPath""$port"_$(date +%Y-%m-%d).tar.gz]The Backup File is exists,Can't Backup!" >> $LogFile 
else 
    #full backup 
    if [ $(date +%u) == $weekly ];then 
            $innobackupex --defaults-file=/data/mysql_$port/mysql_$port.cnf --sock=/data/mysql_$port/mysql.sock --slave-info --no-timestamp $allbackup  >> /dev/null 2>&1 
            cd $BackupPath;tar zcf "$port"_$(date +%Y-%m-%d)_full.tar.gz "$port"_$(date +%Y-%m-%d) >> /dev/null 2>&1 
            echo "["$BackupPath""$port"_$(date +%Y-%m-%d)_full.tar.gz]Backup Success!" >> $LogFile 
    #incremental backup 
    elif [ $(date +%u) == $next ];then 
        $innobackupex --defaults-file=/data/mysql_$port/mysql_$port.cnf --sock=/data/mysql_$port/mysql.sock --slave-info --no-timestamp --incremental --incremental-basedir="$BackupPath""$port"_$(date +%Y-%m-%d --date='1 days ago')_full "$BackupPath""$port"_$(date +%Y-%m-%d) >> /dev/null 2>&1 
        cd $BackupPath;tar zcf "$port"_$(date +%Y-%m-%d).tar.gz "$port"_$(date +%Y-%m-%d) >> /dev/null 2>&1 
        echo "["$BackupPath""$port"_$(date +%Y-%m-%d).tar.gz]Backup Success!" >> $LogFile 
        /bin/rm -rf "$port"_$(date +%Y-%m-%d --date='1 days ago')_full 
        echo "[/bin/rm -rf "$port"_$(date +%Y-%m-%d --date='1 days ago')_full]Delete Success!" >> $LogFile 
    else 
        $innobackupex --defaults-file=/data/mysql_$port/mysql_$port.cnf --sock=/data/mysql_$port/mysql.sock --slave-info --no-timestamp --incremental --incremental-basedir="$BackupPath""$port"_$(date +%Y-%m-%d --date='1 days ago') "$BackupPath""$port"_$(date +%Y-%m-%d) >> /dev/null 2>&1 
        cd $BackupPath;tar zcf "$port"_$(date +%Y-%m-%d).tar.gz "$port"_$(date +%Y-%m-%d) >> /dev/null 2>&1 
        echo "["$BackupPath""$port"_$(date +%Y-%m-%d).tar.gz]Backup Success!" >> $LogFile 
        /bin/rm -rf "$port"_$(date +%Y-%m-%d --date='1 days ago') 
        echo "[/bin/rm -rf "$port"_$(date +%Y-%m-%d --date='1 days ago')_full]Delete Success!" >> $LogFile 
    fi 
fi 
## backup database mysql ########## 
#if [ -f "$BackupPath"mysql_$(date +%Y-%m-%d).tar.gz ];then 
#   echo "["$BackupPath"mysql_$(date +%Y-%m-%d).tar.gz]The Backup File is exists,Can't Backup!" >> $LogFile 
#else 
#    /usr/bin/mysqlhotcopy --sock=/data/mysql_$port/mysql.sock mysql $mysqlbackup >> /dev/null 2>&1 
#    tar -czf $mysqlbackup.tar.gz $mysqlbackup >> /dev/null 2>&1 
#    /bin/rm -rf $mysqlbackup 
#    echo "["$BackupPath"mysql_$(date +%Y-%m-%d).tar.gz]Backup Success!" >> $LogFile 
#fi 
 
## backup database .frm ########## 
if [ -f "$frmbackup"/"$port"_$(date +%Y-%m-%d).sql ];then 
    echo "["$frmbackup"/"$port"_$(date +%Y-%m-%d).sql]The Backup File is exists,Can't Backup!" >> $LogFile 
else 
    mysqldump --opt -d -A -S /data/mysql_$port/mysql.sock > "$frmbackup"/"$port"_$(date +%Y-%m-%d).sql 
    echo "["$frmbackup"/"$port"_$(date +%Y-%m-%d).sql]Backup Success!" >> $LogFile 
fi 
 
## backup mysql-bin ############## 
for binlog in $(find /data/mysql_$port/data/ -name "mysql-bin*"  -mtime 1);do 
    /bin/cp $binlog "$BackupPath"mysql-bin/ 
    echo "[$binlog]Backup Success! " >> $LogFile 
done 
/usr/bin/mysql -S /data/mysql_$port/mysql.sock -e 'flush logs;' 
 
echo "-----------------------------------------------------------------------" >> $LogFile 
echo " $(date +"%y-%m-%d %H:%M:%S") Finish " >> $LogFile 
echo "-----------------------------------------------------------------------" >> $LogFile 
 



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-5226-1-1.html 上篇帖子: linux设置以太网脚本 下篇帖子: Web的Mail服务器搭建脚本显示 mysql

尚未签到

发表于 2013-4-16 08:49:38 | 显示全部楼层
锻炼肌肉,防止挨揍!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

发表于 2013-5-18 11:24:04 | 显示全部楼层
此地禁止大小便,违者没收工具。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-21 21:48:58 | 显示全部楼层
我抢、我抢、我抢沙发~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-27 05:56:19 | 显示全部楼层
男人靠的住,母猪能上树!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-2 04:05:53 | 显示全部楼层
勃起不是万能的,但不能勃起却是万万都不能的!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-6 13:04:51 | 显示全部楼层
微机原理闹危机,随机过程随机过,实变函数学十遍,汇编语言不会编!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表