分享个自己写的mysql自动备份脚本、定时执行设置及windows自动FTP,请大家指教。

前提环境:mysql数据库服务器开启vsftpd,并配置合适帐号以便能被内网存储服务器FTP

第一步:编写mysql自动执行脚本

 

  1. #!/bin/sh 
  2. # mysql_db_backup.sh: backup mysql databases. 
  3. # Last updated: Wed Nov  9 07:01:01 CST 2011 
  4. # ---------------------------------------------------------------------- 
  5. # This is a free shell script under GNU GPL version 2.0 or above 
  6. # Copyright (C) 2011 Andy Yao 
  7. # Blog:http://t.qq.com/andy_microblog 
  8. # ---------------------------------------------------------------------- 
  9. # your mysql login information 
  10. # db_user is mysql username 
  11. # db_passwd is mysql password 
  12. # db_host is mysql host 
  13. # ----------------------------- 
  14.  
  15. db_user="root" 
  16. db_passwd="123456" 
  17. db_host="192.168.1.11" 
  18. # the directory for story your backup file. 
  19. backup_dir="/mnt/sdb1/mysql_db_backup" 
  20. date format for backup file (dd-mm-yyyy) 
  21. time="$(date +"%Y-%m-%d_%H-%M-%S")" 
  22. file_time="$(date +"%Y-%m-%d_%H-%M-%S")" 
  23.  
  24.  
  25. mysql_backup_path="$backup_dir/$file_time" 
  26. mkdir $backup_dir/$file_time 
  27. log_path="$backup_dir/$file_time.log.txt" 
  28.  
  29. #------------this log is for monitor ssh status 
  30. ssh_log_path="$backup_dir/log.txt" 
  31.  
  32.  
  33. echo "---------------------" >> $ssh_log_path 
  34. date >> $ssh_log_path 
  35.  
  36.  
  37. echo "-------------------------------------------------------------------------------" >> $log_path 
  38. echo "--------------" >> $log_path 
  39. echo "--------" >> $log_path 
  40.  
  41.  
  42. echo "backup mysql db start" >> $log_path 
  43. date >> $log_path 
  44. echo "---------------------" >> $log_path 
  45.  
  46.  
  47. #!/bin/bash 
  48. cat /dev/null > $backup_dir/mysqlback.txt 
  49.   connmsg=`mysql -h$db_host -u$db_user -p$db_passwd $db <<EOF 
  50.   show databases; 
  51.   exit 
  52.   EOF` 
  53.   echo "$connmsg" > $backup_dir/mysqlback.txt 
  54.  
  55. while read line 
  56.   do 
  57.  
  58. if [ "$line" != "Database" ]; then 
  59. #mysqldump -u$user -p$ps "$line" >/share/"$line".sql 
  60.  
  61.         echo "--------" >> $log_path 
  62.         date >> $log_path 
  63.         echo "$line" >> $log_path 
  64.          
  65.         mysqldump -h$db_host -u$db_user -p$db_passwd "$line" --lock-tables=false | gzip -9 > "$mysql_backup_path/$line.$time.sql.gz" 
  66.  
  67.         date >> $log_path 
  68.         echo "--------" >> $log_path 
  69.  
  70. fi 
  71.  
  72. done < $backup_dir/mysqlback.txt 
  73.  
  74.  
  75. echo "---------------------" >> $log_path 
  76. echo "backup mysql db stop" >> $log_path 
  77. date >> $log_path 
  78.  
  79. echo "--------" >> $log_path 
  80. echo "--------------" >> $log_path 
  81. echo "-------------------------------------------------------------------------------" >> $log_path 
  82.  
  83. #------------this log is for monitor ssh status 
  84. date >> $ssh_log_path 
  85. echo "---------------------" >> $ssh_log_path 
  86.  
  87. ls -l $mysql_backup_path >> $log_path 
  88.  
  89. echo "--------------" >> $log_path 
  90.  
  91. cd $backup_dir 
  92. du -s >> $log_path 
  93. du -sm >> $log_path 
  94. du -sh >> $log_path 
  95.  
  96. echo "--------------" >> $log_path 
  97.  
  98. du -h |sort -rk2 >> $log_path 
  99.  
  100. exit 0; 

 

第二步:定时执行mysql备份脚本,设置crontab,这个应该不用解释吧?

 

  1. [root@localhost /]# cat /etc/crontab 
  2. SHELL=/bin/bash 
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin 
  4. MAILTO=root 
  5. HOME=/ 
  6.  
  7. # run-parts 
  8. 01 * * * * root run-parts /etc/cron.hourly 
  9. 02 4 * * * root run-parts /etc/cron.daily 
  10. 22 4 * * 0 root run-parts /etc/cron.weekly 
  11. 42 4 1 * * root run-parts /etc/cron.monthly 
  12. 01 7 * * * root /mysql_db_backup/mysql_db_backup_auto_db_filelist.sh 
  13. * */1 * * * root ntpdate 203.129.68.14 && hwclock -w 
  14. [root@localhost /]# cat /etc/crontab 

 

第三步:windows端自动定时FTP,将下代码保存为bat,并设置计划任务

 

  1. @echo off & color 1f & title 自动FTPMYSQL备份文件 
  2. mode con: cols=60 lines=10 
  3. echo ========================================================== 
  4. echo -- 
  5. echo -- 
  6. echo --            ----### 自动FTPMYSQL备份文件 ###---- 
  7. echo -- 
  8. echo -- 
  9. echo --处理中,请不要手动关闭程序窗口, 
  10. echo -- 
  11. echo --完成后,程序会自动关闭... 
  12.  
  13. set xtime=%time::=% 
  14. set xdate=%date
  15. set copy_path=%xdate:~0,4%-%xdate:~5,2%-%xdate:~8,2%_07-01-01 
  16.  
  17. rem 指定LOG存放路径 
  18. set log_path=c:\bat\log\ftp_mysql_copy.log.txt 
  19.  
  20. echo -------------------------------------- >>%log_path% 
  21. echo -------------------- >>%log_path% 
  22. date /t >>%log_path% & time /t >>%log_path% 
  23. echo --开始------------------ >>%log_path% 
  24.  
  25. cd E:\MYSQL_BACKUP_12 
  26. e: 
  27. md %copy_path% 
  28. cd %copy_path% 
  29.  
  30. echo open 192.168.1.11 >ftp.src 
  31. echo username>>ftp.src 
  32. echo password>>ftp.src 
  33. echo cd /software/mysql_db_backup/%copy_path%/>>ftp.src 
  34. echo pwd>>ftp.src 
  35. echo ls>>ftp.src 
  36. echo prompt>>ftp.src 
  37. echo bin>>ftp.src 
  38. echo mget *>>ftp.src 
  39. echo bye>>ftp.src 
  40. ftp -s:ftp.src 
  41. del ftp.src  
  42.  
  43. echo --结束------------------ >>%log_path% 
  44. date /t >>%log_path% & time /t >>%log_path% 
  45. echo -------------------- >>%log_path% 
  46. echo -------------------------------------- >>%log_path% 

 

上面的弄完后,你可以开始测试了。