首页 > 数据库 > MySQL > 正文

linux mysql 数据库自动备份的设置方法

2024-07-24 12:37:13
字体:
来源:转载
供稿:网友

在linux中实现mysql自动备份很简单,我们可以直接使用计划任务与与相关的任务来实现自动备份与恢复了,下面小编来给大家详细介绍一下具体过程.

mysql 数据库表自动备份shell 脚本,调用示例,代码如下:

  1. mysql_data_backup.bash 110 www_cas 
  2. mysql_data_backup.bash 112 www_qiche 
  3. mysql_data_backup.bash 112 www_health 

包含功能:

1.参数检测,2.生成备份日志,3.自动检测指定数据库中的表,单独备份每个表,最后打包为tar文件,4.单独备份每个表,方便恢复用,5 支持多个数据主机判断

以下为文件内容,代码如下:

  1.  #!/bin/bash 
  2. check host 
  3. if [ ! $1 ];then 
  4. echo 'usage: mysql_data_backup [hostID] dbname' 
  5. exit 
  6. else 
  7. if [ $1 -eq 110 ]; then 
  8. db_host=192.168.1.110 
  9. db_user=xxxx 
  10. db_passwd=xxx 
  11. elif [ $1 -eq 112 ]; then 
  12. db_host=192.168.1.112 
  13. db_user=xxx 
  14. db_passwd=xxx 
  15. else 
  16. echo 'Invalid Host ID' 
  17. exit 
  18. fi 
  19. fi 
  20.  
  21. check database name 
  22. if [ ! $2 ];then 
  23. echo 'usage: mysql_data_backup hostID [dbname]' 
  24. exit 
  25. else 
  26. echo 'Backup begin' 
  27. fi 
  28. begin_time=`date '+%s'
  29. db_name=$2 
  30.  
  31. # get table info 
  32. tables_content=`mysqlshow -u $db_user -p$db_passwd -h $db_host $db_name | sed 's/|//g' | sed 's/ //g' | sed '1,4d' | sed '$d'
  33. check content if emptyed 
  34. tables_content_check=`echo -n $tables_content > /tmp/mysql_backup_check.tmp` 
  35. if [ ! -s /tmp/mysql_backup_check.tmp ];then 
  36. echo 'Backup stop' 
  37. exit 
  38. fi 
  39.  
  40. # plan backup of sql tables 
  41. tables=(${tables_content}) 
  42. # get tables length 
  43. tables_len=${#tables[*]} 
  44. # backup file(tar) number 
  45. backupFileNum=3 
  46. # backup of directory Do not bring / 
  47. backupDir="/backup1/sqldata/$db_name" 
  48. # backup of directory for date 
  49. datestamp=$(date "+%Y%m%d"
  50. # log file 
  51. logfile='/backup1/sqldata/backup.log' 
  52. # final backup directroy 
  53. fileDir="$backupDir/$datestamp" 
  54.  
  55. # auto create target directory 
  56. if [ ! -d $backupDir ];then 
  57. mkdir $backupDir 
  58. fi 
  59. if [ ! -d $fileDir ];then 
  60. mkdir $fileDir 
  61. fi 
  62. if [ ! -d $logfile ];then 
  63. touch $logfile 
  64. fi 
  65.  
  66. echo "total $tables_len tables." 
  67. for ((i=0;i<$tables_len;i++)) 
  68. do 
  69. tableName="${tables[$i]}" 
  70. fileName="${tables[$i]}.sql" 
  71. filePath="$fileDir/$fileName" 
  72. echo "Table [${tables[$i]}] Backup ..." 
  73. mysqldump -e -h $db_host -u $db_user -p$db_passwd $db_name $tableName > $filePath 
  74. done 
  75.  
  76. # tar files 
  77. cd $backupDir 
  78. tar cvf ${datestamp}.tar ./${datestamp} 
  79. delete source archive 
  80. rm -rf ./${datestamp} 
  81. end_time=`date '+%s'
  82. total_time=$[end_time-begin_time] 
  83. echo 'Backup Done' 
  84. echo "Total time: ${total_time} second" 
  85.  
  86. now_date=`date '+%Y-%m-%d %k:%M:%S'
  87. # save log 
  88. echo "${now_date} : Backup Database [${db_name}] : Total time [${total_time}s]" >> $logfile 
  89.  
  90. begin clean excess of backup file 
  91. count backup dir name of length; 
  92. backupDir_length=`expr length "$backupDir"
  93. # get tar file list 
  94. backupFile_list=` find $backupDir -name "*.tar" | sort -n -r -k 1.$backupDir_length` 
  95. set array 
  96. backupFiles=(${backupFile_list}) 
  97. backupFile_length=${#backupFiles[*]} 
  98. if [ $backupFile_length -gt $backupFileNum ];then 
  99.         for((i=$backupFile_length;i>$backupFileNum;i--)) 
  100.         do 
  101.                 fileName="${backupFiles[$i-1]}" 
  102.                 rm -rf $fileName 
  103.                 #save log 
  104.                 echo "file: $fileName deleted" 
  105.                 echo "file: $fileName deleted" >> $logfile 
  106.         done  //Vevb.com 
  107. else 
  108.         echo "backup file number normal." 
  109. fi 

数据恢复可以使用批处理来恢复数据表,G:database20110324 此目录放置需要恢复的表sql文件,main.bat restore.bat 均放置在此目录,点击 main.bat 即可开始备份,每执行完一个文件会暂停,按任意键可以继续.

绿色背景蓝色文字部分需要根据需要修改.

共2处,第一处为 sql 文件路径,第二处为 数据库名称

main.bat内容如下:

@echo off

for %%b IN (./*.sql) DO @restore.bat G:database20110324%%b

restore.bat 内容如下:

  1. @echo off 
  2. pause 
  3. echo 文件 %1 开始还原 
  4. mysql -h localhost -u root -t database1 --default-character-set=utf8 -e "source %1" 
  5. echo 文件 %1 完成还原 
  6. echo . 
  7. echo . 
  8. echo .

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表