mysql遠程備份


相關鏈接:
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

}

}
View Code

 

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
View Code

 

 

在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
View Code

 

 

安裝軟件 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM