记录Linux中Mysql恢复xxx_qp.xb格式数据

问题描述:

  • 需要将qp.xb文件内部分数据恢复到数据库,需要恢复到MySQL中可用,服务器知识趋向于0,摸索进行吧。

思考:

Q:这种qp.xb格式的数据是如何生成的?
A: qp.xb文件生成过程是,先经过 qpress 压缩,后经过 xbstream 打包。生成的,所以我们还原过程即 先解包再解压。

Q:既然qp.xb数据是先压缩再打包形成的,那是通过什么软件进行的压缩解压?
A:Xtrabackup 软件进行的压缩,此软件目前只支持Linux系统,所以我们只能在Linux系统云服务器进行此类操作了。

Q:解压这份数据,都需要哪些过程呢?
A:首先需要准备解压软件Xtrabackup,通过此软件解压成 frm 和 ibd格式的数据,其次将frm格式数据恢复为Mysql数据可读的格式即可。

Q:既然只能在Linux系统上面操作,那Linux是什么?我是小白兔,我只是一直听说服务器服务器,但是并不完全了解到底是什么。。。。
A:简单说,就是另一台不同于Win和Macos 系统的电脑。在这里都是通过抽象的命令行对Linux电脑进行操作。下面会介绍如何获取一台Linux服务器,如何通过Mac登录到Linux服务器进行简单的操作。创建文件夹、下载软件、安装软件等一些简单操作,来满足咱们数据恢复。

Linux知识杂学:

  1. 先购买一台服务器,我们用阿里云的服务器就好了。登录阿里云官网购买即可,购买后我们登录到控制条的云服务器ECS创建一个实例(ECS 即 Elastic Compute Service 可弹性伸缩的服务),创建实例后即代表我们拥有了一台属于我们自己的Linux服务器,后面我们的操作都在此实例进行,然后对实例进行密码重置。
  2. 如何操作Linux服务器:我在阿里云那边创建完成实例、密码重置后。我该如何在自己Mac电脑上操作这台Linux服务器呢?我们识别Linux服务器是通过公网IP来识别,就如没人身份证号一样,我们通过ssh登录此ip即可登录这个服务器。
    登录服务:ssh root@4.11.2x1.10
  3. 题外话:刚才好奇看了下ssh由来。简单来说,这些服务器需要通过shell来控制,shell里面封装了那些常用的命令,常用的bash、zsh、oh my zsh等,ssh就是可以远程控制shell进而来控制服务器。mac系统子代ssh的终端,win系统自带的cmd。

用到的命令:

//通过ssh登录远程服务器
ssh root@47.11.21x.16x

//启动mysql
systemctl start mysqld.service

// 查看mysql状态
systemctl status mysqld.service

// 登录数据库:
mysql -uroot -p

// 查看初始密码
grep "password" /var/log/mysqld.log

// 修改数据库密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'testTest11.....';

//创建数据库
create database prod_coin_db;


// 删除软件安装包缓存
yum clean packages


// 查看现有云盘容量
fdisk -l

// 查询所有磁盘
df -h

// 内存使用情况,通过m来显示
free -m

// 当前文件下按大小排序
ls -Shl

// 查看 文件夹下面大小
ls -lh

// 查看Linux下文件的权限
 ls -l


// 查看linux系统版本信息
lsb_release -a

// 删除某个空文件夹
rmdir  xxx

// 删除如果不是空文件夹,上面命令会报错
rm -rf xxxx

// 可以在单个命令中删除多个目录,如下面的命令所示。命令删除所有目录和它们的子目录,而不提示删除。
rm -rf dir1 dir2 dir3

// 可以使用下面的命令来移动目录内的文件
mv <filename> <path_of _destination_directory>

//复制某个文件到某个文件夹下面.如果文件存在会提示覆盖
cp address.frm /var/lib/mysql/wordpress/

//复制某个文件夹到某个文件夹下面
cp -r 文件夹A路径 文件夹B路径
  • 查看log日志的命令 less命令
// less 打开所需查看文件
less 文件名路径

//less 翻页
空格

//less 跳转到最后一行
shift + g

  • SFTP本地Mac和服务器传数据相关
// 查看服务器路径
pwd

//  查看本地电脑路径
lpwd

// 进入Linux文件方法
cd  xxx

// 进入本地服务文件路径的方法
lcd  xxx

//上传本地文件到服务器
put -r * 

get命令
get xxx //xxxxxxlinux 系统中想要下载下来的文件的路径
get -r xxx 与get xxx不同的是-r可以下载文件夹

途中发现Linux上面云盘容量不够,对云盘进行了一次扩容,可是购买扩了容量,可实际可用还是不对,后面根据阿里云官方文档操作才完成了。

阿里云扩容:https://help.aliyun.com/document_detail/111738.html

qp.xb数据解压流程

安装数据库Mysql

(1) 执行以下命令,下载并安装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) 执行以下命令,启动MySQL数据库。

systemctl start mysqld.service

(3) 执行以下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

(4) 执行以下命令,登录数据库。

mysql -uroot -p

(5) 执行以下命令,修改MySQL默认密码。

set global validate_password_policy=0;  #修改密码安全策略为低(只校验密码长度,至少8位)。
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

(6) 执行以下命令,授予root用户远程管理权限。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

(7) 输入exit退出数据库。

systemctl命令管理mysql,简单贴一下吧。

启动mysql服务

systemctl start mysqld.service

停止mysql服务

systemctl stop mysqld.service

重启mysql服务

systemctl restart mysqld.service

查看mysql服务当前状态

systemctl status mysqld.service

设置mysql服务开机自启动

systemctl enable mysqld.service

停止mysql服务开机自启动

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##

重点:需要先查看自己MySQL版本,根据对应版本安装对应xtrabackup,否则会由于依赖库的原因报错。我之前按照如下版本执行,发现后面版本不匹配而无法使用。(我的MySQL版本 5.7.41 对应下载xtrabackup的2.4.14)

错误版本流程:

先下载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

结果发现无法安装,报
libgcrypt.so.11(GCRYPT_1.2)(64bit)的错误,后面根据如下文章重新安装了一下。
参照文章:https://blog.csdn.net/qq_34779067/article/details/106193421

(1).先检查本地是否有libgcrypt183的安装包

[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).检测是否安装成功

[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数据上传Linux服务器

此次我们使用的SFTP协议进行数据传输,SFTP的好处是:对命令和数据进行加密,防止密码和敏感信息通过网络公开传输
使用SFTP的真正原因是,Mac自带的terminal可以直接使用SFTP,避免再下FTP客户端了。

首先使用SFTP登录服务器

1) 打开terminal
2)点击上面shell,选择链接远程服务器

截屏2023-03-08 下午4.55.48.png

3)选择安全文件传输sftp,点击右边服务器下的加号添加你要连接的远程服务器ip地址

截屏2023-03-08 下午4.56.47.png

4)输入想要连接的ip地址或者服务器名称


截屏2023-03-08 下午4.57.36.png

5)选中服务器,输入服务器对应的用户名,点击连接。(注意:此处用户名必须写root)

截屏2023-03-08 下午4.58.12.png

6)首次连接一个服务器会让你确认(Are you sure you want to continute connecting(yes/no)),你输入yes然后回车就可以了

输入密码,连接成功

截屏2023-03-08 下午4.59.43.png

接下来就是进行Mac本地和Linux数据传输流程

1) 先进入到远程服务器目录

截屏2023-03-08 下午5.01.38.png

2)再进入本地要上传的目录


截屏2023-03-08 下午5.02.30.png

3)执行put命令,将本地文件上传到远端


截屏2023-03-08 下午5.03.14.png

开始恢复

_qp.xb 后缀文件执行

cat <数据备份文件名> | xbstream -x -v -C /home/mysql/data

(说个有趣的点:原来可以边解边删。由于云盘容量还是不够,只能解一部分就快速删除一部分,留下自己需要的表即可)

这里的/home/mysql/data我们没有这个文件夹,最好就直接先新建一下,这样后面很多的命令就不用改很多代码,如果你实在受不了新建这样一个文件夹,你可以做完之后删除掉就好了。

你可以cd到你的qp.xb文件的路径下,或者指定路径执行,这样执行完就会在/home/mysql/data下面有解压出的文件夹。然后再执行解压

## MySQL 5.6/5.7解压
innobackupex --decompress --remove-original /home/mysql/data

这个解压出来的文件还是不能用,后缀还不是frmibd,继续解压

## MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data

问题出现:至此我们的数据已经顺利解析到 ibd frm 格式,按照下面流程走下去,给mysql设置读取文件权限,指定数据库文件就可以看到数据但是,我失败了。具体原因还在排查,先写完正常流程吧

这个执行完成,应该就是你的数据库真实的文件了,下面需要把用户和权限组设置给mysql,这样启动起来mysql才有读写的权限。

chown -R mysql:mysql /home/mysql/data
mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &

这句话理解起来其实很简单,就是指定配置的启动MySQL。指定了MySQL的数据库文件存储文件夹,这样就能读取到你的备份文件了。
但是这里有几个坑需要注意,❎不要试图把你的备份文件直接拷贝到mysql的本身的数据库存储文件夹/var/lib/mysql/,直接替换是不行的。

----------------------------华丽分割线-----------------书接上回 ----------------------------
上次说到,我们给Linux安装好解压软件,已经成功吧qp.xb格式解压成frm、ibd格式,但是我们给MySQL指定数据库的时候无法识别,继续研究解决吧。

  1. 首先我看了下mysql本身数据库存储文件夹/var/lib/mysql里的数据,看到他们格式跟我解压出来的一样,但是普遍都多出一个db.opt文件,查了下这个只是存放默认字符集,不影响数据库运行。

突然想到是不是需要重启MySQL,学习了下systemctl控制MySQL,然后关闭重启。发现报错如下:

[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 重启MySQL报错

可由于我的Linux版本是8版本,所以需要 nmcli 命令进行管理网络。

  1. 虽然服务器重启问题解决了,但是我还是无法查看我备份出的frm数据库,我想到把这些数据copy到已有可读的数据库下面,然后添加了权限,可是后面发现虽然数据库可以读,但是里面表都无法读取,不知道什么原因

----------------------------华丽分割线-----------------书接上回 ----------------------------

偶然间发现切换数据库指向后重启数据库需要输入密码,习惯输了密码后提示不对,才突然意识到数据库指向成功了。现在问题就是找到原密码,可是原密码试了好几个都不对,现在就是绕过这个原密码看能不能解出数据。
更改了 /etc/my.cnf 路径下的文件,设置登录服务器跳过密码输入,成功了。在图书馆喜极而泣。。。。。

参考文章:
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
可惜密码一直不对,干脆跳过密码了
https://blog.csdn.net/beichengqing/article/details/127057564

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容