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

互联网十八般武艺 互联网十八般武艺

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

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

  1. mysql_data_backup.bash110www_cas
  2. mysql_data_backup.bash112www_qiche
  3. mysql_data_backup.bash112www_health

包含功能:

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

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

  1. #!/bin/bash
  2. #checkhost
  3. if[!$1];then
  4. echo'usage:mysql_data_backup[hostID]dbname'
  5. exit
  6. else
  7. if[$1-eq110];then
  8. db_host=192.168.1.110
  9. db_user=xxxx
  10. db_passwd=xxx
  11. elif[$1-eq112];then
  12. db_host=192.168.1.112
  13. db_user=xxx
  14. db_passwd=xxx
  15. else
  16. echo'InvalidHostID'
  17. exit
  18. fi
  19. fi
  20. #checkdatabasename
  21. if[!$2];then
  22. echo'usage:mysql_data_backuphostID[dbname]'
  23. exit
  24. else
  25. echo'Backupbegin'
  26. fi
  27. begin_time=`date'+%s'`
  28. db_name=$2
  29. #gettableinfo
  30. 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'`
  31. #checkcontentifemptyed
  32. tables_content_check=`echo-n$tables_content>/tmp/mysql_backup_check.tmp`
  33. if[!-s/tmp/mysql_backup_check.tmp];then
  34. echo'Backupstop'
  35. exit
  36. fi
  37. #planbackupofsqltables
  38. tables=(${tables_content})
  39. #gettableslength
  40. tables_len=${#tables[*]}
  41. #backupfile(tar)number
  42. backupFileNum=3
  43. #backupofdirectoryDonotbring/
  44. backupDir="/backup1/sqldata/$db_name"
  45. #backupofdirectoryfordate
  46. datestamp=$(date"+%Y%m%d")
  47. #logfile
  48. logfile='/backup1/sqldata/backup.log'
  49. #finalbackupdirectroy
  50. fileDir="$backupDir/$datestamp"
  51. #autocreatetargetdirectory
  52. if[!-d$backupDir];then
  53. mkdir$backupDir
  54. fi
  55. if[!-d$fileDir];then
  56. mkdir$fileDir
  57. fi
  58. if[!-d$logfile];then
  59. touch$logfile
  60. fi
  61. echo"total$tables_lentables."
  62. for((i=0;i<$tables_len;i++))
  63. do
  64. tableName="${tables[$i]}"
  65. fileName="${tables[$i]}.sql"
  66. filePath="$fileDir/$fileName"
  67. echo"Table[${tables[$i]}]Backup..."
  68. mysqldump-e-h$db_host-u$db_user-p$db_passwd$db_name$tableName>$filePath
  69. done
  70. #tarfiles
  71. cd$backupDir
  72. tarcvf${datestamp}.tar./${datestamp}
  73. #deletesourcearchive
  74. rm-rf./${datestamp}
  75. end_time=`date'+%s'`
  76. total_time=$[end_time-begin_time]
  77. echo'BackupDone'
  78. echo"Totaltime:${total_time}second"
  79. now_date=`date'+%Y-%m-%d%k:%M:%S'`
  80. #savelog
  81. echo"${now_date}:BackupDatabase[${db_name}]:Totaltime[${total_time}s]">>$logfile
  82. #begincleanexcessofbackupfile
  83. #countbackupdirnameoflength;
  84. backupDir_length=`exprlength"$backupDir"`
  85. #gettarfilelist
  86. backupFile_list=`find$backupDir-name"*.tar"|sort-n-r-k1.$backupDir_length`
  87. #setarray
  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. #savelog
  96. echo"file:$fileNamedeleted"
  97. echo"file:$fileNamedeleted">>$logfile
  98. done//phpfensi.com
  99. else
  100. echo"backupfilenumbernormal."
  101. 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. @echooff
  2. pause
  3. echo文件%1开始还原
  4. mysql-hlocalhost-uroot-tdatabase1--default-character-set=utf8-e"source%1"
  5. echo文件%1完成还原
  6. echo.
  7. echo.
  8. echo.

相关广告
  • linux mysql 数据库自动备份的设置方法 linux mysql 数据库自动备份的设置方法 linux mysql 数据库自动备份的设置方法
相关阅读

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

2019/10/10 17:36:33 | 谷歌SEO算法 | 手机网站制作