innobackupex遠程備份腳本

#!/bin/sh
#備份主機
remote_ip=10.2.142.161
Master_ip=10.2.142.148
VIP=103.2.132.136
#備份用戶
user='root'
#密碼
password='123456'
# 返回年月日
backup_date=`date +%F`
# 返回時分秒
backup_time=`date +%H-%M-%S`
# 返回今天是這周的第幾天
backup_week_day=`date +%u`
backup_ok=0
#備份目錄
socket=/data/mysql/mysql.sock
# 備份路徑
backup_dir=/data/xtrabackup
backup_dir_local=/data/xtrabackup_local
# 數據目錄
datadir=/data/mysql
# percona-xtrabackup 備份軟件路徑
xtrabackup_dir=/usr/bin
# 全備是在一周的第幾天
full_backup_week_day=6
#周期性全量增量開始日期# 全量備信息名稱前綴
full_backup_prefix=full
# 增量備信息名稱前綴
increment_prefix=incr
# mysql配置文件
mysql_conf_file=/etc/my.cnfcycle=$backup_date
cycle_record=$backup_dir/cycle_record.txtif [ ! -f $backup_dir/cycle_record.txt ];thenindex=$backup_date
elseif [ "$full_backup_week_day" -eq `date +%u` ]; thenindex=$backup_dateelseindex=`cat $backup_dir/cycle_record.txt`fi
fi
index_file=$backup_dir/backup_$index.index
index_file_local=$backup_dir_local/backup_$index.indexlog_dir=$backup_dir/log
if [ ! -d "$backup_dir" ];thenmkdir -p $backup_dir
fi
if [ ! -d "$backup_dir_local" ];thenmkdir -p $backup_dir_local
fi
if [ ! -d "$log_dir" ];thenmkdir -p $log_dir
fifunction append_index_to_file() {echo "{week_day:$backup_week_day, \dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \type:${1}, \date:${backup_date}}" >> $index_file
}
function append_index_to_file_local() {echo "{week_day:$backup_week_day, \dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \type:${1}, \date:${backup_date}}" >> $index_file_local
}
# 判斷是應該全備還是增量備份
# 0:full, 1:incr
function get_backup_type() {full_backup_week_day=$full_backup_week_daybackup_type=0if [ ! -f "$index_file" ]; thentouch "$index_file"fiif [ "$full_backup_week_day" -eq `date +%u` ]; thenbackup_type=0elsebackup_type=1fiif [ ! -n "`cat $index_file`" ]; thenbackup_type=0fireturn $backup_type
}
#推送遠程全量備份
function full_backup (){backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}if [ ! -d $backup_dir_local/$cycle/ ]; thenmkdir $backup_dir/$cycle/fiecho $cycle>$backup_dir/cycle_record.txtssh $user@$remote_ip  "if [ ! -d $backup_dir/$cycle/ ];then mkdir -p $backup_dir/$cycle; fi "innobackupex --defaults-file=$mysql_conf_file --no-timestamp --user=$user \--password=$password --host=${VIP} --port=3306 --extra-lsndir=$backup_dir/$cycle/$backup_folder  --compress \--stream=xbstream $backup_dir  | ssh $user@$remote_ip  "gzip ->$backup_dir/$cycle/$backup_folder.tar.gz" if [ $? -eq 0 ];thenappend_index_to_file  $full_backup_prefixlog_info 0 fullelselog_info 1 fullfi
}#推送遠程增量備份{week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr}
incremental (){backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}incr_record=`cat $backup_dir/cycle_record.txt`echo $backup_dir/$incr_record#cd $backup_dir/$incr_recordincr_base_folder=`sed -n '$p' $index_file | \awk -F '[, {}]*' '{print $3}' | \awk -F ':' '{print $2}'`echo $backup_dir/$incr_record/${incr_base_folder}innobackupex --defaults-file=$mysql_conf_file \--no-timestamp --user=$user --password=$password --host=${VIP} --port=3306  \--stream=xbstream --compress --extra-lsndir=$backup_dir/$incr_record/$backup_folder \--incremental backup_folder --incremental-basedir=$backup_dir/$incr_record/${incr_base_folder} \|ssh $user@$remote_ip  "gzip ->$backup_dir/$incr_record/$backup_folder.tar.gz" \if [ $? -eq 0 ];thenlog_info 0 incrappend_index_to_file  $increment_prefixelselog_info 1 incrfi
}function full_backup_local (){backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}if [ ! -d $backup_dir_local/$cycle/ ]; thenmkdir $backup_dir_local/$cycle/fiecho $cycle>$backup_dir_local/cycle_record.txtinnobackupex --defaults-file=$mysql_conf_file --no-timestamp --user=$user \--password=$password --host=${VIP} --port=3306 $backup_dir_local/$cycle/$backup_folderif [ $? -eq 0 ];thenecho "全量備份成功"append_index_to_file_local  $full_backup_prefixlog_info_local 0 fullelselog_info_local 1 fullfi
}#本地增量備份{week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr}
incremental_local (){backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}incr_record=`cat $backup_dir_local/cycle_record.txt`echo $backup_dir_local/$incr_record#cd $backup_dir/$incr_recordincr_base_folder=`sed -n '$p' $index_file_local | \awk -F '[, {}]*' '{print $3}' | \awk -F ':' '{print $2}'`echo  $incr_base_folderecho $backup_dir_local/$incr_record/${incr_base_folder}innobackupex --defaults-file=$mysql_conf_file \--no-timestamp --user=$user --password=$password --host=${VIP} --port=3306  \--incremental $backup_dir_local/$incr_record/$backup_folder --incremental-basedir=$backup_dir_local/$incr_record/$incr_base_folder   if [ $? -eq 0 ];thenlog_info_local 0 incrappend_index_to_file_local  $increment_prefixelselog_info_local 1 incrfi
}
function log_info (){
if [[ "$1" = "0" ]];thenif [ "$2" = "full" ];thenecho "全量備份成功" >$backup_dir/successelseecho "增量備份成功" >$backup_dir/failfi
elseif [ "$2" = "full" ];thenecho "全量備份失敗" >$backup_dir/successelseecho "增量備份失敗" >$backup_dir/failfi
fi
}
function log_info_local ()
{
echo "全量備份成功"
if [[ "$1" = "0" ]];thenif [ "$2" = "full" ];thenecho "全量備份成功" >$backup_dir/successelseecho "增量備份成功" >$backup_dir/failfi
elseif [ "$2" = "full" ];thenecho "全量備份失敗" >$backup_dir/successelseecho "增量備份失敗" >$backup_dir/failfi
fi
}
function run_auto() {get_backup_typebackup_type=$?echo $backup_typecase $backup_type in0)full_backup			   ;;1)incremental			     ;;*)echo "Please  use it this way. Usage:$0 {0|1}";;esac  
}
function run_manual() {case $1 infull)full_backup;;incremental)incremental;;*)echo "Please  use it this way. Usage:$0 {Full|incremental}";;esac 
}
function run_auto_local() {get_backup_typebackup_type=$?case backup_type in0)full_backup_local;;1)incremental_local;;*)echo "Please  use it this way. Usage:$0 {Full|incremental}";;esac  
}
function run_manual_local() {#echo $1case $1 infull)full_backup_local;;incremental)incremental_local;;*)echo "Please  use it this way. Usage:$0 {full|incremental}";;esac 
}
run_auto
#run_auto_local
#run_manual_local $1
#run_manual $1
What’s the problem with FTWRL anyway?
A lot has been written on what FLUSH TABLES WITH READ LOCK really does. Here’s yet another walk-through in a bit more detail than described elsewhere:It first invalidates the Query Cache.
It then waits for all in-flight updates to complete and at the same time it blocks all incoming updates. This is one problem for busy servers.
It then closes all open tables (the FLUSH part) and expels them from the table cache. This is also whenFTWRL has to wait for all SELECT queries to complete. And this is another, even bigger problem for busy servers, because that wait happens to occur with all updates blocked. What’s even worse, the server at this stage is essentially offline, because even incoming SELECT queries will get blocked.
Finally, it blocks COMMITs.
1.它首先使查詢緩存無效。
2.然后,等待所有更新完成,并在同一時間,它阻止所有的更新。這對于繁忙的服務器是一個問題。
3.然后,它關閉所有打開的表(沖洗表)并且從表中的高速緩存刷出。這也是當FTWRL必須等待所有的SELECT查詢完成。這是另一個更大的問題為繁忙的服務器,因為等待恰好發生這將堵塞所有的更新。更糟的是,服務器在這個階段基本上是離線狀態,因為即使進入的SELECT查詢將被封鎖。
4.最后,它會阻止事務提交。Percona已經提供了解決方案(2.1版本開始):設置一個超時時間,避免無限期的等待。Xtrabackup提供了以下參數實現該功能:--lock-wait-timeout=SECONDS, ,一旦Flush table with read lock被阻塞超過預定時間,則XtraBackup出錯返回退出,該值默認為0,也就是說一旦阻塞,立即返回失敗。
--lock-wait-query-type=all|update,該參數允許用戶指定,哪類的SQL語句是需要Flush table with read lock等待的,同時用戶可以通過--lock-wait-threshold=SECONDS設置等待的時間,如果不在query-type指定的類型范圍內或者超過了wait-threshold指定的時間,XtraBackup均返回錯誤。如果指定update類型,則UPDATE/ALTER/REPLACE/INSERT 均會等待,ALL表示所有的SQL語句。kill 其他阻塞線程
Kill掉所有阻塞Flush table with read lock的線程:
--kill-long-queries-timeout=SECONDS參數允許用戶指定了超過該閾值時間的查詢會被Kill,同時也允許用戶指定KillSQL語句的類型。
--kill-long-query-type=all|select
默認值為ALL,如果選擇Select,只有Select語句會被Kill,如果Flush table with read lock是被Update語句阻塞,則XtraBackup不會處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535328.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL管理利器 MySQL Utilities---mysqlreplicate

mysqlreplicate 工具是在兩臺服務器間設置和啟動復制。用戶提供登錄從服務器信息和連接到主的信息。也可以指定一個數據庫用于測試復制。 該工具報告條件是當主和從的存儲引擎不一樣時。如果主和從的存儲引擎不同將產生告警信息。對于Innodb存儲引擎而言,必需完全…

MySQL管理工具MySQL Utilities — 如何連接MySQL服務器

連接參數 連接到一個服務器,必須指定連接參數,如用戶名,主機名稱,密碼,端口號,socket。MySQL Utilities提供了三種提供這些參數的方法,這些方法都需要通過命令行指定。 使用.mylogin.cnf文件&…

MHA高可用

manager 組件 masterha_manger # 啟動MHA masterha_check_ssh # 檢查MHA的SSH配置狀況 masterha_check_repl # 檢查MySQL復制狀況,配置信息 masterha_master_monitor # 檢測master是否宕機 masterha_check_status # 檢測當…

MySQL Replication需要注意的問題

主庫意外宕機 如果沒有設置主庫的sync_binlog選項,就可能在奔潰前沒有將最后的幾個二進制日志事件刷新到磁盤中。備庫I/O線程因此也可一直處于讀不到尚未寫入磁盤的事件的狀態中。當主庫從新啟動時,備庫將重連到主庫并再次嘗試去讀該事件,但…

update和delete操作忘加where條件導致全表更新的處理方法

在數據庫日常維護中,開發人員是最讓人頭痛的,很多時候都會由于SQL語句寫的有問題導致服務器出問題,導致資源耗盡。最危險的操作就是在做DML操作的時候忘加where條件,導致全表更新,這是作為運維或者DBA的我們改如何處理…

Innodb結構

從MySQL5.5版本開始默認使用InnoDB作為引擎,它擅長處理事務,具有自動崩滿恢復的特性,在日常開發中使用非常廣泛,下面是言方的InnoDB引擎美構圖,主要分為內存結構和磁盤結構兩大部分。 內存結構主要包括Buffer Pool、C…

ES備份工具elasticdump

安裝 下載node下載 | Node.js 中文網 tar xvf node-v16.5.0-linux-x64.tar.xz ln -s /app/temp/node-v16.5.0-linux-x64/bin/node /usr/bin/node ln -s /app/temp/node-v16.5.0-linux-x64/bin/npm /usr/bin/npm npm install elasticdump -g npm config get cache npm in…

innodb_flush_method理解【轉】

innodb_flush_method這個參數控制著innodb數據文件及redo log的打開、刷寫模式,對于這個參數,文檔上是這樣描述的: 有三個值:fdatasync(默認),O_DSYNC,O_DIRECT 默認是fdatasync,調用fsync()去…

linux下的/dev/shm/

首先可以看出來/dev/shm是一個設備文件, 可以把/dev/shm看作是系統內存的入口, 可以把它看做是一塊物理存儲設備,一個tmp filesystem, 你可以通過這個設備向內存中讀寫文件, 以加快某些I/O高的操作,比如對一個大型文件頻繁的open, write, read&#xff0…

2021-07-30

1.服務器級別的鎖等待 可以通過show processlist看到等待鎖的線程id,但是無法知道究竟哪個線程持有鎖 可以通過mysqladmin debug 相關等待鎖的線程以及誰持有鎖可以在錯誤日志中找到 2.存儲引擎層的鎖等待則比較麻煩,以下是innodb存儲引擎中鎖等待以及…

getopt設計shell腳本選項

寫shell腳本的時候,通過while、case、shift來設計腳本的命令行選項是一件比較麻煩的事,因為Unix命令行的選項和參數自由度很高,支持短選項和長選項,參數可能是可選的,選項順序可能是無所謂的,等等。 bash下…

percona-toolkit---pt-heartbeat

對于MySQL數據庫主從復制延遲的監控,可以借助percona的有力武器pt-heartbeat來實現。 pt-heartbeat的工作原理通過使用時間戳方式在主庫上更新特定表,然后在從庫上讀取被更新的時間戳然后與本地系統時間對比來得出其延遲。具體流程: 1&…

定時刪除腳本

#!/bin/sh backup_dir/data/xtrabackup DATEdate %Y-%m-%d #DATE_NOWdate %Y-%m-%d.%H%M DATE_NOWdate %Y-%m-%d PATH/usr/local/mysql/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATHbinog保留7天 binlog/data/binlogserver binlog_Rtime7#備…

percona-toolkit--pt-table-checksum

pt-table-checksum 是 Percona-Toolkit的組件之一,用于檢測MySQL主、從庫的數據是否一致。其原理是在主庫執行基于statement的sql語句來生成主庫數據塊的checksum,把相同的sql語句傳遞到從庫執行,并在從庫上計算相同數據塊的checksum&#xf…

Docker容器間網絡通信

自從Docker容器出現以來,容器網絡通信就一直是被關注的焦點,也是生產環境的迫切需求。容器網絡通信又分為兩大方面:單主機容器上的相互通信,和跨主機的容器相互通信。 一、Docker單主機容器通信 基于對net namespace的控制&#…

Docker容器的重啟策略

1. Docker容器的重啟策略 Docker容器的重啟策略是面向生產環境的一個啟動策略,在開發過程中可以忽略該策略。 Docker容器的重啟都是由Docker守護進程完成的,因此與守護進程息息相關。 Docker容器的重啟策略如下: no,默認策略&…

innobackupex實現導出和導入單張表

默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過只能"導出"具有.ibd文件的表,也就是說導出表的mysql服務…

xtrabackup工具

(1).備份過程 和innobackupex備份過程不同的是,xtrabackup的備份路徑是由"--target-dir"選項嚴格指定的,如果指定的目錄不存在,它備份的時候不會在target-dir目錄中再創建時間戳子目錄。 [rootxuexi data]# xtrabackup --backup …

mysql數據庫參數

注意:在配置binlog相關變量的時候,相關變量名總是搞混,因為有的是binlog,有的是log_bin,當他們分開的時候,log在前,當它們一起的時候,bin在前。在配置文件中也同樣如此。 log_bin …

oracle命令行安裝

cd /home/oracle/databases/runInstaller -silent -force -showprogress -responseFile /home/oracle/database/db_install.rsp -ignoreSysPrereqs -ignorePrereqdbca -silent -responseFile pwd/dbca.rspnetca -silent -responseFile /home/oracle/databases/netca.rsp