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

linux中mysql备份,增量备份及恢复程序

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

一个linux中mysql完全备份,增量备份及恢复脚本实现程序,有需要的朋友可参考一下,可以把它做成定时备份,代码如下:

  1. #!/bin/bash 
  2. # full && increment backup and recover 
  3. # 说明:事先要确保存在/data/bak目录,且要保证在执行增量备份时已做过至少一次全量备份,否则找不到position文件. 
  4. port='3306' 
  5. back_src_dir="/data/mysql/${port}/logs/binlog" 
  6. back_dir='/data/bak' 
  7. DATE=`date +%Y%m%d` 
  8. user='root' 
  9. pass='cy2009' 
  10. bak_db='test1' 
  11. mysql_bin='/usr/local/mysql-5.1.48/bin' 
  12. socket="/data/mysql/${port}/mysql.sock" 
  13. full_bak() 
  14. cd ${back_dir} 
  15. DumpFile=Full_back$DATE.sql 
  16. ${mysql_bin}/mysqldump --lock-all-tables --flush-logs --master-data=2 -u${user} -p${pass} ${bak_db} > ${DumpFile} 
  17. ${mysql_bin}/mysql -u${user} -p${pass} --socket=${socket} -e "unlock tables" 
  18.  
  19. #把当前的binlog和position信息存入position文件 
  20. cat ${DumpFile} |grep 'MASTER_LOG_FILE'|awk -F"'" '{print $2}' > ${back_dir}/position 
  21. cat ${DumpFile} |grep 'MASTER_LOG_FILE'|awk -F"=" '{print $3}' |awk -F";" '{print $1}' >> ${back_dir}/position 
  22. incre_bak() 
  23. #锁定表,刷新log 
  24. ${mysql_bin}/mysql -u${user} -p${pass} --socket=${socket} -e "flush tables with read lock" 
  25. ${mysql_bin}/mysqladmin -u${user} -p${pass} --socket=${socket} flush-logs 
  26. #获取上次备份完成时的binlog和position 
  27. cd ${back_dir} 
  28. start_binlog=`sed -n '1p' position` 
  29. start_pos=`sed -n '2p' position` 
  30.  
  31. #获取目前的binlog和position 
  32. mysql -u${user} -p${pass} --socket=${socket} -e "show master statusG" | awk '{print $2}'| sed -n '2,3p' > now_position 
  33. stop_binlog=`sed -n '1p' now_position` 
  34. stop_pos=`sed -n '2p' now_position` 
  35. #如果在同一个binlog中 
  36. if [ "${start_binlog}" == "${stop_binlog}" ]; then 
  37. ${mysql_bin}/mysqlbinlog --start-position=${start_pos} --stop-position=${stop_pos} ${back_src_dir}/${start_binlog} >> Incr_back$DATE.sql 
  38.  
  39. #跨binlog备份 
  40. else 
  41. startline=`awk "/${start_binlog}/{print NR}" ${back_src_dir}/mysql-bin.index` 
  42. stopline=`wc -l ${back_src_dir}/mysql-bin.index |awk '{print $1}'
  43. for i in `seq ${startline} ${stopline}` 
  44. do 
  45. binlog=`sed -n "$i"p ${back_src_dir}/mysql-bin.index |sed 's/.*///g'
  46. case "${binlog}" in 
  47. "${start_binlog}"
  48. ${mysql_bin}/mysqlbinlog --start-position=${start_pos} ${back_src_dir}/${binlog} >> Incr_back$DATE.sql 
  49. ;; 
  50. "${stop_binlog}"
  51. ${mysql_bin}/mysqlbinlog --stop-position=${stop_pos} ${back_src_dir}/${binlog} >> Incr_back$DATE.sql 
  52. ;; 
  53. *) 
  54. ${mysql_bin}/mysqlbinlog ${back_src_dir}/${binlog} >> Incr_back$DATE.sql 
  55. ;;  
  56. esac 
  57. done 
  58. fi 
  59. #解除表锁定,并保存目前的binlog和position信息到position文件。 
  60. ${mysql_bin}/mysql -u${user} -p${pass} --socket=${socket} -e "unlock tables" 
  61. cp now_position position 
  62. full_recov() 
  63. cd ${back_dir} 
  64. recov_file1=`ls | grep 'Full_back'
  65. ${mysql_bin}/mysql -u${user} -p${pass} --socket=${socket} -e "use ${bak_db}; source ${back_dir}/${recov_file1};" 
  66.  
  67. incre_recov() 
  68. {  
  69. cd ${back_dir} 
  70. recov_file2=`ls |grep 'Incr_back'`  
  71. ${mysql_bin}/mysql -u${user} -p${pass} --socket=${socket} -e "use ${bak_db}; source ${back_dir}/${recov_file2};" 
  72. while true 
  73. do 
  74. echo -e "tt**************************************" 
  75. echo 
  76. echo -e "tttWelcome to backup program!" 
  77. echo 
  78. echo -e "ttt(1) Full Backup For MySQL" 
  79. echo -e "ttt(2) Increment Backup For MySQL" 
  80. echo -e "ttt(3) Recover From The Full Backup File" 
  81. echo -e "ttt(4) Recover From The Increment Backup File" 
  82. echo -e "ttt(5) Exit The Program!" 
  83. echo  
  84. echo -e "tt**************************************" 
  85. read -p "Enter your choice:" choice 
  86. case $choice in 
  87. echo "now! let's backup the data by full method......." 
  88. full_bak 
  89. echo "succeed!" 
  90. sleep 2 
  91. ;; 
  92. echo "now! let's backup the data by increment method......" 
  93. incre_bak 
  94. echo "succeed" 
  95. sleep 2 
  96. ;; 
  97. echo "now! let's recover from the full back file" 
  98. full_recov 
  99. echo "successful" 
  100. sleep 2 
  101. ;; 
  102. echo "now! let's recover from the increment backup file" 
  103. incre_recov  //phpfensi.com 
  104. echo "successful" 
  105. sleep 2 
  106. ;; 
  107. break 
  108. ;; 
  109. *) 
  110. echo "Wrong Option! try again!" 
  111. sleep 2 
  112. continue 
  113. ;; 
  114. esac 
  115. done

Tags: linux备份 mysql增量备份

分享到: