mysql單表備份和恢複

來源:互聯網
上載者:User

標籤:mysql備份   shell   mysql   單表備份   

說明:此指令碼經測試可用於資料清理,對單表進行清理,清理出問題,可以回退進行單表的恢複。
指令碼特點:
指令碼1用於單表備份
指令碼2用於對單表進行資料恢複
並增加完善的日誌記錄功能。
支援指令碼傳參,對指定的表進行備份和恢複。
通用性好,只需改下使用者密碼和想要備份的庫,即可用。

1.mysql_bak_table.sh #mysql單表備份指令碼
使用方法:sh mysql_bak_table.sh table_name

#!/bin/bash
#author laocao
#time:20180412

back_dir="/tmp/backup" #備份的壓縮包存放路徑
mysql_user="root"
mysql_passwd="passwd"

db="test_dcp" #備份的庫名
db_table="$1" #備份庫中的某表
filename="${db_table}.tar.gz"
log="/opt/xtrabackup_scripts/bak_singleTable.log"
databak="/tmp/databak" #資料備份解壓匯出表的資料

[ ! -d $back_dir ] && mkdir -p $back_dir
[ ! -d $databak ] && mkdir -p $databak

#如果有備份則刪除
[ -f $back_dir/$filename ] && rm -rf $back_dir/$filename
#備份單表
echo "###開始備份單表${filename}###" >>$log
innobackupex --defaults-file=/etc/my.cnf --user=$mysql_user --password=$mysql_passwd --include=$db.$db_table --slave-info --safe-slave-backup --stream=tar $back_dir >$
back_dir/$filename

#檢查備份是否成功
[ $? -eq 0 ] && echo "###備份成功### $filename表###"date +%Y%m%d-%H%M%S >>$log

#表結構資料存在則刪除
[ -f $back_dir/${db_table}_jiegou.sql ] && echo rm -rf $back_dir/${db_table}_jiegou.sql
#備份線上表結構
mysqldump -u$mysql_user -p$mysql_passwd --set-gtid-purged=OFF -d $db $db_table > $back_dir/${db_table}_jiegou.sql
[ $? -eq 0 ] && echo "###匯出表結構${db_table}成功###" >>$log

2.mysql恢複單表指令碼:
sh mysql_recover_table.sh table_name

#project:mysql_recover_table.sh
#!/bin/bash
#author laocao
#time:20180412

back_dir="/tmp/backup" #備份的壓縮包存放路徑
mysql_user="root"
mysql_passwd="passwd"
db="test_dcp"
db_table="$1"
filename="${db_table}.tar.gz"
log="/opt/xtrabackup_scripts/recover_table.log"
databak="/tmp/databak" #資料備份解壓匯出表的資料
dbdata="/data1/docker_data/debug-mysql/mysql/data/$db" #原資料庫路徑

#備份目錄存在則刪除
if [ ! -d $databak/$db_table ];then
mkdir -p $databak/$db_table >>$log
else
rm -rf $databak/$db_table/* >>$log
fi

#解壓表
tar -xf $back_dir/$filename -C $databak/$db_table >>$log
[ $? -eq 0 ] && echo "###解壓備份${db_table}表成功###" >>$log

#匯出備份表資料
echo "##開始匯出備份表資料###" >>$log
innobackupex --apply-log --export $databak/$db_table
[ $? -eq 0 ] && echo "###匯出備份表${db_table}成功###" >>$log

#資料庫連接
mysql_conn="mysql -u$mysql_user -p$mysql_passwd"

#恢複表結構
$mysql_conn -D $db <$back_dir/${db_table}_jiegou.sql >>$log
[ $? -eq 0 ] && echo "###恢複表結構成功###" || (echo "##恢複表結構失敗###"; exit 1) >>$log

#卸載資料表空間
sql_discard_tablespace="ALTER TABLE ${db}.${db_table} DISCARD TABLESPACE"
$mysql_conn -e "$sql_discard_tablespace" >>$log
[ $? -eq 0 ] && echo "###卸載資料表空間成功###" || (echo "##卸載資料表空間失敗###"; exit 1) >$log

#從備份裡恢複表資料
cp $databak/$db_table/$db/{${db_table}.ibd,${db_table}.cfg} $dbdata

[ $? -eq 0 ] && echo "copy備份資料到線上成功" || (echo "copy備份資料到線上失敗"; exit 1) >>$log

#改表許可權
chown -R mysql.mysql $dbdata >>$log

#裝載資料表空間
sql_import_tablespace="ALTER TABLE ${db}.${db_table} import TABLESPACE"
$mysql_conn -e "$sql_import_tablespace" >>$log
[ $? -eq 0 ] && echo "#恢複表${db_table}資料成功##" >>$log

#查看資料是否恢複
mysql -u$mysql_user -p$mysql_passwd -e "select count(*) from ${db}.${db_table}" >>$log

mysql單表備份和恢複

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.