mysql自动备份时,有两张表没有备份,请问这是什么情况,求高手指点,谢谢,没分了,不好意思...

解决方案 »

  1.   

    4. 完全备份脚本
    #!/bin/bash
    # Name:mysqlfullbak
    # This is mysql mysqlfullbak scripts
    # By Cloudsoar
    # Last Modify:2012-05-10
    #定义脚本存放路径
    scriptsDir=/usr/sbin
    #定义用户名及密码
    user=root
    userPWD=123456
    #定义要备份的数据库
    database=GoToMyCloudDB
    #定义完全备份文件存放路径
    bakDir=/srv/bakmysql
    eMailFile=$bakDir/email.txt
    [email protected]
    #定义日志文件
    LogFile=$bakDir/mysqlbak.log
    DATE=`date +%Y%m%d`
    echo " " >> $LogFile
    echo " " >> $LogFile
    echo "--------------------------" >> $LogFile
    echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile
    echo "-----------------" >> $LogFile
    cd $bakDir
    DumpFile=$DATE.sql
    mysqldump --flush-logs -u$user -p$userPWD --quick $database >$DumpFile
    echo "Dump Done" >> $LogFile
    echo  "[$DumpFile]Backup Success!" >> $LogFile
    daily_databakDir=$bakDir/daily
    cd $bakDir/daily
    find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1
      

  2.   

    5. 增量备份脚本
    #!/bin/bash
    # Name:mysqldailybak
    # This ia mysql mysqldailybak scripts
    # By Cloudsoar
    # Last modify:2012-05-10
    #定义用户名及密码
    user=root
    userPWD=9dspod8a
    #定义数据库
    database=GotoMyCloudDB
    /usr/bin/mysqladmin -u$user -p$userPWD flush-logs
    daily_databakDir=/srv/bakmysql/daily
    #定义MYSQL数据目录
    mysqlDataDir=/srv/mysql
    eMailFile=$daily_databakDir/email.txt
    [email protected]
    DATE=`date +%Y%m%d`
    logFile=$daily_databakDir/mysql$DATE.log
    echo "       " > $eMailFile
    echo "-----------------------" >> $eMailFile 
    echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
    echo "-------
    ------------------" >> $eMailFile
    TIME=$(date "-d 10 day ago" +%Y%m%d%H%M%S)
    StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")
    echo “Delete 10 days before the log” >>$eMailFile
    mysql -u$user -p$userPWD -e "purge master logs before ${TIME}" && echo "delete 10 days before log" |tee -a $eMailFile #删除10天前的2进制文件
    filename=`cat $mysqlDataDir/mysqld-bin.index |awk -F "/" '{print $2}'` # 2进制文件
    for i in $filename
    do
    echo "$StartTime start backup binlog" >> $eMailFile
    mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="$StartTime" $mysqlDataDir/$i >> $daily_databakDir/daily$DATE.sql |tee -a $eMailFile
    done
    if [ $? = 0 ]
    then
    4. 完全备份脚本
    #!/bin/bash
    # Name:mysqlfullbak
    # This is mysql mysqlfullbak scripts
    # By Cloudsoar
    # Last Modify:2012-05-10
    #定义脚本存放路径
    scriptsDir=/usr/sbin
    #定义用户名及密码
    user=root
    userPWD=9dspod8a
    #定义要备份的数据库
    database=GoToMyCloudDB
    #定义完全备份文件存放路径
    bakDir=/srv/bakmysql
    eMailFile=$bakDir/email.txt
    [email protected]
    #定义日志文件
    LogFile=$bakDir/mysqlbak.log
    DATE=`date +%Y%m%d`
    echo " " >> $LogFile
    echo " " >> $LogFile
    echo "--------------------------" >> $LogFile
    echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile
    echo "-----------------" >> $LogFile
    cd $bakDir
    DumpFile=$DATE.sql
    mysqldump --flush-logs -u$user -p$userPWD --quick $database >$DumpFile
    echo "Dump Done" >> $LogFile
    echo  "[$DumpFile]Backup Success!" >> $LogFile
    daily_databakDir=$bakDir/daily
    cd $bakDir/daily
    find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1
      

  3.   

    1. 创建备份目录和文件
    #mkdir/srv/bakmysql
    #mkdir/srv/bakmysql/daily
    #touch/srv/bakmysql/mysqlbak.log
    2. 启用二进制日志
    # cd /etc/
    #vi my.cnf
    在[mysqld]添加log-bin=/var/lib/mysql/mysql-bin.log
    然后重启mysqld服务器
    3. 设置crontab任务,每天执行备份脚本
    # cd /etc/
    # vi crontab添加如下脚本
    0 0 * * 0 root/usr/sbin/mysqlfullbak(每天0点执行完全备份脚本)
    0 1 * * * root/usr/sbin/mysqldailybak (每天凌晨1点执行增量备份脚本)
    脚本内容:
    4. 完全备份脚本
    #!/bin/bash
    # Name:mysqlfullbak
    # This is mysql mysqlfullbak scripts
    # By Cloudsoar
    # Last Modify:2012-05-10
    #定义脚本存放路径
    scriptsDir=/usr/sbin
    #定义用户名及密码
    user=root
    userPWD=9dspod8a
    #定义要备份的数据库
    database=GoToMyCloudDB
    #定义完全备份文件存放路径
    bakDir=/srv/bakmysql
    eMailFile=$bakDir/email.txt
    [email protected]
    #定义日志文件
    LogFile=$bakDir/mysqlbak.log
    DATE=`date +%Y%m%d`
    echo " " >> $LogFile
    echo " " >> $LogFile
    echo "--------------------------" >> $LogFile
    echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile
    echo "-----------------" >> $LogFile
    cd $bakDir
    DumpFile=$DATE.sql
    mysqldump --flush-logs -u$user -p$userPWD --quick $database >$DumpFile
    echo "Dump Done" >> $LogFile
    echo  "[$DumpFile]Backup Success!" >> $LogFile
    daily_databakDir=$bakDir/daily
    cd $bakDir/daily
    find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1
    5. 增量备份脚本
    #!/bin/bash
    # Name:mysqldailybak
    # This ia mysql mysqldailybak scripts
    # By Cloudsoar
    # Last modify:2012-05-10
    #定义用户名及密码
    user=root
    userPWD=9dspod8a
    #定义数据库
    database=GotoMyCloudDB
    /usr/bin/mysqladmin -u$user -p$userPWD flush-logs
    daily_databakDir=/srv/bakmysql/daily
    #定义MYSQL数据目录
    mysqlDataDir=/srv/mysql
    eMailFile=$daily_databakDir/email.txt
    [email protected]
    DATE=`date +%Y%m%d`
    logFile=$daily_databakDir/mysql$DATE.log
    echo "       " > $eMailFile
    echo "-----------------------" >> $eMailFile 
    echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
    echo "-------
    ------------------" >> $eMailFile
    TIME=$(date "-d 10 day ago" +%Y%m%d%H%M%S)
    StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")
    echo “Delete 10 days before the log” >>$eMailFile
    mysql -u$user -p$userPWD -e "purge master logs before ${TIME}" && echo "delete 10 days before log" |tee -a $eMailFile #删除10天前的2进制文件
    filename=`cat $mysqlDataDir/mysqld-bin.index |awk -F "/" '{print $2}'` # 2进制文件
    for i in $filename
    do
    echo "$StartTime start backup binlog" >> $eMailFile
    mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="$StartTime" $mysqlDataDir/$i >> $daily_databakDir/daily$DATE.sql |tee -a $eMailFile
    done
    if [ $? = 0 ]
    then
    # 删除mtime>32的增量日志备份文件
    find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1
    cd $daily_databakDir
    echo "Daily backup succeed" >> $eMailFile
    else
    echo "Daily backup fail" >> $eMailFile
    mail -s "MySQL Backup" $eMail < $eMailFile #备份失败之后发送邮件通知
    fi
    cat $eMailFile > $logFile
    # 删除mtime>32的增量日志备份文件
    find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&
    6. 删除完全备份脚本
    #!/bin/sh
    # Name:rmBackup
    # PS:Delete old Backup.
    # By:Cloudsoar
    # Last Modify:2012-05-10
    # 定义备份目录
    dataBackupDir=/srv/bakmysql
    # 删除mtime>32的日志备份文件
    find $dataBackupDir -name "*.sql" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1
    7. 添加可执行权限
    使用chmod +x mysqlfullbak、chmod +x mysqldailybak、chmod +x rmBackup
    这是一个同事做备份时写的,我对这个也不了解,可是最近发现自动备份的数据和手动备份的数据的.sql文件不一样大,少了好多,最后一看,自动备份的有两张表没有数据,致于有没有删表又再建表的操作,我也不清楚。望指点,谢谢
      

  4.   

    mysqldump --flush-logs -u$user -p$userPWD --quick $database >$DumpFile 2>$LogFile把上面这个改一下,把错误信息输出到日志文件。另外你在手动备份的时候,有没有报错?
      

  5.   

    至于是不是导出时数据导出不全,还是导入时部分数据导入失败,我现在也不能确定
    因为我手动使用mysqldump命令导出整个库的.sql文件,和通过脚本自动导出的整个库的.sql文件大小相差了150MB左右,我使用手动导出的.sql文件导入到本地数据库时,没有报错,数据也正常,但是如果用自动导出的.sql文件导入到我本地数据库时,在执行到约70%左右时,就报如下错误,1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''BM:\0\0\0\0\0\06\0\0\0(\0\0\0>\0\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\' at line 1,这个错误出现了两次了,也不清楚是什么意思,看不懂,本来想打开.sql文件看看这段文字,可是文件太大,打不开
      

  6.   

    手动使用mysqldump时,导出的.sql文件是正确的,也没有报错
      

  7.   

    我不懂.sh脚本,你说的修改是不是在mysqldump --flush-logs -u$user -p$userPWD --quick $database >$DumpFile后面加 2>$LogFile,如果是这样,那错误日志文件在哪呢?
      

  8.   

    mysqldump备份的是一个文件 你是怎么发现里面有两个表没有数据的
      

  9.   

    用自动备份后生成的是一个.sql文件、手动使用mysqldump备份也是一个.sql文件,然后我把这两个.sql文件导入到我本地数据库中,在导入前者约70%左右时,报错:1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''BM:\0\0\0\0\0\06\0\0\0(\0\0\0>\0\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\' at line 1,并且查看数据库数据时,有两张表数据为空,但是表结构还在,这两张中其中的一个是数据量最大的表;导入后者.sql是正常的,导入完成后,查询数据库表数据是正常的
      

  10.   

    这明明就是有数据 没有导入成功而已在备份服务器上执行下mysqldump --help看看default-character-set 这个参数是什么然后用mysql导入的时候  执行mysql --default-character-set指定相同的字符集
      

  11.   

    嗯。多谢谢,我试试但有一个问题,我开始也想过是不是导入没有成功,可是对比两个.sql文件时,自动备份的文件要小近150MB,不知道会不会有问题呢
      

  12.   

    搞了半天,是因为使用mysqldump导出的备份和使用mysql客户端Navicat导出是有差异的,除了文件大小不周,可能语法上也有差异或者其它,所以出现mysqldump备份出来的.sql使用Navicat导入时,总是报错。多谢和位指点