至于是不是导出时数据导出不全,还是导入时部分数据导入失败,我现在也不能确定 因为我手动使用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文件看看这段文字,可是文件太大,打不开
用自动备份后生成的是一个.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是正常的,导入完成后,查询数据库表数据是正常的
#!/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
#!/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
#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文件不一样大,少了好多,最后一看,自动备份的有两张表没有数据,致于有没有删表又再建表的操作,我也不清楚。望指点,谢谢
因为我手动使用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文件看看这段文字,可是文件太大,打不开