Xtrabackup安裝備份還原<一>

架構

備份IP:172.17.100.103(5.6.39)

還原IP:172.17.100.104(5.6.39)

線上備份:阿里云RDS(5.6.16)

還原IP:172.17.100.101(5.7.22)

###################################################

實驗一:完成Xtrabackup的安裝祟偷,以及測試環(huán)境下的備份和還原

###################################################

Xtrabackup的安裝

(CentOS6)前置依賴條件

#在centos6.6和6.8的版本上直接安裝會提示缺少一個依賴條件,因此需要先打上這個rpm包

wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/libev-4.15-1.el6.rf.x86_64.rpm

yum install -y libev-4.15-1.el6.rf.x86_64.rpm

yum安裝xtrabackup

wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.14-1.el6.x86_64.rpm

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5
yum install -y percona-xtrabackup-24-2.4.14-1.el6.x86_64.rpm


CentOS7下的xtrabackup安裝

centos7在執(zhí)行到上面的? ? “yum install percona-xtrabackup-24 -y”? ?這一步時會提示報錯,證明CentOS6下面的版本無法通用于7

yum install -y libev

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

yum install -y percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm


單機備份(172.17.100.103)

#創(chuàng)建備份路徑

mkdir -p /data/Xtrabackup

#執(zhí)行備份

(innobackupex -S /tmp/mysql3306.sock -uroot -p密碼 /data/Xtrabackup/)

#上面一條執(zhí)行備份時出現(xiàn)過報錯,最好指定一下參數(shù)文件

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --user=root --password=beacon /data/Xtrabackup/

#將備份拷貝到目的IP

scp -r /data/Xtrabackup/2018-06-26_09-27-15/ 172.17.100.104:/data/Xtrabackup/

單機還原(172.17.100.104)

#刪除datadir下的數(shù)據(jù)文件(2臺測試機沒有開啟binlog)

cd /usr/local/mysql/data

rm -rf *

#執(zhí)行還原

innobackupex --apply-log /data/Xtrabackup/2018-06-26_09-27-15/

innobackupex --copy-back /data/Xtrabackup/2018-06-26_09-27-15/

#更改權限

chown -R mysql.mysql? /usr/local/mysql/data

遇到的問題

問題①

104的mysql沒有執(zhí)行關閉谤职,直接執(zhí)行的數(shù)據(jù)還原为障,完成之后可以登陸,也可以查看到有多少表被恢復過來吧黄,但是在執(zhí)行表內(nèi)容查詢時部服,提示該表不存在

并且無法用service mysqld stop去關閉mysql

#通過mysqladmin關閉mysql

mysqladmin -uroot -p shutdown

完成重啟后,可以正常使用數(shù)據(jù)庫

問題②

備份時報錯InnoDB: File ./ib_logfile2: 'open' returned OS error 71. Cannot continue operation

解決方法:在備份時指定cnf文件

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --user=root --password=beacon /data/Xtrabackup/

###################################################

實驗二:線上RDS庫(5.6.16)還原到本地(5.6.39)

###################################################

下載阿里云解壓腳本

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh

chmod +x rds_backup_extract.sh

將RDS的備份文件拷貝到本地

./rds_backup_extract.sh -f hins4334903_data_20180625233726.tar.gz -C /usr/local/mysql/data/

#執(zhí)行恢復

innobackupex --defaults-file=/usr/local/mysql/data/backup-my.cnf --apply-log /usr/local/mysql/data

#修改數(shù)據(jù)路徑的權限

chown -R mysql.mysql /usr/local/mysql/data

#對數(shù)據(jù)目錄(/usr/local/mysql/data)下之前解壓出的backup-my.cnf進行修改拗慨,注釋掉一堆RDS特有的設置

綜合來說能留下的就是這3個設置

innodb_data_file_path=ibdata1:200M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=1048576000

因為我本地5.6并沒有按照標準規(guī)范去安裝廓八,所以這里并不像我5.7MySQL庫設置得那樣嚴謹

我直接把這3行拷貝到了/etc/my.cnf的[mysqld]下

然后用service mysqld start啟動了數(shù)據(jù)庫

#在RDS里創(chuàng)建的用戶,是不會被恢復到本地的赵抢,因此采用下列方式即可完成登陸

mysql -uroot

檢查確認所有庫都可以打開剧蹂,數(shù)據(jù)恢復完成;

根據(jù)阿里云的指導文檔烦却,在新建用戶前還需要完成下面這個操作

delete from mysql.db where user<>'root' and char_length(user)>0;delete from mysql.tables_priv where user<>'root' and char_length(user)>0;flush privileges;

讀取mysql.user可以發(fā)現(xiàn)賬號只有root@localhost等3個空密碼的賬號宠叼,對其修改密碼時,出現(xiàn)了下圖的錯誤

ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now running 50639. Please use mysql_upgrade to fix this error.


通過mysql_upgrade來解決該問題

完成升級后該問題得以解決

執(zhí)行完mysql_update之后關鍵的一步:一定要重啟F渚簟C岸!

否則在打開performance_schema相關表的時候摩渺,仍然會有報錯<蚩尽!摇幻!

至此RDS(5.6)恢復到本地(5.6)完成横侦,但是有一個遺留問題

在此次恢復過程中,只是用了apply-log绰姻,沒有用copy-back就完成了恢復枉侧,那么copy-back的意義何在呢?(本機需要copy-back狂芋,異機不需要)

###################################################

實驗三:線上RDS庫(5.6.16)還原到本地(5.7.22)

###################################################

--------------------------------------------------------------------------------------

寫在最前:阿里云RDS恢復到本地踩到的坑

在執(zhí)行恢復的時候榨馁,遇到了一個gone away的報錯

通過tail -f error.log可以發(fā)現(xiàn)是一個參數(shù)造成的恢復中斷

將參數(shù)max_allowed_packet設置為與線上庫相同的值后解決該問題(截圖參見實驗四)

在阿里云生產(chǎn)環(huán)境上這個值設置的是1024M

官網(wǎng)下載的5.7.22該值默認僅為4M(4194304Byte/1024/1024)

--------------------------------------------------------------------------------------

總體來說把RDS跨版本恢復到5.7與恢復到5.6沒有太多差異,相同之處直接復制實驗二的字段帜矾,差異之處加粗處理

5.7.22的數(shù)據(jù)目錄路徑為/data/mysql/mysql3306/data

下載阿里云解壓腳本

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh

chmod +x rds_backup_extract.sh

將RDS的備份文件拷貝到本地

./rds_backup_extract.sh -f hins4334903_data_20180625233726.tar.gz -C /data/mysql/mysql3306/data

把恢復到本地的backup-my.cnf中的

innodb_data_file_path=ibdata1:200M:autoextend

復制到我的defaults-file中(我本地設置的是100M

#執(zhí)行恢復(生成ibdata)

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf?--apply-log /data/mysql/mysql3306/data

#修改數(shù)據(jù)路徑的權限

chown -R mysql.mysql /data/mysql/mysql3306/data

#一切準備妥當翼虫,啟動MySQL

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

在另一個會話中讀取error.log,可以發(fā)現(xiàn)如下報錯

毫無疑問仍然需要upgrade

執(zhí)行mysql_upgrade -S /tmp/mysql3306.sock -uroot

完成之后黍特,log中已經(jīng)沒有error

#修改賬戶的密碼

delete from mysql.db where user<>'root' and char_length(user)>0;delete from mysql.tables_priv where user<>'root' and char_length(user)>0;flush privileges;

alter user user() identified by '密碼';

flush privileges;

據(jù)說跨版本升級如果配置不當會造成索引失效蛙讥,我們這里只是一個遷移工作,確認一下索引是否安好

確認表都可以正常打開灭衷,恢復完成次慢!

執(zhí)行完mysql_update之后關鍵的一步:一定要重啟!!迫像!

否則在打開performance_schema相關表的時候劈愚,仍然會有報錯!N偶恕菌羽!

###################################################

實驗四:恢復線上RDS最新的數(shù)據(jù)到本地

###################################################.

--------------------------------------------------------------------------------------

寫在最前:阿里云RDS恢復到本地踩到的坑

在執(zhí)行恢復的時候,遇到了一個gone away的報錯

通過tail -f error.log可以發(fā)現(xiàn)是一個參數(shù)造成的恢復中斷

將參數(shù)max_allowed_packet設置為與線上庫相同的值后解決該問題

在阿里云生產(chǎn)環(huán)境上這個值設置的是1024M

官網(wǎng)下載的5.7.22該值默認僅為4M(4194304Byte/1024/1024)

--------------------------------------------------------------------------------------

參照實驗三由缆,完成RDS數(shù)據(jù)的恢復

針對線上活躍的某張表核對數(shù)據(jù)記錄注祖,線下通過innobackupex恢復(不加binlog)行數(shù)為1546286,線上為1560004(6月27日19點左右的數(shù)據(jù))

對恢復的xtrabackup_binlog_info進行查看均唉,可以發(fā)現(xiàn)當前恢復的數(shù)據(jù)在binlog中使用的log為mysql-bin.000336是晨,位置點為13090077

也就是說恢復所需要的起始binlog為mysql-bin.000336

到線上下載336到現(xiàn)在產(chǎn)生的所有binlog(336-346),并傳到/data/mysql/mysql3306/logs下

快速傳送windows小文件工具:lrzsz工具安裝使用參考

cd ~

cp mysql-bin.0003*?/data/mysql/mysql3306/logs

chown -R mysql.mysql?/data/mysql/

#探尋末尾位置點

cd?/data/mysql/mysql3306/logs

#將最后一個binlog導出成文本文件

mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000346 > 346.log

tail -10f 346.log

可以獲知最后一個binlog的最后一個end_pos為86242654

將需要還原的binlog排列全部列出舔箭,第一個binlog為336罩缴,最后一個為346;(中間的是否需要按順序沒有測試层扶,我采取了順序排列)

start-position為第一個binlog的相應的end_log_pos:13090077

stop-position為最后一個binlog的最后一個end_log_pos:86242654

#我是切換到/data/mysql/mysql3306/logs下執(zhí)行的箫章,在其他路徑下執(zhí)行,需要把binlog的位置寫全

mysqlbinlog --start-position=13090077 --stop-position=86242654 mysql-bin.000336 mysql-bin.000337 mysql-bin.000338 mysql-bin.000339 mysql-bin.000340 mysql-bin.000341 mysql-bin.000342 mysql-bin.000343 mysql-bin.000344 mysql-bin.000345?mysql-bin.000346?|mysql -uroot

完成恢復后沒有報錯镜会,重新啟動mysql

在啟動的log中可以看到recovery的相關log

重啟完成后檬寂,在binlog路徑下可以看到新生成的binlog,同時在binlog.index里面可以看到新生成的binlog已經(jīng)加入

驗證數(shù)據(jù)稚叹,已經(jīng)完全超越了昨晚的數(shù)據(jù)量



--2019.8.2華為云RDS恢復到線下

1.下載qpress并解壓

cd ~

wget http://www.quicklz.com/qpress-11-linux-x64.tar

tar -xf qpress-11-linux-x64.tar

mv qpress /usr/bin/

2.下載線上qp備份文件到需要恢復的服務器(假設路徑為/home/run)

cd /home/run

3.刪除原數(shù)據(jù)庫的數(shù)據(jù)和日志文件(確定數(shù)據(jù)庫可以處理焰薄,否則請做好備份)

rm -rf /data/mysql/mysql3306/data/*

rm -rf /data/mysql/mysql3306/logs/*

4.還原

xbstream -x < *.qp -C /data/mysql/mysql3306/data/

innobackupex --decompress /data/mysql/mysql3306/data/

find /data/mysql/mysql3306/data/ -name "*.qp" | xargs rm -f

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --apply-log /data/mysql/mysql3306/data

chown -R mysql.mysql /data/mysql

5.華為的和阿里恢復不同拿诸,不會清理線上的密碼扒袖,而且在華為的表里面是沒有root@localhost這個用戶的,華為云具備super權限的賬戶是rdsAdmin

sed -i 's/#skip-grant-tables=1/skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

#修改密碼亩码,同時對root@'%'授權

mysql -urdsAdmin << EOF

update mysql.user set authentication_string=password('密碼') where user='rdsAdmin';

grant all privileges on *.* to root@'%' with grant option;

flush privileges;

shutdown;

EOF

#關閉免密登錄

sed -i 's/skip-grant-tables=1/#skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

#執(zhí)行登陸即可

mysql -uroot -p'密碼'


#腳本如下(首先確認innobackup裝完季率,qp文件拷貝到了/home/run路徑下,且只有1個qp文件)


#!/bin/bash

#? ? ? 2019.8.5

#? ? ? FlyDido

#? ? ? 物理恢復華為RDS的全量備份

pid=`ps -ef|grep '/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf'|grep -v grep|awk '{print $2}'`

if [ -z "$pid" ]; then

? ? ? ? echo "mysql is down" > /tmp/dump.log

else

? ? ? ? kill -9 $pid

fi

rm -rf /data/mysql/mysql3306/data/*

rm -rf /data/mysql/mysql3306/logs/*

cd /home/run

#解壓

xbstream -x < *.qp -C /data/mysql/mysql3306/data/

innobackupex --decompress /data/mysql/mysql3306/data/

find /data/mysql/mysql3306/data/ -name "*.qp" | xargs rm -f

#應用日志

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --apply-log /data/mysql/mysql3306/data

chown -R mysql.mysql /data/mysql

sed -i 's/#skip-grant-tables=1/skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

#判定mysql啟動情況

while((1<100))

do

? ? ? ? tail -10 /data/mysql/mysql3306/data/error.log |grep 'ready for connections' &>> /tmp/dump.log

? ? ? ? if [ $? == 0 ];then

? ? ? ? ? ? ? ? echo -e "mysql啟動完成\n"

? ? ? ? ? ? ? ? break

? ? ? ? else

? ? ? ? ? ? ? ? echo -e "mysql啟動中...\n"

? ? ? ? ? ? ? ? sleep 10

? ? ? ? fi

done

#mysql_upgrade -uroot &>> /tmp/dump.log &&

mysql -urdsAdmin << EOF

update mysql.user set authentication_string=password('密碼') where user='rdsAdmin';

grant all privileges on *.* to root@'%' with grant option;

flush privileges;

shutdown;

EOF

sed -i 's/skip-grant-tables=1/#skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

echo -e "恢復完成,密碼為XXXX"

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末描沟,一起剝皮案震驚了整個濱河市飒泻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吏廉,老刑警劉巖泞遗,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異席覆,居然都是意外死亡史辙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聊倔,“玉大人晦毙,你說我怎么就攤上這事“颐铮” “怎么了见妒?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甸陌。 經(jīng)常有香客問我须揣,道長,這世上最難降的妖魔是什么钱豁? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任返敬,我火速辦了婚禮,結果婚禮上寥院,老公的妹妹穿的比我還像新娘劲赠。我一直安慰自己,他們只是感情好秸谢,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布凛澎。 她就那樣靜靜地躺著,像睡著了一般估蹄。 火紅的嫁衣襯著肌膚如雪塑煎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天臭蚁,我揣著相機與錄音最铁,去河邊找鬼。 笑死垮兑,一個胖子當著我的面吹牛冷尉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播系枪,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼雀哨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了私爷?” 一聲冷哼從身側響起雾棺,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衬浑,沒想到半個月后捌浩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡工秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年尸饺,在試婚紗的時候發(fā)現(xiàn)自己被綠了宏榕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡侵佃,死狀恐怖麻昼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馋辈,我是刑警寧澤抚芦,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站迈螟,受9級特大地震影響叉抡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜答毫,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一褥民、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洗搂,春花似錦消返、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惫叛,卻和暖如春倡勇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉涌。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工妻熊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仑最。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓扔役,卻偏偏與公主長得像,于是被迫代替她去往敵國和親词身。 傳聞我的和親對象是個殘疾皇子厅目,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容