mysql生产数据库被误删

news2024/12/26 0:33:27

23年的头一天上班安装数据库,因为ssh工具来回切换失误,犯下不可饶恕的错误,居然将生产数据库全部删除,工作十几年头一次干这种蠢事,第一时间反应是一世英名毁于一旦,赶紧跑路。第二反应还是想办法看能否挽回,无非扣钱。。。
1 mysql数据库编译安装
为什么会出现这个问题,是因为我在一台高配置的机器上编译安装mysql
CentOS7.9-源码编译安装mysql5.7.33【详细步骤】
编译安装MySQL
Mysql 5.7 编译安装

# 安装依赖
yum -y install wget gcc gcc-c++ cmake openssl-devel ncurses-devel zlib-devel bzip2
mkdir -p /appdata/mysqldata
groupadd -r -g 27 mysql
useradd -s /sbin/nologin -r -u 27 -g 27 -d /appdata/mysqldata mysql
# 下载mysql和boost
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.38-el7-x86_64.tar.gz
tar -zxvf mysql-5.7.38-el7-x86_64.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-boost-5.7.38.tar.gz
tar -zxvf mysql-boost-5.7.38.tar.gz
# 将boost解压后的文件移动到下面的目录
mv  mysql-5.7.38 mysql-5.7.38-el7-x86_64/boost
# 
cd /appdata/download/mysql-5.7.38-el7-x86_64/boost
# 执行编译
cmake . \
    -DCMAKE_INSTALL_PREFIX=/appdata/mysql \
    -DWITH_BOOST=/appdata/download/mysql-5.7.38-el7-x86_64/boost/boost/boost_1_59_0 \
    -DMYSQL_UNIX_ADDR=/appdata/mysql/tmp/mysql.sock \
    -DMYSQL_DATADIR=/appdata/mysqldata \
    -DSYSCONFDIR=/etc \
    -DSYSTEMD_PID_DIR=/appdata/mysqldata \
    -DMYSQL_USER=mysql \
    -DMYSQL_TCP_PORT=3306 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
    -DWITH_XTRADB_STORAGE_ENGINE=1 \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_EXTRA_CHARSETS=1 \
    -DEXTRA_CHARSETS=all \
    -DWITH_BIG_TABLES=1 \
    -DWITH_DEBUG=0 \
    -DWITH_READLINE=1 \
    -DWITH_SSL=system \
    -DWITH_ZLIB=system \
    -DWITH_LIBWRAP=0 \
    -DENABLED_LOCAL_INFILE=1 \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci
# 根据系统核心数启动编译进程加快编译速度
make -j `lscpu | grep -i '^cpu(s)'| tr -s ' ' '%' | cut -d% -f2` && make install
# 配置my.cnf
mkdir -p /appdata/mysql/tmp
mkdir -p /appdata/mysql/logs
touch /appdata/mysql/logs/bs6.bsspirit.cn.err
touch /appdata/mysql/bs6.bsspirit.cn.pid
touch /appdata/mysql/logs/sql_query_slow.log
chown -R mysql.mysql /appdata/mysql
chown -R mysql.mysql /appdata/mysqldata
# 添加环境变量
echo "PATH=$PATH:/appdata/mysql/bin" >> /etc/profile #将mysql变量加入系统变量
source /etc/profile    #刷新环境变量文件
# 初始化数据库
cd /appdata/mysql/bin
./mysqld --initialize-insecure --user=mysql --basedir=/appdata/mysql --datadir=/appdata/mysqldata  
cp /appdata/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
# 第一次回车即可,设置root用户的密码
mysqladmin -u root -p password "xxxxxx"
# 开启3306端口
systemctl status firewalld
firewall-cmd --permanent --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports 

# 修改root用户的登录访问限制
[root@bs6 appdata]# netstat -antp |grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      49874/mysqld        
tcp        0      0 192.168.0.6:3306        10.101.2.100:61307      TIME_WAIT   -   

# 进入到mysql中执行
flush hosts; 
update user set host=@'%' where user='root' and host='localhost' limit 1;

2 还原数据库
mysqldata中的文件删掉,这个时候进程对应的句柄还在,此时千万不要重启mysql,否则这些数据都会丢失。
首先要做的是先将用户和订单等重要数据,通过程序的方式保存下载,因为如果连接还在,数据还可以获取到。
2
接着通过文件句柄恢复文件

cd /proc/进程id/fd
cp 199 /appdata/mysqldata/bsas/JSB_Info.ibd
# 接着一个个还原

执行ls -lR | grep "^-" | wc -l核对每个目录文件与句柄数量是否一致了,我以为可以重启mysql了,结果发现下面的异常:

2023-01-03T19:25:18.384724+08:00 0 [Warning] InnoDB: Unable to open "./ib_logfile0" to check native AIO read support.
2023-01-03T19:25:18.384735+08:00 0 [Warning] InnoDB: Linux Native AIO disabled.
2023-01-03T19:25:18.385738+08:00 0 [Note] InnoDB: Initializing buffer pool, total size = 25.875G, instances = 23, chunk size = 128M
2023-01-03T19:25:19.824702+08:00 0 [Note] InnoDB: Completed initialization of buffer pool
2023-01-03T19:25:19.966630+08:00 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2023-01-03T19:25:19.978422+08:00 0 [ERROR] InnoDB: Cannot create log files in read-only mode
2023-01-03T19:25:19.978471+08:00 0 [ERROR] InnoDB: Plugin initialization aborted with error Read only transaction

调整/etc/my.cnf的配置

#直接设置数据库的可读性
read_only=0
#在mysql中innodb_force_recovery参数是用来恢复数据库使用的 掉电恢复时会将innodb设为只读
innodb_force_recovery=0

再次重启,结果出现下面的异常,句柄中并没有sys_config这张表,很无奈,如此恢复失败了。

2023-01-03T19:26:52.554150+08:00 0 [ERROR] InnoDB: Cannot open datafile for read-only: './sys/sys_config.ibd' OS error: 71
2023-01-03T19:26:52.554157+08:00 0 [ERROR] InnoDB: Operating system error number 2 in a file operation.
2023-01-03T19:26:52.554162+08:00 0 [ERROR] InnoDB: The error means the system cannot find the path specified.
2023-01-03T19:26:52.554167+08:00 0 [ERROR] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them.
2023-01-03T19:26:52.554174+08:00 0 [ERROR] InnoDB: Could not find a valid tablespace file for `sys/sys_config`. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
2023-01-03T19:26:52.554182+08:00 0 [Warning] InnoDB: Ignoring tablespace `sys/sys_config` because it could not be opened.

接着想到另外一个办法,既然数据文件的ibd找到了,那么是否可以通过ibd文件来恢复数据了。
于是在另外一个机器上部署mysql,然后在这台机器上创建对应数据库和数据表
在目标mysql中执行

truncate JSB_Info;
truncate SMS_push_record;
truncate User_Info;
alter table JSB_Info discard tablespace;
alter table SMS_push_record discard tablespace;
alter table User_Info discard tablespace;

在问题mysql中执行,将文件传到目标机器上

scp JSB_Info.ibd SMS_push_record.ibd User_Info.ibd root@192.168.0.6:/appdata/mysqldata/bsas

再回到目标mysql中

cd /appdata/mysqldata/bsas
chown mysql:mysql *
alter table JSB_Info import tablespace;
alter table SMS_push_record import tablespace;
alter table User_Info import tablespace;

这样mysql的数据在目标机器上就还原了。当然还有缺陷,因为当问题mysql没有启动的时候,数据还是会在写入,这部分数据怎么办?
另外一个问题是 lower_case_table_names=0,因为C++的程序大小写敏感,所以不要将数据表更名字。

lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的

出现下面的问题,应该是你删除了数据库的ibd文件,与缓存中不匹配,重启mysql即可

2023-01-03T21:10:45.092130+08:00 15 [Warning] InnoDB: Tablespace 'bskj/trial_info_bsjl' exists in the cache with id 229 != 305
2023-01-03T21:10:45.099017+08:00 15 [Warning] InnoDB: Tablespace 'bskj/user_info' exists in the cache with id 230 != 306
2023-01-03T21:11:10.520171+08:00 15 [Warning] InnoDB: Tablespace 'bskj/user_login' exists in the cache with id 231 != 308
2023-01-03T21:11:28.121068+08:00 15 [Note] Aborted connection 15 to db: 'bskj' user: 'root' host: 'localhost' (Query execution was interrupted)
2023-01-03T21:19:33.085640+08:00 65 [Warning] InnoDB: Tablespace 'bskj/czy_setmeal' exists in the cache with id 172 != 386

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aws eks 使用 cloudformation 创建并更新自管节点组

参考资料 更新现有自行管理的节点组 使用eks自管节点组能够最大程度控制节点的各项配置和参数,包括并不限于ami,节点类型等 但是使用自管节点也给用户带来了较大的维护和更新成本。对于节点组的更新操作,我们可以使用cloudformation的方式…

速览Visual Studio 2022 中的新增功能

目录 性能改进 Visual Studio 2022 为 64 位 在文件中更快地查找 Git 工具速度更快 生成新式应用 适用于 C、.NET 和热重载的更佳开发工具 Blazor & 的汇报ASP.NET 的 Razor 编辑器 热重载 创新触手可及 Git 多存储库支持和行暂存支持 IntelliCode 改进 为每个…

魔方(15)二、三、四、五阶棋盘魔方

棋盘魔方 这价格实在可恶,于是我拿现成的魔方自己贴贴纸。 二阶棋盘魔方A 有4个角块是3面黑,4个角块是3面白,而6个面都是棋盘色。 只需要2步就可以转化成: 所以任意状态只要转化成这个状态再加2步就能复原了。 二阶棋盘魔方B&a…

【C++函数对象】STL基础语法学习 | 仿函数谓词内建仿函数

目录 ●仿函数 1.概念 2.使用 ●谓词 1.一元谓词 2.二元谓词 ●内建仿函数 1.算数仿函数 2.关系仿函数 3.逻辑仿函数 ●仿函数 1.概念 重载函数调用操作符的类,其对象常称为函数对象。函数对象使用重载的()时,行为类似函数的调用,所…

技术更高,设计更远:华为全屋智能设计大赛的审美之跃

“人生到处知何以?应似飞鸿踏雪泥。泥上偶然留指爪,鸿飞那复计东西。”很多设计师朋友跟我说,苏轼这首《和子由渑池怀旧》是对设计与审美的最高理解。好的设计,应该仅仅留下一点点痕迹,同时在简约的表象下隐含大量的审…

高通平台开发系列讲解(USB篇)USB调试手段汇总说明 - 视频课

文章目录 一、USB AT数据流说明二、BUS Hound 工具说明三、sysfs相关USB调试节点四、USB usbmon工具使用五、USB usbmon日志解析六、UsbTreeView软件的使用七、视频讲解分享沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 碰见USB AT不通怎么办?所以本篇章汇总了高通…

Vue与React中父子组件生命周期的执行顺序?【生命周期详细知识讲解!!!】

文章目录一、 Vue中父子组件生命周期1-1 加载渲染过程1-2 销毁过程1-3 展示案例二、 React中父子组件生命周期2-1 关于React新旧版生命周期介绍2-2 父子组件生命周期2-2-1 父子组件初始化2-2-2 子组件修改自身state2-2-3 父组件修改props2-2-4 卸载子组件一、 Vue中父子组件生命…

卷绕剩余长度计算FC(收放卷应用)

卷径实时计算方法详细内容请参看下面的文章链接: 卷径计算详解(通过卷绕的膜长和膜厚进行计算)_RXXW_Dor的博客-CSDN博客有关卷绕+张力控制可以参看专栏的系列文章,文章链接如下:变频器简单张力控制(线缆收放卷应用)_RXXW_Dor的博客-CSDN博客_收放卷应用张力控制的开闭环…

【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + LingAo IMU 测试及RVIZ展示

简介:介绍LingAo 的6自由度IMU模块 在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看IMU数据,本文的前提条件是你的TX1里已经安装了ROS版本:Melodic。 关…

Spring Boot+Mybatis+layui框架实现的前后端分离的医院药品管理系统源码+数据库

springboot layui药品管理系统 介绍 前后端分离的药品管理系统。 完整代码下载地址:Spring BootMybatislayui框架实现的前后端分离的医院药品管理系统源码数据库 软件架构 前端:layui框架 后端:Spring BootMybatis 数据库:…

静态库和动态库

(1)什么是库 (2)静态库的制作 汇编 生成对应的.o文件(命令:gcc -c add.c div.c mult.c sub.c)创建静态库(命令:ar rcs libcalc.a add.o div.o mult.o sub.o)…

数据结构-栈和队列

目录🤡前言👍栈😠栈的概念及结构😠栈的实现👍队列😠队列的概念及结构😠队列的实现💡总结🤡前言 本篇博客主要记录的是栈和队列的学习和总结。 👍栈 &#…

虹科分享 | 如何解决CAN与以太网之间的信息有效传递与智能变送难题?

背景 在工业中,一般把现场总线应用于车间、生产现场等生产第一线,作为控制网络,而以太网主要应用于企业管理层和生产监控层。由于不同现场总线之间没有统一标准、难以接入因特网等缺点,使得目前大部分企业控制网络与信息网络相互…

猎聘和BOSS直聘谁会成为在线招聘的最后赢家?

文|螳螂观察 作者|易不二 在线招聘行业正在焕发新的巨大活力。 12月22日,BOSS直聘正式在港交所主板完成双重主要上市。BOSS直聘创始人赵鹏扬言,公司未来三年内有一个获取一亿用户的“小目标”,纯蓝领市场是公司完成这一目标的重要增长动力…

移位操作符和位操作符(从概念到相关算法题详解)

目录 概念 基础知识 左移操作符(<<) 右移操作符(>>) 按位与(&) 按位或(|) 异或(^) 相关算法题 1.不能创建临时变量(第三个变量),实现俩个数的交换 方法1: 方法2: 写一个方法,返回参数中二进制中1的个数 方法1: 方法2: 方法3: 俩个int(32位)整…

2019年数维杯国际大学生数学建模C题猪肉价格波动分析求解全过程文档及程序

2019年数维杯国际大学生数学建模 C题 猪肉价格波动分析 问题重述&#xff1a; 中国是一个育种大国。猪肉产业在畜牧业中起着主导作用。同时&#xff0c;猪肉已成为人们餐桌上的主要肉类来源之一。随着人口的增加&#xff0c;消费和生活也得到了改善。 2018年8月3日&#xff0…

Android Studio中设置Compose 代码模版

File Templates 有两种方式能找到编辑File Templates的入口 在 File -> New -> Edit File Templates 或者 在项目结构目录中点击右键菜单 New -> Edit File Templates 在设置界面中的 Editor -> File and Code Templates #if (${PACKAGE_NAME} && ${…

dwg怎么转成dxf格式?手机也能轻松操作

dwg怎么转成dxf格式呢&#xff1f;相信很多小伙伴应该知道这两种格式都是CAD图纸中的一种&#xff0c;那么它们有什么区别呢&#xff1f;第一&#xff0c;性质不同dwg图形文件是计算机辅助设计软件AutoCAD用来保存设计数据的专有文件格式。dxf图形文件是DWG格式的ASCII格式变体…

Codeforces Global Round 14 E Phoenix and Computers

大意&#xff1a; 一排电脑&#xff0c;每次可以选择打开一台电脑&#xff0c;如果某一台电脑相邻的左边和右边都被打开了&#xff0c;它会自动打开。问打开n台电脑的方案数 思路&#xff1a; O(n^3)做法 不难发现&#xff0c;在操作过程中&#xff0c;一台台电脑其实就是被…

电磁明渠流量计怎么安装?

1、设备介绍 电磁明渠流量计是由流量显示仪、流速计、液位计组成的流速面积法测流量的明渠测量流量系统。 工作原理&#xff1a;基于法拉第电磁感应定律&#xff0c;当导电流体流过电磁式流速仪的磁场时&#xff0c;在与流速和磁场两者相垂直的方向就会产生与平均流速成正比的…