前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次xb数据还原

记一次xb数据还原

原创
作者头像
无忧366
修改2021-09-16 11:28:15
3K0
修改2021-09-16 11:28:15
举报
文章被收录于专栏:Hello worldHello world

这一次的数据库数据还原让我对一句话的认识更深:“不要拿你的爱好挑战别人的专业”。

介绍

笔者本职是客户端开发和前端开发,自己也独立开发过网站的后端系统、App的后端系统,目前也在对外正式运行着。

之前以为自己可以干后端的活了,哪怕领导给后端任务也可以完成,直到遇到这次的事...

背景是需要将半年前的数据库数据迁移并重新运行项目:小程序+后端

小程序很轻松,自己独立开发过,也和人合作开发过,已经上线了几款。

后端一直都是自己开发自己的,自己的东西瞎搞也没事,第一次去上线别人的代码。

数据库来源:

  • 1. 腾讯云数据库,已经停了半年
  • 2.数据库实例停止前下载了物理冷备文件->.xb文件。

当时从别人那拿到文件时,开开心心的觉得可以像.sql文件一样,直接导入就好了,可惜完全不是这么回事,xb文件是被压缩过得,需要解压缩。

我们先来看下腾讯云数据库里从哪下载xb文件

这是腾讯云官方给的文档,你可以按照这个来,也可以按照我之后说的步骤来,都一样,我也是按照这个来的。

https://cloud.tencent.com/document/product/236/33363

迁移前一定要知道的东西

  • xb文件导出时的数据库版本,是5.6、5.7、还是8.0;

这个非常重要,你的数据库是5.7的话一般可以还原从5.6导出的数据,但是5.7导出的数据大概率不能被5.6数据库还原。也就是说高版本可以还原低版本,但是8.0是个例外。(这是腾讯云数据库迁移技术人员说的,感谢技术人员)

  • 版本怎么查看

这个版本可以从数据库实例里看到,哪怕是已经被停了的实例。

  • 没有版本怎么办

当然你也可以挨个版本的数据库去试。

我的安装路程

  1. 我就是先挨个版本试的,我大体上知道我拿到的来源库是5.6或者5.7。所以我先从5.7的安装,这是我离成功最近的一次,但是完美错过。这就是不确定版本的坏处,出了一个解决不了的问题,你就会觉得是版本不对,就放弃换新版本。最后才获得到版本。
  2. 之后5.6版本的卸载、重装了几个版本,刚开始都是从网上找的教程,来源也是第三方的(按教程来方便)。
  3. 后来才用官网下载的,一定要用官网下载的(这也是腾讯云数据库迁移技术人员说的,再次感谢技术人员)。
  4. 用了几个版本之后也还是不行,按照教程从头到尾跑了无数遍,每一遍都遇到各种奇葩问题,解决了之后都卡在教程中的最后一步,也就是mysql_safe这步。当时怀疑拿到的数据备份有问题,瞬间绝望,这种老数据如果有问题,那就没救了,一整周只要有时间都是mysql装了卸、卸了装。

最后实在没办法只能再次厚着脸皮去找腾讯云的技术人员求助。

再再次感谢耐心的技术人员,让我按照教程从头到尾执行,每执行一步,发过去截图,他确认了没问题继续进行下一步。

最后执行到一直报错那一步,技术人员也没招了,将我的数据要了过去,在他那是可以还原的。给我的建议是用一个干净的系统,数据库也用他的数据库版本。

感谢他给我了信息,让我确定这个数据是没问题的,那只要努力了就能成功。

只截取了一部分,用来显示下技术人员的专业和耐心,特别感谢。

之前登录腾讯云的界面都用的是腾讯云的网页,这次整的我看着就烦,所以使用了ssh在终端使用,如何在mac终端直接操作服务器,请看这篇文章。

https://cloud.tencent.com/document/product/213/35700

好了,没用的先说到这,开始过程吧。

一个干净的centos系统,我把centos重装了,这样什么都没有了。

一. 卸载Centos自带的Mariadb

查看被安装的

代码语言:javascript
复制
rpm -qa | grep mariadb

卸载

代码语言:javascript
复制
rpm -e mariadb-libs-xxxx

报错的话,强制卸载

代码语言:javascript
复制
rpm -e --nodepsmariadb-libs-xxx

二. 安装mysql

1. 新建目录用于存放下载软件

代码语言:javascript
复制
mkdir /home/app
代码语言:javascript
复制
cd /home/app

2. 下载mysql,官网地址:

https://dev.mysql.com/downloads/mysql/

选择rpm安装,下载第一个RPM Bundle就行。

下载下来的文件是:

mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

3. 下载到本地后,将本地文件推送到服务器的安装目录下(/home/app),通过scp方式上传。

scp方式链接

https://cloud.tencent.com/document/product/213/2133

终端另外开一个窗口(不是登录服务器的窗口,是操作电脑的窗口)

代码语言:javascript
复制
scp ./mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar root@58.58.58.58:/home/app/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar 

传完之后继续切回服务器操作窗口

看到/home/app文件夹下已经有了文件。

4. 解压

代码语言:javascript
复制
tar xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

之后文件夹下出现这些文件

5.开始安装:

代码语言:javascript
复制
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm

顺序是common->libs->client->server

代码语言:javascript
复制
mysqld --initialize

这个5.6会报错

代码语言:javascript
复制
mysqld: unknown option '--initialize'

原因是5.6根本没有这个命令

代码语言:javascript
复制
chown mysql:mysql /var/lib/mysql -R

6. 测试数据库

记住下面这一步,但凡你安装了,你是不是想开启下试试是不是成功了?就是一步让我白白浪费了无数时间。等到开始还原数据库时记得关上!关上!关上!

代码语言:javascript
复制
service mysqld start

可以登录查看mysql是否已经安装成功了

查看初始密码

代码语言:javascript
复制
grep 'temporary password' /var/log/mysqld.log
代码语言:javascript
复制
mysql -u root -p

重置密码

代码语言:javascript
复制
set password=password('123456');

查看版本

代码语言:javascript
复制
mysql -V

如果在安装过程中报libaio错误,那就先安装

代码语言:javascript
复制
yum install libaio #安装libaio
代码语言:javascript
复制
yum install deltarpm #安装deltarpm
代码语言:javascript
复制
yum install perl-Data-Dumper.x86_64 #安装Perl模块

如果报这个MYSQL5.7离线安装报libnuma.so.1()(64bit) is needed by mysql-community-server-xxxx

代码语言:javascript
复制
yum -y install numactl

如果你和我一样需要经历卸载重装,请看下边这个卸载数据库的方法,如果不需要卸载重装可以跳过

代码语言:javascript
复制
1. yum remove  mysql mysql-server mysql-libs mysql-server;
代码语言:javascript
复制
2. find / -name mysql

把搜索出来的都删掉

代码语言:javascript
复制
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
...
代码语言:javascript
复制
3. rpm -qa|grep mysql
代码语言:javascript
复制
yum remove mysql-community-server-5.7.20-1.el7.x86_64
yum remove mysql-community-client-5.7.20-1.el7.x86_64
...
代码语言:javascript
复制
4. rm /etc/my.cnf

5. 最后确认是否删除干净

代码语言:javascript
复制
rpm -qa|grep mysql

三. 开始恢复备份

需要用到的软件:XtraBackup,Prepare

安装XtraBackup

代码语言:javascript
复制
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum list | grep percona
yum install percona-xtrabackup-24

查看是否安装成功

代码语言:javascript
复制
xtrabackup -v

下载qpress

文档给的wget方式不可用,官网下载之后传到服务器

http://www.quicklz.com

直接点图标下的文件名
直接点图标下的文件名

上传文件:

代码语言:javascript
复制
scp ./qpress-11-linux-x64.tar root@58.58.58.58:/home/app/qpress-11-linux-x64.tar

安装:

代码语言:javascript
复制
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile

上传要解压的文件

代码语言:javascript
复制
mkdir /home/data
代码语言:javascript
复制
scp ./new.xb root@58.58.58.58:/home/data/new.xb

记住这个:/home/data

软件都安装完了,开始恢复,由于自己恢复的文件涉及自己的业务,这里就直接用文档给的图,如果使用上有问题,请联系我删除,文档在文章开头和末位都有。

2.1 解包备份文件
代码语言:javascript
复制
xbstream -x --parallel=2  -C /home/data < ./new.xb

如果报parallel错误可以直接删掉,只是并行参数

代码语言:javascript
复制
xbstream -x -C /home/data < ./new.xb

ll /home/data

cd /home/data/mysql

可以看到这种数据
可以看到这种数据
解压备份文件

代码语言:javascript
复制
xtrabackup --decompress --target-dir=/home/data

decompress.png
decompress.png
2.3 Prepare 备份文件

apply log 操作

代码语言:javascript
复制
xtrabackup --prepare  --target-dir=/home/data

执行后若结果中包含如下输出,则表示 prepare 成功。

prepare.png
prepare.png
2.4 修改配置文件

执行如下命令打开backup-my.cnf文件。

代码语言:javascript
复制
vi /home/data/backup-my.cnf

在下面参数前加#

  • innodb_checksum_algorithm
  • innodb_log_checksum_algorithm
  • innodb_fast_checksum
  • innodb_page_size
  • innodb_log_block_size
  • redo_log_version
2.5 修改文件属性
代码语言:javascript
复制
chown -R mysql:mysql /home/data

ll /home/data

步骤3:启动 mysqld 进程并登录验证

mysqld_safe --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data &

重点来了,所有的操作都卡在这一步上,出现了各种问题,看下我遇到的各种问题。

1. 这个是在5.6上报的问题,各种版本的5.6最后都报这个mysql.plugin table

代码语言:javascript
复制
[Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Unknown storage engine 'InnoDB' 2021-09-09 13:41:58 4410
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 2021-09-09 13:41:58 4410

这个问题我自己解决是找了网上的各种解决办法都不行,试了得有十多种,这里就不说了,我也忘了...

这个联系腾讯云技术人员后,刚开始技术人员怀疑FEDERATED这个引擎腾讯云不支持,怀疑不是从腾讯云到处去的数据。

后来进入到mysql文件,发现这个是有的,当时也不知道是什么问题了,就让我把文件发了过去,他那边是可以解析出来的。

解决方法:

重装系统,重装一个mysql5.7

2. 3306端口占用

代码语言:javascript
复制
120730 18:31:07 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
120730 18:31:07 [ERROR] Do you already have another mysqld server running on port: 3306 ?
120730 18:31:07 [ERROR] Aborting

这个我先是

代码语言:javascript
复制
netstat -apn | grep 3306  
代码语言:javascript
复制
kill -9 pid

但是这个端口总是被占用,删了还重启,后来的方法是启用新端口,其实这块解决方法和下一个一样,只要停了mysql就行

代码语言:javascript
复制
mysqld_safe --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data --port=3307 &

3. Another process whith pid xxxx is using unix socket file.

解决方法:

代码语言:javascript
复制
service mysqld stop

这只是碰到的几个问题,有大量的mysql问题出现,每次重装mysql都会遇到问题,还是对这个不熟悉,业余的还行不行啊。

参考文档:

卸载mariadb: https://blog.csdn.net/Hiqingtian/article/details/79022586

卸载数据库:https://www.cnblogs.com/cyl048/p/6879085.html

使用物理备份恢复数据库:https://cloud.tencent.com/document/product/213/2133

SCP 上传文件:https://cloud.tencent.com/document/product/213/2133

XtraBackup 安装:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 数据库来源:
      • 迁移前一定要知道的东西
        • 我的安装路程
        • 一. 卸载Centos自带的Mariadb
        • 二. 安装mysql
          • 1. 新建目录用于存放下载软件
            • 2. 下载mysql,官网地址:
              • 3. 下载到本地后,将本地文件推送到服务器的安装目录下(/home/app),通过scp方式上传。
                • 4. 解压
                  • 5.开始安装:
                    • 6. 测试数据库
                      • 安装XtraBackup
                      • 下载qpress
                      • 步骤3:启动 mysqld 进程并登录验证
                      • mysqld_safe --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data &
                      • 参考文档:
                  • 如果报这个MYSQL5.7离线安装报libnuma.so.1()(64bit) is needed by mysql-community-server-xxxx
                  • 三. 开始恢复备份
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档