zoukankan      html  css  js  c++  java
  • 数据库备份mysqldump

    |——好友说:有些知识就是石头,走上这条路就没法绕过,就是牙齿啃碎了也要把它啃下来。

    ——————————————————————————————————————————

    针对当前备份做一个总结记忆:

    当前策略是保存一个星期的全量备份,体积在几百M,已经相当大。随着数据量的增大并非长久之计。

    |——备份出文件  mysqldump

    #!/bin/bash
     
    BACKDIR=/data/backupSql
     
    if [ ! -d ${BACKDIR} ]
    then
    mkdir -p ${BACKDIR}
    fi
     
    cd ${BACKDIR}
    DumpFile=`date +%F`.sql.gz
    SevenDaysAgoFile=`date +%F -d "-7 days"`.sql.gz
     
    /usr/local/services/mysql/bin/mysqldump -S /tmp/mysql5.sock -R --opt --all-databases --single-transaction  --flush-logs --master-data=2 | gzip > /${BACKDIR}/${DumpFile}
     
    if [ $? -ne 0 ]
        then
        echo "############################################"
        echo "#Wanning : mysqldump commend running fail!!#"
        echo "############################################"
    else
        rm -f ${SevenDaysAgoFile};
        echo "############################################"
        echo "#Ok : mysqldump commend running success!!#"
        echo "############################################"
    fi
     
     

    在备份中的这个几分钟或者几小时时间段内,数据库还是一直在不断的产生新数据,但是从mysqldump备份文件恢复数据会丢失掉从备份点开始的更新数据,

    所以还需要结合mysqlbinlog二进制日志增量备份。确保my.ini或者my.cnf中包含下面的配置以启用二进制日志,或者

    mysqld ---log-bin:

    [mysqld]
    log-bin=mysql-bin

    mysqldump命令必须带上--flush-logs选项以生成新的二进制日志文件:

    脚本中使用 --flush-logs --master-data=2

    这样生成的增量二进制日志文件比如为mysql-bin.000003,那么恢复数据时如下:

    shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql

    shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd

    http://www.cnblogs.com/feichexia/p/MysqlDataBackup.html  MySQL数据备份之mysqldump使用
     
    http://www.cnblogs.com/baseCode/archive/2011/12/08/2281081.html mysql 5.5 mysqldump 原文翻译

     

    --single-transaction 保持数据一致性的加锁设置

    http://www.itpub.net/thread-1410940-1-1.html

     

    |——使用备份出来的文件恢复数据库

    http://www.blogjava.net/alpha/archive/2007/08/10/135694.html  MySQL的mysqldump工具的基本用法

     

    |——恢复出来的数据报了几个错误:

    mysql之导入错误----Cannot load from mysql.proc解决办法 http://blog.sina.com.cn/s/blog_888269b20100zv4t.html

    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法  http://hi.baidu.com/liyanqin2288/item/5de086da8c94ef3348e1dd59

     

    |——填坑:

    https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html :4.5.4 mysqldump — A Database Backup Program

     

    http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html  Mysql备份还原数据库之mysqldump实例及参数详细说明

     

    http://www.imhdr.com/mysql/mysqldump-import-export-database-summarizes/  mysqldump导入导出数据库总结

     

     

    |——改进版本

    #!/bin/bash
    #author:logonmy@126.com
    #desc:
    # 可以做到第一次全量备份,后面几天增量备份[待研究,这里是7天全量]
    # AND the database Engine is innodb
     
    BACKDIR=/data/backup
     
    if [ ! -d ${BACKDIR} ]
    then
    mkdir -p ${BACKDIR}
    fi
     
    cd ${BACKDIR}
     
    #每日生成新的备份DIR
    DumpDir=${BACKDIR}/`date +%F`
     
    FullDumpFile=full_`date +%F`.sql.gz
    AddDumpFile=add_`date +%H`.sql.gz
     
    if [ ! -d ${DumpDir} ]
    then
    mkdir -p ${DumpDir}
    fi
     
    #7天之前的备份DIR
    SevenDaysAgoDir=`date +%F -d "-7 days"`
     
    # Index="`grep log-bin /etc/my.cnf |awk -F'[=.]' '{print $2".index"}'|head -n 1`"
    # binFileName=`tail -n1 $index`
     
    mysqldump=/usr/local/services/mysql/bin/mysqldump
     
    Sock=/tmp/mysql5.sock
    Opt="-R --single-transaction --flush-logs --master-data=2"
     
    DB="--databases vmeipai cpa"
     
    # day=`date +%F`
    # hour=`date +%H`
     
    #-h$host -u$user -p$passwd 本来命令后面要跟这样的参数,这里默认root所以没有使用。
    #host=localhost
    #user=root
    #passwd=
     
    #全量
    dumpFull()
    {
        ${mysqldump} -S ${Sock} ${opt} ${DB} | gzip > ${DumpDir}/${FullDumpFile}
    }
     
    #删除7天以前的备份
    delSevenAgo()
    {
        [ -d ${BACKDIR}/${SevenDaysAgoDir} ] && rm -rf ${BACKDIR}/${SevenDaysAgoDir}; 
    }
     
    dumpFull
     
    if [ $? -ne 0 ]
        then
        echo "############################################"
        echo "#Wanning : mysqldump commend running fail!!#"
        echo "############################################"
    else
        delSevenAgo
     
        echo "############################################"
        echo "#Ok : mysqldump commend running success!!#"
        echo "############################################"
    fi

     

    参考:

    http://hi.baidu.com/xingxuejun/item/290772760302d411d1dcb349 mysql完全备份+增量备份脚本

    http://hi.baidu.com/urzalknsyzchrur/item/c15e9392a72fbbbfcc80e5eb 在MySQL中使用更新日志文件

    http://www.linuxidc.com/Linux/2012-07/66138.htm       MySQL不能启动 mysql-bin.index' not found

  • 相关阅读:
    MONGODB全面总结
    MongoDB 进阶-关联查询
    MongoDB之DBref(关联插入,查询,删除) 实例深入
    MongoDB 聚合管道(Aggregation Pipeline)
    Mongodb索引基础
    MongoDB 全文搜索教程
    MongoDB数组修改器更新数据
    MongoDb查询详解
    服务器与客户端回叫
    Gauss列主消元
  • 原文地址:https://www.cnblogs.com/logon/p/3640878.html
Copyright © 2011-2022 走看看