这一次的数据库数据还原让我对一句话的认识更深:“不要拿你的爱好挑战别人的专业”。
笔者本职是客户端开发和前端开发,自己也独立开发过网站的后端系统、App的后端系统,目前也在对外正式运行着。
之前以为自己可以干后端的活了,哪怕领导给后端任务也可以完成,直到遇到这次的事...
背景是需要将半年前的数据库数据迁移并重新运行项目:小程序+后端
小程序很轻松,自己独立开发过,也和人合作开发过,已经上线了几款。
后端一直都是自己开发自己的,自己的东西瞎搞也没事,第一次去上线别人的代码。
当时从别人那拿到文件时,开开心心的觉得可以像.sql文件一样,直接导入就好了,可惜完全不是这么回事,xb文件是被压缩过得,需要解压缩。
我们先来看下腾讯云数据库里从哪下载xb文件

这是腾讯云官方给的文档,你可以按照这个来,也可以按照我之后说的步骤来,都一样,我也是按照这个来的。
https://cloud.tencent.com/document/product/236/33363
这个非常重要,你的数据库是5.7的话一般可以还原从5.6导出的数据,但是5.7导出的数据大概率不能被5.6数据库还原。也就是说高版本可以还原低版本,但是8.0是个例外。(这是腾讯云数据库迁移技术人员说的,感谢技术人员)
这个版本可以从数据库实例里看到,哪怕是已经被停了的实例。
当然你也可以挨个版本的数据库去试。
最后实在没办法只能再次厚着脸皮去找腾讯云的技术人员求助。
再再次感谢耐心的技术人员,让我按照教程从头到尾执行,每执行一步,发过去截图,他确认了没问题继续进行下一步。
最后执行到一直报错那一步,技术人员也没招了,将我的数据要了过去,在他那是可以还原的。给我的建议是用一个干净的系统,数据库也用他的数据库版本。
感谢他给我了信息,让我确定这个数据是没问题的,那只要努力了就能成功。
只截取了一部分,用来显示下技术人员的专业和耐心,特别感谢。



之前登录腾讯云的界面都用的是腾讯云的网页,这次整的我看着就烦,所以使用了ssh在终端使用,如何在mac终端直接操作服务器,请看这篇文章。
https://cloud.tencent.com/document/product/213/35700
好了,没用的先说到这,开始过程吧。
一个干净的centos系统,我把centos重装了,这样什么都没有了。
查看被安装的
rpm -qa | grep mariadb卸载
rpm -e mariadb-libs-xxxx报错的话,强制卸载
rpm -e --nodepsmariadb-libs-xxxmkdir /home/appcd /home/apphttps://dev.mysql.com/downloads/mysql/


选择rpm安装,下载第一个RPM Bundle就行。
下载下来的文件是:
mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
scp方式链接
https://cloud.tencent.com/document/product/213/2133
终端另外开一个窗口(不是登录服务器的窗口,是操作电脑的窗口)
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文件夹下已经有了文件。
tar xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar之后文件夹下出现这些文件

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
mysqld --initialize这个5.6会报错
mysqld: unknown option '--initialize'原因是5.6根本没有这个命令
chown mysql:mysql /var/lib/mysql -R记住下面这一步,但凡你安装了,你是不是想开启下试试是不是成功了?就是一步让我白白浪费了无数时间。等到开始还原数据库时记得关上!关上!关上!
service mysqld start可以登录查看mysql是否已经安装成功了
查看初始密码
grep 'temporary password' /var/log/mysqld.logmysql -u root -p重置密码
set password=password('123456');查看版本
mysql -V
如果在安装过程中报libaio错误,那就先安装
yum install libaio #安装libaioyum install deltarpm #安装deltarpmyum install perl-Data-Dumper.x86_64 #安装Perl模块yum -y install numactl如果你和我一样需要经历卸载重装,请看下边这个卸载数据库的方法,如果不需要卸载重装可以跳过
1. yum remove mysql mysql-server mysql-libs mysql-server;2. find / -name mysql
把搜索出来的都删掉
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
...3. rpm -qa|grep mysql
yum remove mysql-community-server-5.7.20-1.el7.x86_64
yum remove mysql-community-client-5.7.20-1.el7.x86_64
...4. rm /etc/my.cnf5. 最后确认是否删除干净
rpm -qa|grep mysql需要用到的软件:XtraBackup,Prepare
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum list | grep percona
yum install percona-xtrabackup-24查看是否安装成功
xtrabackup -v
文档给的wget方式不可用,官网下载之后传到服务器
http://www.quicklz.com

上传文件:
scp ./qpress-11-linux-x64.tar root@58.58.58.58:/home/app/qpress-11-linux-x64.tar安装:
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile上传要解压的文件
mkdir /home/datascp ./new.xb root@58.58.58.58:/home/data/new.xb记住这个:/home/data
软件都安装完了,开始恢复,由于自己恢复的文件涉及自己的业务,这里就直接用文档给的图,如果使用上有问题,请联系我删除,文档在文章开头和末位都有。
xbstream -x --parallel=2 -C /home/data < ./new.xb如果报parallel错误可以直接删掉,只是并行参数
xbstream -x -C /home/data < ./new.xbll /home/data

cd /home/data/mysql

xtrabackup --decompress --target-dir=/home/data
apply log 操作
xtrabackup --prepare --target-dir=/home/data执行后若结果中包含如下输出,则表示 prepare 成功。

执行如下命令打开backup-my.cnf文件。
vi /home/data/backup-my.cnf在下面参数前加#

chown -R mysql:mysql /home/datall /home/data

重点来了,所有的操作都卡在这一步上,出现了各种问题,看下我遇到的各种问题。
1. 这个是在5.6上报的问题,各种版本的5.6最后都报这个mysql.plugin table
[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端口占用
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这个我先是
netstat -apn | grep 3306 kill -9 pid但是这个端口总是被占用,删了还重启,后来的方法是启用新端口,其实这块解决方法和下一个一样,只要停了mysql就行
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.
解决方法:
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 删除。