当前位置:首页 > Mysql教程 > 列表

linux unix mysql 数据库自动备份

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-04 17:21:10 浏览: 评论:0 

文章给大家介绍在linux unix中利用shell命令实现mysql 数据库自动备份脚本代码,有需要了解的朋友只需简单修改一下即可使用了.

文件名 mysql_data_backup.sh (需要执行权限)

mysql 数据库表自动备份shell 脚本 (第二版)

调用示例,代码如下:mysql_data_backup.sh

包含功能:

1.生成备份日志

2.自动检测指定数据库中的库列表,单独备份每个库,最后打包为tar文件

3.可指定备份存档文件(.tar) 保留的数目, 按时间正序清理以前的存档

4.恢复时可以登录 mysql 以后直接用 source xxx.sql 自动删除和创建数据库,并还原数据.

需要修改的变量,代码如下:

  1. db_host  //数据库主机 
  2. db_user //数据库帐号 
  3. db_passwd //数据库密码 
  4. backupFileNum //保留的备份存档文件数目,超出该数目自动清理 
  5. backupDir //备份文件存放的目录 
  6. logfile //日志文件路径 

如何恢复数据:

参见 mysql 数据库表自动备份shell 脚本,第一版,代码如下:

  1. #!/bin/bash 
  2. # mysq link user config 
  3. db_host=192.168.0.222 
  4. db_user=admin 
  5. db_passwd=123456 
  6. # backup File number 
  7. backupFileNum=4 
  8.  
  9. # log file 
  10. logfile='/sqlbackup/backup.log' 
  11. # backup of directory Do not bring / 
  12. backupDir="/sqlbackup" 
  13.  
  14.  
  15. check database name 
  16. echo 'Backup begin' 
  17. begin_time=`date '+%s'
  18.  
  19. # get databases list  
  20. databases_content=`mysqlshow -u $db_user -p$db_passwd -h $db_host | sed 's/|//g' | sed 's/ //g' | sed '1,4d' | sed '$d'
  21. check databases if emptyed then exit 
  22. databases_content_check=`echo -n $databases_content > /tmp/mysql_backup_check.tmp` 
  23. if [ ! -s /tmp/mysql_backup_check.tmp ];then 
  24.     echo 'Database Emptyed Backup stop.' 
  25.     exit 
  26. fi 
  27.  
  28. # plan backup of sql databases 
  29. databases=(${databases_content}) 
  30. # get databases length 
  31. databases_len=${#databases[*]} 
  32.  
  33. # backup of directory for date 
  34. datestamp=$(date "+%Y%m%d"
  35.  
  36. # final backup directroy 
  37. fileDir="$backupDir/$datestamp" 
  38.  
  39. # auto create target directory 
  40. if [ ! -d $backupDir ];then 
  41.  mkdir $backupDir 
  42. fi 
  43. if [ ! -d $fileDir ];then 
  44.  mkdir $fileDir 
  45. fi 
  46. if [ ! -d $logfile ];then 
  47.  touch $logfile 
  48. fi 
  49.  
  50. echo "total $databases_len databases." 
  51.  
  52. for ((i=0;i<$databases_len;i++)) 
  53. do 
  54.   dbName="${databases[$i]}" 
  55.   fileName="${databases[$i]}.sql" 
  56.   filePath="$fileDir/$fileName" 
  57.   echo "Database [$dbName] Backup ..." 
  58.   echo "DROP DATABASE IF EXISTS `$dbName`;"  > $filePath 
  59.   echo "CREATE DATABASE `$dbName` CHARACTER SET `utf8`;" >> $filePath 
  60.   echo "use $dbName;" >> $filePath 
  61.   mysqldump -h $db_host  -u $db_user -p$db_passwd $dbName >> $filePath 
  62. done 
  63.  
  64.  
  65.  
  66. # tar files 
  67. cd $backupDir 
  68. tar cvf ${datestamp}.tar ./${datestamp} 
  69. delete source archive 
  70. rm -rf ./${datestamp} 
  71. end_time=`date '+%s'
  72. total_time=$[end_time-begin_time] 
  73. echo 'Backup Done' 
  74. echo "Total time: ${total_time} second" 
  75.  
  76. now_date=`date '+%Y-%m-%d %k:%M:%S'
  77. # save log 
  78. echo "${now_date} : Backup Databases : Total time [${total_time}s]" >> $logfile 
  79.  
  80.  
  81. begin clean excess of backup file 
  82.  
  83. count backup dir name of length; 
  84. backupDir_length=`expr length "$backupDir"
  85. # get tar file list 
  86. backupFile_list=` find $backupDir -name "*.tar" | sort -n -r -k 1.$backupDir_length` 
  87. set array 
  88. backupFiles=(${backupFile_list}) 
  89. backupFile_length=${#backupFiles[*]} 
  90. if [ $backupFile_length -gt $backupFileNum ];then 
  91.         for((i=$backupFile_length;i>$backupFileNum;i--)) 
  92.         do 
  93.                 fileName="${backupFiles[$i-1]}" 
  94.                 rm -rf $fileName 
  95.                 #save log 
  96.                 echo "file: $fileName deleted" 
  97.                 echo "file: $fileName deleted" >> $logfile 
  98.         done  --phpfensi.com 
  99. else 
  100.         echo "backup file number normal." 
  101. fi

Tags: linux备份数据库 mysql自动备份

分享到: