浙江福彩3d走势图
我們來自五湖四海,不為別的,只因有共同的愛好,為中國互聯網發展出一分力!

遠程備份MySQL的數據庫腳本公告

2012年08月11日02:16 閱讀: 16145 次

標簽: 腳本, 數據庫, MySQL, 備份, 遠程

最近有幾臺線上數據庫,硬盤比較吃緊,但是又不方便擴容和轉移到其它機器。但是數據又比較重要,需要經常備份出來。

最早的做法是,在本地備份出完整的庫,把備份庫和binlog一并推到遠程的某臺備份主機上。但是因為最近空間吃緊,而備份庫需要占用不小的空間。有沒有其它的解決辦法呢?

查看了mysqldump具備遠程備份的功能,可以直接將遠程數據備份到本地來,這樣就可以大大的節省了遠程數據庫的磁盤空間。


所以我嘗試寫了一個備份腳本,再配合crontab定時執行,目前看來效果還不錯。

線上環境稍加修改可直接使用,如有問題可以聯系我O(∩_∩)O~

注意:此法多適用于內網,外網的話需要考慮數據量大小和帶寬等網絡因素。

腳本內容如下:

  1. #by cuiyuanrong   
  2. #遠程備份mysql數據和binlog日志到本地!  
  3.  
  4. mysql_user="admin" 
  5. mysql_password="admin_password" 
  6. remote_ips=`cat /data/shell_files/ips.txt`  
  7. mysql_port="3306" 
  8. TIME=`date '+%Y%m%d'`   
  9.  
  10. source /etc/profile  
  11. rm -f /data/shell_files/db.list   
  12. #循環每個IP 
  13. for remote_ip in $remote_ips  
  14. do
  15. #讀取每個遠程mysql服務器中的庫名  
  16. echo "=========== $remote_ip `date '+%Y_%m_%d-%H:%M:%S'` ===========" >> /data/shell_files/history_mysql_backup.log  
  17. /app/mysql/bin/mysql --host="$remote_ip" --port="$mysql_port" --user="$mysql_user" --password="$mysql_password" << EOF > /data/shell_files/db.list  
  18. show databases;  
  19. exit  
  20. EOF  
  21. #用sed過濾掉無需備份的庫 
  22.    sed -i '/Database\|information_schema\|performance_schema\|test/d' /data/shell_files/db.list  
  23. #創建所需的備份目錄
  24.    mkdir -p /data/mysql_backup/$TIME/$remote_ip/data/  
  25.    mkdir -p /data/mysql_backup/$TIME/$remote_ip/binlog/  
  26. #循環備份每個庫
  27.    for DB in `cat /data/shell_files/db.list`  
  28.    do  
  29.    echo "begin dump $DB `date '+%Y_%m_%d-%H:%M:%S'`" >> /data/shell_files/history_mysql_backup.log  
  30.    /app/mysql/bin/mysqldump --host="$remote_ip" --port="$mysql_port" --user="$mysql_user" --password="$mysql_password" --opt --flush-logs --master-data=2 --single-transaction --default-character-set=utf8 $DB | gzip -f > /data/mysql_backup/$TIME/$remote_ip/data/$DB.sql.gz  
  31.    echo "end dump $DB " >> /data/shell_files/history_mysql_backup.log  
  32.    done  
  33. #備份binlog日志文件          
  34.    echo "begin rsync binlogs $remote_ip" >> /data/shell_files/history_mysql_backup.log  
  35.    rsync -e 'ssh -p 22 -o StrictHostKeyChecking=no' -avz --progress --delete [email protected]$remote_ip:/data/mysql/binlog/ /data/mysql_backup/$TIME/$remote_ip/binlog/  
  36.    echo "end rsync binlogs $remote_ip" >> /data/shell_files/history_mysql_backup.log  
  37.           
  38.    sleep 60  
  39. done
分享到: 更多
藍客門戶
©2001-2019 中國藍客聯盟 版權所有.
關于藍客聯盟歷史宗旨章程技術服務聯系我們藍客社區

浙江福彩3d走势图