shell實現遠程mysqlDUMP數據庫備份

說明:
本文實現利用shell實現遠程mysql數據庫備份。通過在數據服務器mysqldump導出需要備份的數據庫,scp拷貝到指定的備份服務器。爲了不需要輸入密碼就能直接scp,這裏,會先生成ssh key。

數據庫服務器爲A,用來遠程存放備份的服務器爲B

實現:
1.生成ssh key認證,避免SSH輸入密碼
openssh在A服務器用openssh生成一堆密鑰

# ssh-keygen -d  //passphrase一定留空,否則又要輸入密碼。會生成~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub文件
# chmod 600 ~/.ssh/id_rsa  //設置屬性

把~/.ssh/id_rsa.pub文件的內容複製後添加到B服務器用戶目錄~/.ssh/authorized文件裏,設置屬性
# chmod 600 ~/.ssh/authorized

 
puttygen在A服務器生成密鑰對

菜單|Conversions|Export OpenSSH Key  //導出OpenSSH格式的私鑰,保存爲id_rsa,放到A服務器用戶目錄~/.ssh/下
# chmod 600 ~/.ssh/id_rsa  //設置屬性
公鑰在puttygen最上面那一堆最長的字符串就是,複製後添加到B服務器用戶目錄~/.ssh/authorized文件裏,同樣設置屬性
# chmod 600 ~/.ssh/authorized

 
2.在數據庫服務器A新建sql_backup.sh,用於mysqldump導出要備份的數據庫,scp到備份服務器上
# vim sql_bakup.sh //添加以下內容

#!/bin/bash
sqlfile=$(date -d yesterday "+%Y%m%d")".sql"  #指定要拷貝的數據庫文件名,以日期(減一天)命名
/usr/local/webserver/mysql/bin/mysqldump -u***** -p*** test > $sqlfile

gzip $sqlfile  #壓縮,對於大數據庫非常必要
scp $sqlfile".gz" [email protected]:/www/backup/mysql/
echo `date -d yesterday "+%Y%m%d"` succ >> /root/shell/sum.txt  #將備份操作記錄到sum.txt中去

mysql_backup.sh還有一種寫法,寫得更緊湊。實現本地不保存,直接備份到B服務器。mysqldump -udbuser -pdbpass dbname|gzip -c|ssh remoteuser@remoteip ‘cat > ~/’`date “+%Y%m%d%H%M%S”`’.sql.gz’其中dbuser是數據庫用戶名,dbpass是數據庫密碼,dbname是數據庫名,remoteuser是遠程B服務器的用戶名,remoteip是遠程B服務器的IP

如果本地不保存,直接備份到B服務器

#!/bin/bash
mysqldump -udbuser -pdbpass dbname|gzip -c|ssh remoteuser@remoteip 'cat > ~/'`date "+%Y%m%d%H%M%S"`'.sql.gz'

其中dbuser是數據庫用戶名,dbpass是數據庫密碼,dbname是數據庫名,remoteuser是遠程B服務器的用戶名,remoteip是遠程B服務器的IP

#!/bin/bash

backup_time=`date +%Y_%m_%d_%H`
current_ip="${要備份的機器ip}"
remote_ip="${遠程機器ip}"
remote_path="/home/quant_group/mysql/${current_ip}/full/${backup_time}.tar"
mysql_host="--host=${current_ip}"
mysql_user="--user=${備份的用戶名}"
mysql_pass="--password=${備份的密碼}"
mysql_port="--port=3306"
defaults_file="--defaults-file=/home/quant_group/mysql/3306/my.cnf"

mysqldump -udbuser -pdbpass dbname | gzip | sshpass -p '' ssh root@${remote_ip}  "cat - > ${remote_path}"



3.數據庫服務器A上編輯crontab,讓mysql_backup腳本定期執行
# crontab -e //每天0點備份昨天A的test數據庫到B的/www/backup/mysql

00 00 * * * /bin/bash   /root/shell/sql_bakup.sh 

 
4.還原數據庫

# gzid -d 20121127.sql.gz  #解壓
# mysql -u**** -p*** -S /tmp/mysql
> use test   #沒有就新建個數據庫
> source /www/backup/mysql/20121127.sql

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章