如何使用Linux恢复MySQL表中的数据 (linux mysql表内容恢复数据)

MySQL是一种开源的关系型数据库管理系统,广泛应用于企业级应用中。然而,由于各种原因,MySQL表中的数据有时会被误删除或损坏。在这种情况下,恢复数据是至关重要的。

本文将介绍如何使用Linux系统来恢复MySQL表中的数据。以下是具体步骤:

步骤一:查看MySQL的重要文件

在Linux系统中,MySQL的文件存储在“/var/lib/mysql/”目录下。检查该目录中的“ibdata1”,“ib_logfile0”和“ib_logfile1”三个文件是否存在。这些文件保存了MySQL表的数据和日志信息。

步骤二:停止MySQL服务

在恢复数据之前,需先停止MySQL服务。使用以下命令来停止MySQL服务:

sudo systemctl stop mysql

步骤三:备份MySQL表

在恢复数据之前,更好先备份MySQL表以防止数据丢失。使用以下命令来备份MySQL表:

sudo mysqldump -u username -p database_name table_name > table_name.sql

上述命令将备份指定的表并将其保存到“table_name.sql”文件中。其中,“username”是MySQL用户的用户名,“database_name”是要备份的数据库名称,“table_name”是要备份的表名称。

步骤四:删除损坏的数据文件

在“/var/lib/mysql/”目录中,先将损坏的文件备份一下,然后将其删除。

步骤五:恢复数据

MySQL的数据会保存在“/var/lib/mysql/”目录下的“ibdata1”,“ib_logfile0”和“ib_logfile1”文件中。通过以下步骤,可以尝试使用这些文件来恢复MySQL表的数据:

1. 使用以下命令启动MySQL服务:

sudo systemctl start mysql

2. 使用以下命令进入MySQL:

mysql -u username -p

3. 创建一个空白数据库:

create database new_database_name;

4. 选择新数据库:

use new_database_name;

5. 导入备份的数据:

source /path/to/table_name.sql;

6. 导入数据后,使用以下命令恢复表数据:

REPR TABLE table_name USE_FRM;

7. 退出MySQL:

exit;

恢复MySQL表中的数据可能需要一些时间,因此请耐心等待。

步骤六:验证数据恢复

在恢复数据后,请使用以下命令验证数据是否正确:

sudo mysql -u username -p database_name -e “SELECT * FROM table_name;”

该命令将显示表中的所有数据。

结论

MySQL表中的数据很重要,因此在任何时候都应定期备份并确保其安全。但是,如果数据不幸丢失或损坏,使用上述步骤可以使用Linux系统来恢复MySQL表中的数据。但请注意,在使用这些步骤之前,请确保备份了数据,以防止丢失数据。

相关问题拓展阅读:

怎样备份/还原MySQL数据库 之 MySQL Workbench

恢复整个数据库首先,如果要恢复的数据库是含有授权表的mysql数据库,将需要使用–skip-grant-tables选项运行服务器。否则,服务器将抱怨无法找到授权表。在恢复表之后,执行mysqladmin flush-privileges 来告诉服务器加载授权表,并用它们启动。将原数据库目录的内容拷贝到其他的地方。例如,您可能会在稍后用它们进行崩溃表的事后分析检查(post-mortem examination)。用最新的备份文件重新加载数据库。如果您打算使用由mysqldump 加载的文件,则需要将它们作为mysql的输入。如果打算使用从数据库中直接拷贝的文件(如,用tar 或c p),则将它们直接拷贝回到该数据库目录中。但是,在这种情况下,应该在拷贝这些文件之前关闭服务器,然后再重新启动它。用更新日志重做在进行备份后又修改了数据库表的查询。对于所有可用的更新日志,可使用它作为mysql的输入。指定–one-database 选项,使mysql只对想要恢复的数据库执行查询。如果您知道需要使用所有的更新日志文件,可在包含日志的目录中使用下列命令:% ls-t-r-l update.(0-9)* | xargs cat | mysql–one-database db_namels 命令产生更新日志文件的单列列表,更新日志文件根据服务器生成的顺序进行排序(要知道,如果您修改了其中的任何文件,排序的顺序都将改变,这将导致更新日志按错误的顺序使用)。您很可能必须使用某些更新日志。例如,如果自备份以来所产生的日志命名为update.392、pdate.393 等等,可以重新运行它们中的命令:% mysql–one-database db_name

个人建议,mysql 备份和还原 我一般 用Navicat 快速 简单, 定时备份的话 采用 linux 定时器

前言

MySQL 5.6引入了GTID,每个事务都会产生一个GTID,我们可以通过验证主从GTID来验证主从数据的一致性。

为了叙述简便,定义一个量ALL_GTID: 表示某个数据库实例上 所有存在过的 或 将要存在的事务 的GTID(包括已经被purge掉的事务)。

在讨论数据库可用性的场景中, 当发生主备切换时, 需要进行数据补偿。通过比较主备的ALL_GTID,可以确定需要补偿多少数据:

在实例存活的情况,可以在实例状态中查询ALL_GTID。

在实例崩溃的情况,无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。

下面列举与ALL_GTID相关的变量。

与ALL_GTID相关的变量

Previous-GTIDs

Previous-GTIDs格式如下(环境为MySQL5.7,日志手动flush binary logs获得):

查看新轮转出的BINLOG:

下面为mysql-bin.00001中包含的GTID:

请点击输入图片描述

然后再次flush binary logs:

请点击输入图片描述

mysql-bin.00002中是没有任何GTID的。

请点击输入图片描述

综上Previous-GTIDs是本身这个BINLOG文件前面的所有BINLOG的。

请点击输入图片描述

全局变量中的GTID相关的变量

请点击输入图片描述

变量解释:

gtid_executed 代表着server上所有事务执行产生的GTID(包含已经被purge的BINLOG中的GTID或者是手动set gtid_purged的GTID)。

gtid_purged 代表着已经被purge到的GTID。gtid_purged是gtid_executed的子集。

gtid_retrieved 是从机上relay_log中的GTID。

ALL_GTID 的计算

了解了GTID相关的变量之后,可以得到获得实例的All_GTID的的方法:

对象

方法

存活的Master实例    gtid_executed    

存活的Slave实例    gtid_executed和gtid_retrieved的并集    

非存活Master实例    最后一个BINLOG文件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

非存活Slave实例    最后一个BINLOG文件的Previous-GTIDs + 最后一个BINLOG文件中所有的GTID    

在获得非存活实例中的ALL_GTID时,最后一个BINLOG文件中的GTID可能不连续(比如事务同时来自于本实例客户端和复制回放),所以需要扫描最后一个BINLOG文件。

生产中我们使用Xtrabackup来产生一个 从实例 的流程如下:

拉取备份,进行还原

change master to

set @@global.gtid_purged=”;

set @@global.gtid_purged=”; 的影响:

将 从实例 的ALL_GTID手工置为, 在通过GTID方式建立复制时不会出错.

将更新Binlog中记录的Previous-GTIDs (由于Binlog不可改变, 将产生新的Binlog, 记录新的Previous-GTIDs).

MySQL 5.7中set gtid_purged的行为变更

问题描述

回顾一下备份恢复的流程:

拉取备份,进行还原

change master to

set @@global.gtid_purged=”;

现象: 发现有一台MySQL 5.7的Slave服务器恢复后没有产生 正确的Previous-GTIDs。

分析

分析整个过程,解决问题应该分阶段进行手动模拟发现问题。以下为详细步骤:

手工还原备份

环境

BINLOG数量,Previous-GTIDs状态

Xtrabackup 2.4.2 & MySQL 5.6    1,空    

Xtrabackup 2.4.2 & MySQL 5.7    1,空    

Xtrabackup 2.2.9 & MySQL 5.6    1,空    

Xtrabackup 2.2.9 & MySQL 5.7    1,空    

可见: 恢复过程不会轮转BINLOG。

验证change master和set gtid_purged在不同的MySQL版本中执行的差异

环境

BINLOG数量,Previous-GTIDs状态

change master & MySQL 5.6    1,空    

change master & MySQL 5.7    1,空    

set gtid_purged & MySQL 5.6    2,正常    

set gtid_purged & MySQL 5.7    1,空    

可见: 执行set gtid_purged时不同版本的MySQL产生了差异

验证

对不同版本MySQL单独执行set @@global.gtid_purged=”;语句。检查结果

环境

进行的操作

BINLOG数量,Previous-GTIDs状态

MySQL 5.7    reset master; set @@global.gtid_purged=”;    1,空    

MySQL 5.6    reset master; set @@global.gtid_purged=”;    2,正常    

结论

参考:

官方解释: 在5.7版本中,执行SET GTID_PURGED语句后binlog_simple_gtid_recovery会给GTID_PURGED计算出一个错误的值。

由于5.7中新增了存储GTID的表。所以5.7版本中set @@global.gtid_purged=”;语句被改成只修改存放GTID的表。

而5.6版本中会进行BINLOG轮转和向Previous_gtids_log_event中添加GTID。如果5.7需要产生和5.6相同结果的话,可以在SET GTID_PURGED语句后手动执行flush binary logs语句。

我用的是阿里云linux服务器,数据库是MySQL,怎样用备份数据,恢复数据库呢备份文件里有frm myd myi

使用MYSQ的备份程序和shell编凳茄程, 能做到完美的数据伍喊备份和还原的哦, 能否看看wo 的网名的 啊?—–>一定腔粗野能解决的 !!

linux mysql表内容恢复数据的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux mysql表内容恢复数据,如何使用Linux恢复MySQL表中的数据,怎样备份/还原MySQL数据库 之 MySQL Workbench,我用的是阿里云linux服务器,数据库是MySQL,怎样用备份数据,恢复数据库呢备份文件里有frm myd myi的信息别忘了在本站进行查找喔。


数据运维技术 » 如何使用Linux恢复MySQL表中的数据 (linux mysql表内容恢复数据)