首页 » PHP教程 » phpwithoutmysql技巧_操作系统宕机MySQL数据找回记录

phpwithoutmysql技巧_操作系统宕机MySQL数据找回记录

访客 2024-11-06 0

扫一扫用手机浏览

文章目录 [+]

IP 192.168.56.81 该虚拟机上面运行了MySQL,后面仿照这个机器崩溃,然后将MySQL数据抢救回来。

“81”上的文件:

phpwithoutmysql技巧_操作系统宕机MySQL数据找回记录

“81”上的MySQL数据库:

phpwithoutmysql技巧_操作系统宕机MySQL数据找回记录
(图片来自网络侵删)

IP 192.168.56.71 该虚拟机为新机器,后面须要将“81”上的数据库迁移到“71”这台机器上。

三、开始实验

删除“81”机器上的/boot目录文件,然后逼迫重启。

这时候系统启动失落败,报error: file ‘/grup2/i386-pc/normal.mod’ not found.

关闭故障虚拟机“81”,选择逼迫退出。

将故障虚拟机“81”的硬盘挂载到新的虚拟机“71”上,启动新的虚拟机“71”。

通过lsblk能看到sdb便是新挂载的磁盘。

建立挂载点,挂载新的磁盘,提示mount: unknown filesystem type ‘LVM2_member’

[root@oracletest ~]# mkdir /newmnt[root@oracletest ~]# mount /dev/sdb2 /newmntmount: unknown filesystem type 'LVM2_member'

这是由于/dev/sdb2是一个物理卷,不能直接挂载,须要挂载该物理卷对应的逻辑卷。

查看逻辑卷(这个可能须要等一会才查看得到),可以看到LV Status为NOT available。

利用vgchange -ay /dev/vg激活逻辑卷组(vg是逻辑卷组名字),可以看到LV Status为available。

挂载逻辑卷,可以看到文件已经找回来了。

[root@oracletest ~]# mount /dev/vg/lvroot /newmnt[root@oracletest ~]# cd /newmnt[root@oracletest newmnt]# lsbin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@oracletest newmnt]# cd /newmnt/root[root@oracletest root]# lsimportant.txt install.sh mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz[root@oracletest root]# cat important.txt this is important text!

接下来是规复MySQL数据库。
事理很大略,跟迁移MySQL没差异,便是将原MySQL文件迁移到新的目录,然后起库。

首先在新的虚拟机“71”上面安装跟故障虚拟机中相同版本的MySQL(安装过程略……)。

查看原MySQL的参数文件,确定MySQL日志文件和数据文件的目录。

[root@oracletest root]# cat /newmnt/etc/my.cnf[mysqld]# basic settings #...basedir = /usr/local/mysqldatadir = /opt/mydata/datatmpdir = /opt/mydata/tmplog_bin = /opt/mydata/log/binlog/binlog...

查看原MySQL的数据文件。

[root@oracletest root]# cd /newmnt/opt/mydata/[root@oracletest mydata]# lltotal 12drwxr-xr-x 6 995 1000 4096 Feb 11 14:03 datadrwxr-xr-x 4 995 1000 4096 Feb 11 14:03 logdrwxr-xr-x 2 995 1000 4096 Feb 11 14:03 tmp

创建干系目录。

mkdir -p /opt/mydata/datamkdir -p /opt/mydata/tmpmkdir -p /opt/mydata/log/binlogchown -R mysql:mysql /opt/mydata

拷贝MySQL文件到对应的目录。

cp -r /newmnt/etc/my.cnf /etccp -r /newmnt/opt/mydata/data /opt/mydata/cp -r /newmnt/opt/mydata/log/binlog /opt/mydata/log/chown -R mysql:mysql /opt/mydata # 这一步的目的是由于原始文件在挂到新的机器上时所属用户和所属组会丢失,须要重新变动成mysql组

启动MySQL。

[root@oracletest ~]# service mysql startStarting MySQL.2021-04-08T11:39:26.437943Z mysqld_safe error: log-error set to '/opt/mydata/log/error.log', however file don't exists. Create writable for user 'mysql'.The server quit without updating PID file (/opt/mydata/data[FAILED]est.pid).

报错,提示没有error.log,那就创建一个,再启动MySQL。

[root@oracletest ~]# touch /opt/mydata/log/error.log[root@oracletest ~]# chown -R mysql:mysql /opt/mydata/log/error.log[root@oracletest ~]# service mysql startStarting MySQL.. [ OK ]

可以看到数据库的表也找回来了!

四、总结只要没有删除数据库的数据文件,纵然系统起不来了,我们仍旧可以将系统的盘拆下来挂到新的机器上,将数据拷贝出来。
养成备份的习气,正式、仿真、开拓、测试环境都须要。

关于作者

杨豹,国泰君安专职DBA,热爱Oracle、MySQL数据库技能,熟习shell,python编程,熟习zabbix监控。

墨天轮原文链接:https://www.modb.pro/db/49742

相关文章

phpfloat有误差技巧_PHP代码安然杂谈

一、精度绕过毛病理论在用PHP进行浮点数的运算中,常常会涌现一些和预期结果不一样的值,这是由于浮点数的精度有限。只管取决于系统,P...

PHP教程 2024-12-10 阅读0 评论0