这一次的数据库数据还原让我对一句话的认识更深:“不要拿你的爱好挑战别人的专业”。
笔者本职是客户端开发和前端开发,自己也独立开发过网站的后端系统、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-xxx
mkdir /home/app
cd /home/app
https://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.log
mysql -u root -p
重置密码
set password=password('123456');
查看版本
mysql -V
如果在安装过程中报libaio错误,那就先安装
yum install libaio #安装libaio
yum install deltarpm #安装deltarpm
yum 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.cnf
5. 最后确认是否删除干净
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方式不可用,官网下载之后传到服务器
上传文件:
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/data
scp ./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.xb
ll /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/data
ll /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 删除。