zoukankan      html  css  js  c++  java
  • Mysqldump 备份说明及数据库备份脚本分享-运维笔记

    MySQLdump是MySQL自带的导出数据工具,即mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。Mysqldump是一个客户端逻辑备份的工作,备份的SQL文件可以在其他MySQL服务器上进行还原。

    如需备份,则至少需要对该表的select权限,需要备份视图则需要改账户具有SHOW VIEW权限,触发器需要TRIGGER。如需锁表,则不可使用--single-transaction选项。其他权限暂未列出。
    如需还原,则需要对应的执行权限,如create表,则需要对该库的create权限。

    Mysqldump导出可以包括ALTER DATABASE与相关更改,其中包括导出元数据、更改字符编码,在导入对应文件时,相应的权限更改也会发生影响。如果在服务器上备份的表均为MyISAM,也可以使用mysqlhotcopy来完成任务。

    从性能和伸缩性考虑,mysqldump的优势包括:在输出之前可以很方便的查看或编辑文件,你还可以克隆数据库与DBA的工作,或者将生产环境下的数据进行微小测试。这不是作为快速备份或可伸缩性很强的方案。即针对不同大小的数据需要安排合理时间,在需要还原时速度并不快,因为需要重新进行I/O、创建索引等。

    对于大量数据来说,物理备份可能更为合适,因为它可以快速还原。

    - 如果你的表以Innodb引擎为主,可以考虑使用MySQL的mysqlbackup命令。因为他提供了最好的Innodb备份:它也可以备份其他如MyIsAM与其他存储引擎;提供了更多的备份参数进行选择。详情见手册 25.2 “MySQL Enterprise Backup Overview”

    - 如果你的表以MyISAM引擎为主,可以考虑使用mysqlhotcopy来替代,它可能比mysqldump表现更为好,详情见mysqlhotcopy手册。

    Mysqldump可以行级导出数据,或者也可以将整个表载入内存一次性导出,如果将所有数据导入内存可能会面临内存缓冲区不够的问题。如果要行级导出数据,使用--quick选项(或者--opt,它支持--quick)。--opt选项是默认选项,所以为了保证内存缓冲区,使用--skip-quick。

    如果使用高版本的mysqldump来备份一个低版本的MySQL服务器中的数据,使用--skip-opt代替--opt或者-- extended-insert选项。

    下面对它的使用进行总结性梳理:

    查询该命令的帮助信息(有很多参数,具体也可以man一下)
    [root@Mysql-node1 ~]# mysqldump --help
    
    常用的几个选项
    --add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句;
    --add-locks:备份数据库表时锁定数据库表;
    --all-databases(即-A):备份MySQL服务器上的所有数据库;
    --comments:添加注释信息;
    --compact:压缩模式,产生更少的输出;
    --complete-insert:输出完成的插入语句;
    --databases(即-B):指定要备份的数据库;
    --default-character-set:指定默认字符集;
    --force(即-f):当出现错误时仍然继续备份操作;
    --host:指定要备份数据库的服务器;
    --lock-tables:备份前,锁定所有数据库表;
    --no-create-db:禁止生成创建数据库语句;
    --no-create-info:禁止生成创建数据库库表语句;
    --password:连接MySQL服务器的密码;
    --port:MySQL服务器的端口号;
    --user:连接MySQL服务器的用户名。
    --no-data(即-d):只导出表结构。
    --quick,(即-q):快速导出。
    --xml,(即-X):导出为xml文件。
    --tables:覆盖 --databases or -B选项,后面所跟参数被视作表名。
    --default-character-set,字符集设置。比如--default-character-set=gb2312、--default-character-set=utf8

    参数--lock-tables 表示的是一次性锁定当前库的所有表, 而不是锁定当前导出表! 例如:
    # mysqldump -u root -p --default-character-set=utf8 --opt --extended-insert=false --lock-tables MyDB > db_backup_MyDB.sql 

    实例说明:

    1)导出、导入所有的库(--all-databases,  -A   导出全部数据库)

    导出所有的库
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 --all-databases >/opt/all.sql 
    Warning: Using a password on the command line interface can be insecure.
    
    导入所有的库
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/all.sql                
    Warning: Using a password on the command line interface can be insecure.
    
    或者
    mysql> source /opt/all.sql;

    2)导出、导入某个库(比如kevin库)

    导出kevin库
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 kevin > /opt/kevin.sql
    Warning: Using a password on the command line interface can be insecure.
    
    导入kevin库(前提是kevin库要存在,如果没有,在导入前先创建kevin空库)
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin.sql
    Warning: Using a password on the command line interface can be insecure.
    
    或者
    mysql> use kevin;
    mysql> source /opt/all.sql;

    3)导出、导入某几个库(比如kevin、grace库)(--databases, -B 导出部分数据库)

    导出kevin、grace库
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -B kevin grace > /opt/kevin_grace.sql
    Warning: Using a password on the command line interface can be insecure.
    
    导入kevin、grace库(多个库的导入、恢复数据操作,不需要要求这些库必须存在,如没有存在,不需要提前创建这些空库)
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/kevin_grace.sql                   
    Warning: Using a password on the command line interface can be insecure.
    
    或者
    mysql> source /opt/kevin_grace.sql;
    

    4)导出、导入某个库的某些表数据

    导出kevin库的haha、heihei表数据(可以在导出时加--add-locks参数,表示导出时锁定数据库表;这里没有添加)
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 kevin haha heihei > /opt/kevin_hahei.sql         
    Warning: Using a password on the command line interface can be insecure.
    
    导入kevin库的haha、heihei表数据(要保证kevin库真实存在,如果没有,需要提前创建)
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_hahei.sql
    Warning: Using a password on the command line interface can be insecure.
    
    或者
    mysql> use kevin;
    Database changed
    mysql> source /opt/kevin_hahei.sql;

    5)只导出数据库结构,不导出数据(--no-data, -d  只导出表结构,不导出表数据)

    导出kevin库下所有的表结构(不导出表数据)(去掉下面的--add-drop-table参数也可以)
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -d --add-drop-table kevin > /opt/kevin_table.sql            
    Warning: Using a password on the command line interface can be insecure.
     
    导入kevin库的表结构(前提要保证kevin库真实存在)
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_table.sql
    Warning: Using a password on the command line interface can be insecure.
     
    或者
    mysql> use kevin;
    Database changed
    mysql> source /opt/kevin_table.sql;
     
    ----------------------------------------------------------------------------------------------------
    如果是导出某个库下的一个或几个表结构(不包括表数据),命令如下(加不加--add-drop-table参数都可以):
    [root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -d kevin haha heihei > /opt/kevin_table_2.sql              
    Warning: Using a password on the command line interface can be insecure.
    
    导入上面备份的数据时,要保证kevin提前真实存在。
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_table_2.sql 
    Warning: Using a password on the command line interface can be insecure.

    6)完整导出时过滤掉某些库(使用--databases,而不是--all-databases)

    如下在导出整个数据库时,过滤掉information_schema、mysql、test、performance_schema这几个库
    [root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database"                                      
    information_schema
    grace
    kevin
    mysql
    performance_schema
    test
    
    [root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database|information_schema|mysql|test|performance_schema"
    grace
    kevin
    
    [root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database|information_schema|mysql|test|performance_schema"|xargs mysqldump -uroot -p123456 --databases > /opt/mysql_dump.sql
    
    导入上面备份的库(这些库不需要真实存在,恢复时如果库不存在,会自动创建)
    [root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/mysql_dump.sql
    Warning: Using a password on the command line interface can be insecure.
    
    或者:
    mysql> source /opt/kevin_grace.sql;
    

                                                                           Mysqldump日常操作语句集锦                                                                    

    mysqldump的几种常用方法:
    1)导出整个数据库(包括数据库中的数据)
    mysqldump -u username -p dbname > dbname.sql   
      
    2)导出数据库结构(不含数据)
    mysqldump -u username -p -d dbname > dbname.sql   
      
    3)导出数据库中的某张数据表(包含数据)
    mysqldump -u username -p dbname tablename > tablename.sql   
      
    4)导出数据库中的某张数据表的表结构(不含数据)
    mysqldump -u username -p -d dbname tablename > tablename.sql  
      
    =============================================================================
    mysqldump常用参数说明(适用于mysql 5.6版本, mysql 5.7版本有的就不太适用了)
    
    --all-databases , -A 导出全部数据库
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases > /root/db.sql
     
    --all-tablespaces , -Y导出全部表空间。(-y不导出任何表空间信息)
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --all-tablespaces --no-tablespaces > /root/db.sql
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --no-tablespaces > /root/db.sql 
      
    --add-drop-database每个数据库创建之前添加drop数据库语句。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --add-drop-database > /root/db.sql
      
    --add-drop-table每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases   > /root/db.sql          #默认添加drop语句
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-add-drop-table > /root/db.sql      #取消drop语句
      
    --add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases > /root/db.sql       #默认添加LOCK语句
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-add-locks   > /root/db.sql       #取消LOCK语句
      
    --comments附加注释信息。默认为打开,可以用--skip-comments取消
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases  > /root/db.sql         #默认记录注释
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-comments  > /root/db.sql     #取消注释
      
    --compact导出更少的输出信息(用于调试)。去掉注释和头尾等结构。
    可以使用选项:--skip-add-drop-table 、--skip-add-locks、--skip-comments、--skip-disable-keys
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --compact > /root/db.sql
     
    --complete-insert, -c使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --complete-insert > /root/db.sql
      
    --compress, -C在客户端和服务器之间启用压缩传递所有信息
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --compress > /root/db.sql
      
    --databases, -B导出几个数据库。参数后面所有名字参量都被看作数据库名。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --databases test mysql > /root/db.sql
    
    --debug-info输出调试信息并退出
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --debug-info > /root/db.sql
      
    --default-character-set设置默认字符集,默认值为utf8
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --default-character-set=utf8 > /root/db.sql
      
    --delayed-insert采用延时插入方式(INSERT DELAYED)导出数据
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --delayed-insert > /root/db.sql
      
    --events, -E导出事件。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --events > /root/db.sql
      
    --flush-logs开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。
    除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新
    日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --flush-logs > /root/db.sql
      
    --flush-privileges在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql
    数据库数据的任何时候。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --flush-privileges > /root/db.sql
      
    --force在导出过程中忽略出现的SQL错误。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --force > /root/db.sql
      
    --host, -h需要导出的主机信息
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases > /root/db.sql
      
    --ignore-table不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user > /root/db.sql
      
    --lock-all-tables, -x提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables > /root/db.sql
      
    --lock-tables, -l开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个
    更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间
    的逻辑一致性。不同数据库表的导出状态可以完全不同。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --lock-tables > /root/db.sql
      
    --no-create-db, -n只导出数据,而不添加CREATE DATABASE 语句。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-create-db > /root/db.sql
      
    --no-create-info, -t只导出数据,而不添加CREATE TABLE 语句。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-create-info > /root/db.sql
      
    --no-data, -d不导出任何数据,只导出数据库表结构。
    [root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-data > /root/db.sql

                                                                        备份Mysql数据库的通常使用命令                                                         

    1)备份kevin库 (两种方法)
    # mysqldump --single-transaction --master-data=2 --triggers --routines --database kevin -uroot -p123456 > /root/kevin.sql
    # mysqldump -uroot -p123456 -B -F -R -x --master-data=2 kevin|gzip >/opt/backup/kevin_$(date +%F).sql.gz
    
    参数说明:
    -B:指定数据库
    -F:刷新日志
    -R:备份存储过程等
    -x:锁表
    --master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息
    
    这里稍微注意下:
    mysql5.6使用mysqldump备份时,指定备份的具体库,使用--database
    mysql5.7使用mysqldump备份时,指定备份的具体库,使用--databases
    
    2)备份整个数据库(基于打开GTID功能的Mysql)。下面这两种备份方法中,不能在下面命令中添加具体的库,比如kevin库
    # mysqldump -u root -p'123456' --lock-all-tables --master-data=2 --flush-logs --all-databases --triggers --routines --events > 205_slave.sql
    # mysqldump -uroot -p'123456' -B -A -F --set-gtid-purged=OFF  --master-data=2 --single-transaction  --events |gzip >/root/205_$(date +%F).sql.gz
    
    以上备份的sql文件,恢复时,直接执行"mysql -uroot -p123456 < file.sql" 或者登录数据库执行"source file.sql" 命令进行即可恢复备份的数据!不需要提前创建要恢复的库!

                                                                       mysql数据库相关备份策略的脚本分享                                                      

    本机mysql采用的是多库多实例方案,即一个库对应一个实例,有多少个库就开启多少个端口的mysql实例。
    正常情况下都采用这种方案,一库一实例集群,隔离性和可辨识性会很强,性能也更强。
    
    如果是虚拟机,机器性能有限,可以一个实例开启多个库。比如一个实例对应3个库,开启三个实例,一台机器总共开9个库,
    然后针对这三个实例再做集群(比如一主两从,即再加两台机器,分别针对每台机器的三个实例做各自的一主两从)
    
    mysql的备份脚本:
    [app@kevin-mysql01 scripts]$ pwd
    /home/scripts
    [app@kevin-mysql01 scripts]$ ls
    dump_full.sh  full_backup_mysql.sh  incremental_backup_mysql.sh  shibo_databackup.sh  rsync.sh
     
    1)
    [app@kevin-mysql01 scripts]$ cat dump_full.sh
    #!/bin/bash
    #注释:mysql DB的全库备份脚本 
    DB_USER='mybak'
    DATE=`date -d"today" +%Y%m%d`
    TIME=`date "+%Y-%m-%d %H:%M:%S"`
    echo '--------------开始分库分表备份:开始时间为 '$TIME
    for port in `ps -ef | grep mysql| grep socket| grep datadir| awk -F= '{print $NF}'`
      do
        BEGIN=`date "+%Y-%m-%d %H:%M:%S"`
        BEGIN_T=`date -d "$BEGIN" +%s`
        echo '备份'$port'端口号的mysql实例,开始时间为 '$BEGIN
        BACKUP_DIR=/data/backup/$DATE/$port;
        mkdir -p  $BACKUP_DIR;
        ##避免循环的port和sock不匹配
        sock=`ps -ef | grep mysql| grep socket| grep datadir|awk -F".pid" '{print $NF}'| grep $port`
        DB_PASSWORD='MySQL123.'   
        #过滤掉MySQL自带的DB
        for i in `/usr/local/mysql/bin/mysql -u$DB_USER -p$DB_PASSWORD  $sock -BN -e"show databases;" |sed '/^performance_schema$/'d|sed '/^mysql/'d |sed '/^information_schema$/'d|sed '/^information_schema$/'d|sed '/^test$/'d  `
        do
          sudo  /usr/local/mysql/bin/mysqldump -u$DB_USER -p$DB_PASSWORD $sock --master-data=2 -q  -c  --skip-add-locks  -R -E -B $i > $BACKUP_DIR/$date$i.sql
        done
        END=`date "+%Y-%m-%d %H:%M:%S"`
        END_T=`date -d "$END" +%s`
        TIME_INVENTAL_M=$[($END_T-$BEGIN_T)/60]
        TIME_INVENTAL_S=$[($END_T-$BEGIN_T)%60]
        echo '备份'$port'端口号的mysql实例于' $END '备份完成,使用时间为 '$TIME_INVENTAL_M'分钟'$TIME_INVENTAL_S'秒'
             #备份文件的处理
             cd $BACKUP_DIR/..
             tar -zczf $port'_'$(date +%F_%H-%M).tar.gz $port
             #解压 tar -zvxf  $port.tar.gz
             rm -rf $port
    done
    TIME_END=`date "+%Y-%m-%d %H:%M:%S"`
    echo '--------------backup all database successfully!!!结束时间:' $TIME_END
    #删除60天以前的备份
    find /data/backup/ -name '*'`date +%Y`'*' -type d -mtime  +60 -exec rm -rf  {} ;
     
    2)
    [app@kevin-mysql01 scripts]$ cat full_backup_mysql.sh
    #!/bin/sh
    #########################################################################
    ## Description: Mysql全量备份脚本
    ## File Name: full-backup-mysql.sh
    ## Author: wangshibo
    ## mail: wangshibo@************
    ## Created Time: 2017年9月11日 14:17:09
    ##########################################################################
    OneMonthAgo=`date -d "2 month ago"  +%Y%m%d`
    today=`date +%Y%m%d`
    datetime=`date +%Y%m%d-%H-%M-%S`
    config=/etc/mykedata_3326.cnf
    basePath=/data/backup
    logfilePath=$basePath/logs
    logfile=$logfilePath/full_$datetime.log
    USER=mybak
    PASSWD=1az2wsx3edc@sb
    SOCKET=/data/mysqldata/kedata/mysql.sock
    dataBases="huoqiu batchdb shenzheng tianjin asset bc_asset shanghai vered_dataplatform aomen"
    echo 'Full backup mysql in ' $path > $logfile
    path=$basePath/full_$datetime
    mkdir -p $path
    sudo /usr/bin/innobackupex  --defaults-file=$config  --user=$USER --password=$PASSWD --socket=$SOCKET --compress --compress-threads=2 --compress-chunk-size=64K --host=localhost  $path --no-timestamp  > $logfile 2>&1
    #--safe-slave-backup
    sudo chown app.app $path -R
    ret=`tail -n 2 $logfile |grep "completed OK"|wc -l`
    if [ "$ret" =  1 ] ; then
            echo 'delete expired backup ' $basePath/$OneMonthAgo  >> $logfile
            echo $path > $logfilePath/last_backup_sucess.log
            rm -rf $basePath/full_$OneMonthAgo*
            rm -f   $logfilePath/full_$OneMonthAgo*.log
    else
      echo 'backup failure ,no delete expired backup'  >> $logfile
    fi
     
    if [ "$ret" = 1 ] ;then
        status=0
    else
        status=1
    fi
    echo $status
    ts=`date +%s`;
    curl -X POST -d "[{"metric": "backup_status", "endpoint": "bl2-mysql01.veredholdings.cn", "timestamp": $ts,"step":86400,"value": $status,"counterType": "GAUGE","tags": ""}]" http://127.0.0.1:1988/v1/push
     
    3)
    [app@kevin-mysql01 scripts]$ cat incremental_backup_mysql.sh
    #!/bin/sh
    #########################################################################
    ## Description: Mysql增量备份脚本
    ## File Name: incremental-backup-mysql.sh
    ## Author: wangshibo
    ## mail: wangshibo@************
    ## Created Time: 2018年1月11日 14:17:09
    ##########################################################################
    today=`date +%Y%m%d`
    datetime=`date +%Y%m%d-%H-%M-%S`
    config=/etc/mykedata_3326.cnf
    basePath=/data/backup
    logfilePath=$basePath/logs
    logfile=$logfilePath/incr_$datetime.log
    USER=mybak
    PASSWD=1az2wsx3edc@sb
    dataBases="huoqiu batchdb shenzheng tianjin shanghai asset aomen"
     
    pid=`ps -ef | grep -v "grep" |grep -i innobackupex|awk '{print $2}'|head -n 1`
    if [ -z $pid ]
    then
      echo " start incremental backup database " >> $logfile
      OneMonthAgo=`date -d "1 month ago"  +%Y%m%d`
      path=$basePath/incr_$datetime
      mkdir -p $path
      last_backup=`cat $logfilePath/last_backup_sucess.log| head -1`
      echo " last backup is ===> " $last_backup >> $logfile
    sudo /usr/bin/innobackupex  --defaults-file=$config  --user=$USER --password=$PASSWD --compress --compress-threads=2 --compress-chunk-size=64K --slave-info  --host=localhost --incremental $path --incremental-basedir=$last_backup --databases="${dataBases}" --no-timestamp >> $logfile 2>&1
    #--safe-slave-backup
    sudo chown app.app $path -R
      ret=`tail -n 2 $logfile |grep "completed OK"|wc -l`
      if [ "$ret" =  1 ] ; then
        echo 'delete expired backup ' $basePath/incr_$OneMonthAgo*  >> $logfile
        rm -rf $basePath/incr_$OneMonthAgo*
        rm -f $logfilePath/incr_$OneMonthAgo*.log
        echo $path > $logfilePath/last_backup_sucess.log
      else
        echo 'backup failure ,no delete expired backup'  >> $logfile
      fi
    else
       echo "****** innobackupex in backup database  ****** "  >> $logfile
    fi
     
    4)
    [app@kevin-mysql01 scripts]$ cat shibo_databackup.sh
    #!/bin/bash
    USERNAME=root
    PASSWORD=kevin@qwe123!@#s
    DATE=`date +%Y-%m-%d`
    OLDDATE=`date +%Y-%m-%d -d '-30 days'`
     
    MYSQL=/usr/local/mysql/bin/mysql
    MYSQLDUMP=/usr/local/mysql/bin/mysqldump
    MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
    SOCKET=/data/mysqldata/kedata/mysql.sock
    BACKDIR=/data/backup/
     
    [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
    [ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
    [ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE}
     
    for DBNAME in anhui huoqiu beijing  shenzheng shanghai tianjin  wangshibo aomen
    do
       ${MYSQLDUMP} --opt -u${USERNAME} -p${PASSWORD} -S${SOCKET} ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz
       logger "${DBNAME} has been backup successful - $DATE"
       /bin/sleep 5
    done
     
    5)
    [app@kevin-mysql01 scripts]$ cat rsync.sh
    #!/bin/bash
    datetime=`date +%Y%m%d-%H-%M-%S`
    logfile=/data/backup/rsync.log
    echo "$datetime Rsync backup mysql start "  >> $logfile
    sudo rsync -e "ssh -p6666" -avpgolr /data/backup kevin@192.168.10.30:/data/backup_data/kevin/DB_bak/192.168.10.163/ >> $logfile 2>&1
     
    ret=`tail -n 1 $logfile |grep "total size"|wc -l`
    if [ "$ret" =  1 ] ; then
            echo "$datetime Rsync backup mysql finish " >> $logfile
    else
            echo "$datetime Rsync backup failure ,pls sendmail"  >> $logfile
    fi
  • 相关阅读:
    Matching「CEOI2011」
    中位数之中位数「NOIP多校联考 2019」
    积木「CSP-S全国排位赛第一场」
    序列「CSP-S全国排位赛第一场」
    GT考试「HNOI2008」
    动物园「NOI2014」
    Radio Transmission「BOI2009」
    小Z的袜子「国家集训队」
    BZOJ3624: [Apio2008]免费道路
    BZOJ1190: [HNOI2007]梦幻岛宝珠
  • 原文地址:https://www.cnblogs.com/kevingrace/p/9403353.html
Copyright © 2011-2022 走看看