問(wèn)題描述:
- 需要將qp.xb文件內(nèi)部分?jǐn)?shù)據(jù)恢復(fù)到數(shù)據(jù)庫(kù)局劲,需要恢復(fù)到MySQL中可用,服務(wù)器知識(shí)趨向于0,摸索進(jìn)行吧。
思考:
Q:這種qp.xb格式的數(shù)據(jù)是如何生成的?
A: qp.xb文件生成過(guò)程是树酪,先經(jīng)過(guò) qpress 壓縮,后經(jīng)過(guò) xbstream 打包大州。生成的续语,所以我們還原過(guò)程即 先解包再解壓。
Q:既然qp.xb數(shù)據(jù)是先壓縮再打包形成的摧茴,那是通過(guò)什么軟件進(jìn)行的壓縮解壓绵载?
A:Xtrabackup 軟件進(jìn)行的壓縮埂陆,此軟件目前只支持Linux系統(tǒng)苛白,所以我們只能在Linux系統(tǒng)云服務(wù)器進(jìn)行此類(lèi)操作了。
Q:解壓這份數(shù)據(jù)焚虱,都需要哪些過(guò)程呢购裙?
A:首先需要準(zhǔn)備解壓軟件Xtrabackup,通過(guò)此軟件解壓成 frm 和 ibd格式的數(shù)據(jù)鹃栽,其次將frm格式數(shù)據(jù)恢復(fù)為Mysql數(shù)據(jù)可讀的格式即可躏率。
Q:既然只能在Linux系統(tǒng)上面操作,那Linux是什么?我是小白兔薇芝,我只是一直聽(tīng)說(shuō)服務(wù)器服務(wù)器蓬抄,但是并不完全了解到底是什么。夯到。嚷缭。。
A:簡(jiǎn)單說(shuō)耍贾,就是另一臺(tái)不同于Win和Macos 系統(tǒng)的電腦阅爽。在這里都是通過(guò)抽象的命令行對(duì)Linux電腦進(jìn)行操作。下面會(huì)介紹如何獲取一臺(tái)Linux服務(wù)器荐开,如何通過(guò)Mac登錄到Linux服務(wù)器進(jìn)行簡(jiǎn)單的操作付翁。創(chuàng)建文件夾、下載軟件晃听、安裝軟件等一些簡(jiǎn)單操作百侧,來(lái)滿(mǎn)足咱們數(shù)據(jù)恢復(fù)。
Linux知識(shí)雜學(xué):
- 先購(gòu)買(mǎi)一臺(tái)服務(wù)器杂伟,我們用阿里云的服務(wù)器就好了移层。登錄阿里云官網(wǎng)購(gòu)買(mǎi)即可,購(gòu)買(mǎi)后我們登錄到控制條的云服務(wù)器ECS創(chuàng)建一個(gè)實(shí)例(ECS 即 Elastic Compute Service 可彈性伸縮的服務(wù)),創(chuàng)建實(shí)例后即代表我們擁有了一臺(tái)屬于我們自己的Linux服務(wù)器赫粥,后面我們的操作都在此實(shí)例進(jìn)行观话,然后對(duì)實(shí)例進(jìn)行密碼重置。
- 如何操作Linux服務(wù)器:我在阿里云那邊創(chuàng)建完成實(shí)例越平、密碼重置后频蛔。我該如何在自己Mac電腦上操作這臺(tái)Linux服務(wù)器呢?我們識(shí)別Linux服務(wù)器是通過(guò)公網(wǎng)IP來(lái)識(shí)別秦叛,就如沒(méi)人身份證號(hào)一樣晦溪,我們通過(guò)ssh登錄此ip即可登錄這個(gè)服務(wù)器。
登錄服務(wù):ssh root@4.11.2x1.10
- 題外話(huà):剛才好奇看了下ssh由來(lái)挣跋。簡(jiǎn)單來(lái)說(shuō)三圆,這些服務(wù)器需要通過(guò)shell來(lái)控制,shell里面封裝了那些常用的命令避咆,常用的bash舟肉、zsh、oh my zsh等查库,ssh就是可以遠(yuǎn)程控制shell進(jìn)而來(lái)控制服務(wù)器路媚。mac系統(tǒng)子代ssh的終端,win系統(tǒng)自帶的cmd樊销。
用到的命令:
//通過(guò)ssh登錄遠(yuǎn)程服務(wù)器
ssh root@47.11.21x.16x
//啟動(dòng)mysql
systemctl start mysqld.service
// 查看mysql狀態(tài)
systemctl status mysqld.service
// 登錄數(shù)據(jù)庫(kù):
mysql -uroot -p
// 查看初始密碼
grep "password" /var/log/mysqld.log
// 修改數(shù)據(jù)庫(kù)密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'testTest11.....';
//創(chuàng)建數(shù)據(jù)庫(kù)
create database prod_coin_db;
// 刪除軟件安裝包緩存
yum clean packages
// 查看現(xiàn)有云盤(pán)容量
fdisk -l
// 查詢(xún)所有磁盤(pán)
df -h
// 內(nèi)存使用情況整慎,通過(guò)m來(lái)顯示
free -m
// 當(dāng)前文件下按大小排序
ls -Shl
// 查看 文件夾下面大小
ls -lh
// 查看Linux下文件的權(quán)限
ls -l
// 查看linux系統(tǒng)版本信息
lsb_release -a
// 刪除某個(gè)空文件夾
rmdir xxx
// 刪除如果不是空文件夾脏款,上面命令會(huì)報(bào)錯(cuò)
rm -rf xxxx
// 可以在單個(gè)命令中刪除多個(gè)目錄,如下面的命令所示裤园。命令刪除所有目錄和它們的子目錄撤师,而不提示刪除。
rm -rf dir1 dir2 dir3
// 可以使用下面的命令來(lái)移動(dòng)目錄內(nèi)的文件
mv <filename> <path_of _destination_directory>
//復(fù)制某個(gè)文件到某個(gè)文件夾下面.如果文件存在會(huì)提示覆蓋
cp address.frm /var/lib/mysql/wordpress/
//復(fù)制某個(gè)文件夾到某個(gè)文件夾下面
cp -r 文件夾A路徑 文件夾B路徑
- 查看log日志的命令
less
命令
// less 打開(kāi)所需查看文件
less 文件名路徑
//less 翻頁(yè)
空格
//less 跳轉(zhuǎn)到最后一行
shift + g
- SFTP本地Mac和服務(wù)器傳數(shù)據(jù)相關(guān)
// 查看服務(wù)器路徑
pwd
// 查看本地電腦路徑
lpwd
// 進(jìn)入Linux文件方法
cd xxx
// 進(jìn)入本地服務(wù)文件路徑的方法
lcd xxx
//上傳本地文件到服務(wù)器
put -r *
get命令
get xxx //xxxxxxlinux 系統(tǒng)中想要下載下來(lái)的文件的路徑
get -r xxx 與get xxx不同的是-r可以下載文件夾
途中發(fā)現(xiàn)Linux上面云盤(pán)容量不夠拧揽,對(duì)云盤(pán)進(jìn)行了一次擴(kuò)容丈氓,可是購(gòu)買(mǎi)擴(kuò)了容量,可實(shí)際可用還是不對(duì)强法,后面根據(jù)阿里云官方文檔操作才完成了万俗。
阿里云擴(kuò)容:https://help.aliyun.com/document_detail/111738.html
qp.xb數(shù)據(jù)解壓流程
安裝數(shù)據(jù)庫(kù)Mysql
(1) 執(zhí)行以下命令,下載并安裝MySQL饮怯。
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm &&
yum -y install mysql57-community-release-el7-10.noarch.rpm &&
yum -y install mysql-community-server
(2) 執(zhí)行以下命令闰歪,啟動(dòng)MySQL數(shù)據(jù)庫(kù)。
systemctl start mysqld.service
(3) 執(zhí)行以下命令蓖墅,查看MySQL初始密碼库倘。
grep "password" /var/log/mysqld.log
(4) 執(zhí)行以下命令,登錄數(shù)據(jù)庫(kù)论矾。
mysql -uroot -p
(5) 執(zhí)行以下命令教翩,修改MySQL默認(rèn)密碼。
set global validate_password_policy=0; #修改密碼安全策略為低(只校驗(yàn)密碼長(zhǎng)度贪壳,至少8位)饱亿。
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';
(6) 執(zhí)行以下命令,授予root用戶(hù)遠(yuǎn)程管理權(quán)限闰靴。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';
(7) 輸入exit退出數(shù)據(jù)庫(kù)彪笼。
systemctl命令管理mysql,簡(jiǎn)單貼一下吧蚂且。
啟動(dòng)mysql服務(wù)
systemctl start mysqld.service
停止mysql服務(wù)
systemctl stop mysqld.service
重啟mysql服務(wù)
systemctl restart mysqld.service
查看mysql服務(wù)當(dāng)前狀態(tài)
systemctl status mysqld.service
設(shè)置mysql服務(wù)開(kāi)機(jī)自啟動(dòng)
systemctl enable mysqld.service
停止mysql服務(wù)開(kāi)機(jī)自啟動(dòng)
systemctl disable mysqld.service
安裝解壓用到的qpress軟件
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"
tar xvf qpress-11-linux-x64.tar
chmod 775 qpress
cp qpress /usr/bin
安裝xtrabackup##
重點(diǎn):需要先查看自己MySQL版本配猫,根據(jù)對(duì)應(yīng)版本安裝對(duì)應(yīng)xtrabackup,否則會(huì)由于依賴(lài)庫(kù)的原因報(bào)錯(cuò)杏死。我之前按照如下版本執(zhí)行泵肄,發(fā)現(xiàn)后面版本不匹配而無(wú)法使用。(我的MySQL版本 5.7.41 對(duì)應(yīng)下載xtrabackup的2.4.14)
錯(cuò)誤版本流程:
先下載24-2.4.9-1版本
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
- 再安裝
yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
結(jié)果發(fā)現(xiàn)無(wú)法安裝淑翼,報(bào)
libgcrypt.so.11(GCRYPT_1.2)(64bit)
的錯(cuò)誤腐巢,后面根據(jù)如下文章重新安裝了一下。
參照文章:https://blog.csdn.net/qq_34779067/article/details/106193421
(1).先檢查本地是否有l(wèi)ibgcrypt183的安裝包
[root@localhost tools]# rpm -qa |grep libgcrypt
libgcrypt-1.8.3-4.el8.x86_64
(2). 如本地安裝了libgcrypt183窒舟,就下載下方的包
https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/tarball/percona-xtrabackup-2.4.14-Linux-x86_64.libgcrypt183.tar.gz
(3). 剛才下載的tar壓縮包系忙,我們需要解壓配置后再安裝使用
(1) tar xf percona-xtrabackup-2.4.14-Linux-x86_64.libgcrypt183.tar.gz
(2) mv percona-xtrabackup-2.4.14-Linux-x86_64 /usr/local/xtrabackup
(3) echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
(4) source /etc/profile
(4).檢測(cè)是否安裝成功
[root@iZbp125ohgv1547khtesvuZ ~]# xtrabackup --version
xtrabackup: recognized server arguments: --datadir=/var/lib/mysql
xtrabackup version 2.4.14 based on MySQL server 5.7.19 Linux (x86_64) (revision id: ef675d4)
至此所需要的全部軟件安裝完成
本地Mac數(shù)據(jù)上傳Linux服務(wù)器
此次我們使用的SFTP協(xié)議進(jìn)行數(shù)據(jù)傳輸诵盼,SFTP的好處是:對(duì)命令和數(shù)據(jù)進(jìn)行加密惠豺,防止密碼和敏感信息通過(guò)網(wǎng)絡(luò)公開(kāi)傳輸
使用SFTP的真正原因是银还,Mac自帶的terminal可以直接使用SFTP,避免再下FTP客戶(hù)端了洁墙。
首先使用SFTP登錄服務(wù)器
1) 打開(kāi)terminal
2)點(diǎn)擊上面shell蛹疯,選擇鏈接遠(yuǎn)程服務(wù)器
3)選擇安全文件傳輸sftp,點(diǎn)擊右邊服務(wù)器下的加號(hào)添加你要連接的遠(yuǎn)程服務(wù)器ip地址
4)輸入想要連接的ip地址或者服務(wù)器名稱(chēng)
5)選中服務(wù)器热监,輸入服務(wù)器對(duì)應(yīng)的用戶(hù)名捺弦,點(diǎn)擊連接。(注意:此處用戶(hù)名必須寫(xiě)root)
6)首次連接一個(gè)服務(wù)器會(huì)讓你確認(rèn)(Are you sure you want to continute connecting(yes/no)),你輸入yes然后回車(chē)就可以了
輸入密碼孝扛,連接成功
接下來(lái)就是進(jìn)行Mac本地和Linux數(shù)據(jù)傳輸流程
1) 先進(jìn)入到遠(yuǎn)程服務(wù)器目錄
2)再進(jìn)入本地要上傳的目錄
3)執(zhí)行put命令列吼,將本地文件上傳到遠(yuǎn)端
開(kāi)始恢復(fù)
_qp.xb 后綴文件執(zhí)行
cat <數(shù)據(jù)備份文件名> | xbstream -x -v -C /home/mysql/data
(說(shuō)個(gè)有趣的點(diǎn):原來(lái)可以邊解邊刪。由于云盤(pán)容量還是不夠苦始,只能解一部分就快速刪除一部分寞钥,留下自己需要的表即可)
這里的/home/mysql/data我們沒(méi)有這個(gè)文件夾,最好就直接先新建一下,這樣后面很多的命令就不用改很多代碼陌选,如果你實(shí)在受不了新建這樣一個(gè)文件夾理郑,你可以做完之后刪除掉就好了。
你可以cd到你的qp.xb文件的路徑下咨油,或者指定路徑執(zhí)行您炉,這樣執(zhí)行完就會(huì)在/home/mysql/data下面有解壓出的文件夾。然后再執(zhí)行解壓
## MySQL 5.6/5.7解壓
innobackupex --decompress --remove-original /home/mysql/data
這個(gè)解壓出來(lái)的文件還是不能用役电,后綴還不是frm
和ibd
,繼續(xù)解壓
## MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
問(wèn)題出現(xiàn):至此我們的數(shù)據(jù)已經(jīng)順利解析到 ibd frm 格式赚爵,按照下面流程走下去,給mysql設(shè)置讀取文件權(quán)限法瑟,指定數(shù)據(jù)庫(kù)文件就可以看到數(shù)據(jù)但是囱晴,我失敗了。具體原因還在排查瓢谢,先寫(xiě)完正常流程吧
這個(gè)執(zhí)行完成畸写,應(yīng)該就是你的數(shù)據(jù)庫(kù)真實(shí)的文件了,下面需要把用戶(hù)和權(quán)限組設(shè)置給mysql,這樣啟動(dòng)起來(lái)mysql才有讀寫(xiě)的權(quán)限氓扛。
chown -R mysql:mysql /home/mysql/data
mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
這句話(huà)理解起來(lái)其實(shí)很簡(jiǎn)單枯芬,就是指定配置的啟動(dòng)MySQL。指定了MySQL的數(shù)據(jù)庫(kù)文件存儲(chǔ)文件夾采郎,這樣就能讀取到你的備份文件了千所。
但是這里有幾個(gè)坑需要注意,?不要試圖把你的備份文件直接拷貝到mysql的本身的數(shù)據(jù)庫(kù)存儲(chǔ)文件夾/var/lib/mysql/
,直接替換是不行的蒜埋。
----------------------------華麗分割線(xiàn)-----------------書(shū)接上回 ----------------------------
上次說(shuō)到淫痰,我們給Linux安裝好解壓軟件,已經(jīng)成功吧qp.xb格式解壓成frm整份、ibd格式待错,但是我們給MySQL指定數(shù)據(jù)庫(kù)的時(shí)候無(wú)法識(shí)別籽孙,繼續(xù)研究解決吧。
- 首先我看了下mysql本身數(shù)據(jù)庫(kù)存儲(chǔ)文件夾
/var/lib/mysql
里的數(shù)據(jù)火俄,看到他們格式跟我解壓出來(lái)的一樣犯建,但是普遍都多出一個(gè)db.opt
文件,查了下這個(gè)只是存放默認(rèn)字符集,不影響數(shù)據(jù)庫(kù)運(yùn)行瓜客。
突然想到是不是需要重啟MySQL适瓦,學(xué)習(xí)了下systemctl控制MySQL,然后關(guān)閉重啟谱仪。發(fā)現(xiàn)報(bào)錯(cuò)如下:
[root@iZbp125ohgv1547khtesv ~]# systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.
可由于我的Linux版本是8版本玻熙,所以需要 nmcli 命令進(jìn)行管理網(wǎng)絡(luò)。
- 雖然服務(wù)器重啟問(wèn)題解決了疯攒,但是我還是無(wú)法查看我備份出的frm數(shù)據(jù)庫(kù)揭芍,我想到把這些數(shù)據(jù)copy到已有可讀的數(shù)據(jù)庫(kù)下面,然后添加了權(quán)限卸例,可是后面發(fā)現(xiàn)雖然數(shù)據(jù)庫(kù)可以讀称杨,但是里面表都無(wú)法讀取,不知道什么原因
----------------------------華麗分割線(xiàn)-----------------書(shū)接上回 ----------------------------
偶然間發(fā)現(xiàn)切換數(shù)據(jù)庫(kù)指向后重啟數(shù)據(jù)庫(kù)需要輸入密碼筷转,習(xí)慣輸了密碼后提示不對(duì)姑原,才突然意識(shí)到數(shù)據(jù)庫(kù)指向成功了。現(xiàn)在問(wèn)題就是找到原密碼呜舒,可是原密碼試了好幾個(gè)都不對(duì)锭汛,現(xiàn)在就是繞過(guò)這個(gè)原密碼看能不能解出數(shù)據(jù)。
更改了 /etc/my.cnf 路徑下的文件袭蝗,設(shè)置登錄服務(wù)器跳過(guò)密碼輸入唤殴,成功了。在圖書(shū)館喜極而泣到腥。朵逝。。乡范。配名。
參考文章:
https://www.cnblogs.com/shenjp/p/16579161.html
https://blog.csdn.net/qq_34779067/article/details/106193421
https://blog.csdn.net/weixin_41979605/article/details/118496138
https://zhuanlan.zhihu.com/p/559462499
可惜密碼一直不對(duì),干脆跳過(guò)密碼了
https://blog.csdn.net/beichengqing/article/details/127057564