相關鏈接:
https://blog.csdn.net/LiuHuan_study/article/details/81512831
https://www.cnblogs.com/ryanzheng/p/8444128.html
1.跨服務器備份
原理:服務器A 192.168.100.200
mysql root 123456
服務器B 192.168.100.201
mysql root 123456
在A服務器上編寫腳本 backmysql.sh 用於備份A服務器上MYSQL數據庫制定庫到B服務器上
scp.exp 用於ssh免密碼登錄
scp.exp

#!/usr/bin/expect #FileName:scp.exp set timeout 60 if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 local_file remote_path" exit 1 } set local_file [lindex $argv 0] set remote_path [lindex $argv 1] set passwd root123 set passwderror 0 spawn scp $local_file $remote_path expect { "*assword:*" { if { $passwderror == 1 } { puts "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "$passwd\r" exp_continue } "*es/no)?*" { send "yes\r" exp_continue } timeout { puts "connect is timeout" exit 3 } }
backmysql.sh

#!/bin/bash backupdir=/home/backup mysql_bin_dir=/usr/bin #mysqldump的路徑 databaseName=agm #備份的數據庫名字 bakdatabaseName=backup_agm #備份的數據庫全部表的文件名 mysqluser=root #正式服務器A的mysql用戶名 mysqlpwd=123456 #正式服務器A的mysql密碼 targetServerUser=root #測試服務器B的用戶名 targetServerIP=192.168.100.201 #測試服務器B的IP地址 targetpath=/home/backup #測試服務器B備份路徑 time=`date +%Y%m%d` #當天的日期年月日 #從數據庫導出數據庫備份文件 $mysql_bin_dir/mysqldump -u$mysqluser -p$mysqlpwd $databaseName | gzip > $backupdir/$bakdatabaseName$time.sql.gz #保留3天內的備份文件,時間可通過-mtime 后的 +2 修改 find $backupdir -name "$bakdatabaseName*.sql.gz" -type f -mtime +2 -exec rm -f {} \; > /dev/null 2>&1 #將備份文件發送到測試服務器B /home/backup/scp.exp $backupdir/$bakdatabaseName$time.sql.gz $targetServerUser@$targetServerIP:$targetpath/$bakdatabaseName$time.sql.gz
在B服務器上編寫腳本updatemysql.sh用於恢復數據到B服務器mysql上
updatemysql.sh

#!/bin/bash # FileName:updatemysql.sh # This is a ShellScript For Auto DB Backup and Delete old Backup backupdir=/home/backup #測試服務器B數據庫備份文件路徑 mysql_bin_dir=/usr/bin #測試服務器B的mysql的安裝路徑 databaseName=agm #數據庫名字 bakdatabaseName=backup_$databaseName #備份的數據庫的文件名 mysqluser=root #測試服務器B的mysql用戶名 mysqlpwd=123456 #測試服務器B的mysql密碼 time=` date +%Y%m%d ` #當天的日期:年月日 #先刪除前一天的數據庫 $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "drop database $databaseName;" #創建新的數據庫 $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "create database $databaseName;" #將備份的數據庫文件導入到mysql中 gzip -dc $backupdir/$bakdatabaseName$time.sql.gz | $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd $databaseName #保留3天內的備份文件,時間可通過-mtime 后的 +2 修改 find $backupdir -name "*.sql.gz" -type f -mtime +2 -exec rm -f {} \; > /dev/null 2>&1
安裝軟件 yum install crontabs
ssh免密碼登錄
mysql 遠程登錄權限
backmysql.sh
backupdir=/home/backup
mysql_bin_dir=/usr/bin #mysqldump的路徑
databaseName=agm #備份的數據庫名字
bakdatabaseName=backup_agm #備份的數據庫全部表的文件名
mysqluser=root #正式服務器A的mysql用戶名
mysqlpwd=123456 #正式服務器A的mysql密碼
targetServerUser=root #測試服務器B的用戶名
targetServerIP=192.168.100.201 #測試服務器B的IP地址
targetpath=/home/backup #測試服務器B備份路徑
time=`date +%Y%m%d` #當天的日期年月日
#從數據庫導出數據庫備份文件
$mysql_bin_dir/mysqldump -u$mysqluser -p$mysqlpwd $databaseName | gzip > $backupdir/$bakdatabaseName$time.sql.gz
#保留3天內的備份文件,時間可通過-mtime 后的 +2 修改
find $backupdir -name "$bakdatabaseName*.sql.gz" -type f -mtime +2 -exec rm -f {} \; > /dev/null 2>&1
#將備份文件發送到測試服務器B
/home/backup/scp.exp $backupdir/$bakdatabaseName$time.sql.gz $targetServerUser@$targetServerIP:$targetpath/$bakdatabaseName$time.sql.gz
scp.exp
#!/usr/bin/expect
#FileName:scp.exp
set timeout 60
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd root123
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
updatemysql.sh
#!/bin/bash
# FileName:updatemysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
backupdir=/home/backup #測試服務器B數據庫備份文件路徑
mysql_bin_dir=/usr/bin #測試服務器B的mysql的安裝路徑
databaseName=agm #數據庫名字
bakdatabaseName=backup_$databaseName #備份的數據庫的文件名
mysqluser=root #測試服務器B的mysql用戶名
mysqlpwd=123456 #測試服務器B的mysql密碼
time=` date +%Y%m%d ` #當天的日期:年月日
#先刪除前一天的數據庫
$mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "drop database $databaseName;"
#創建新的數據庫
$mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "create database $databaseName;"
#將備份的數據庫文件導入到mysql中
gzip -dc $backupdir/$bakdatabaseName$time.sql.gz | $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd $databaseName
#保留3天內的備份文件,時間可通過-mtime 后的 +2 修改
find $backupdir -name "*.sql.gz" -type f -mtime +2 -exec rm -f {} \; > /dev/null 2>&1