MySQL误删除数据,如何恢复

MySQL误删除数据,如何恢复,第1张

如果你要恢复的数据库是包含授权表的mysql数据库,您将需要使用--skip赠款-tables选项来运行服务器恢复整个数据库

- 首先,。否则,服务器会抱怨不能找到授权表。恢复表后,执行mysqladmin冲水privileges告诉服务器装载授权表,并用它们来启动。数据库目录到其他地方的原始内容

复制。例如,您可以使用它们在以后的事后分析检查表(验尸)的崩溃。

酒店与最新的数据库备份文件重新加载。如果您打算使用mysqldump的所加载的文件,则需要输入它们作为mysql的。如果您打算使用从数据库文件直接拷贝(例如,使用tar或CP),它会复制他们直接回数据库目录中。然而,在这种情况下,你应该在关闭之前,该服务器复制这些文件,然后重新启动它。在备份过程中

重做日志,然后查询更新数据库表中。对于所有可用的更新日志,你可以使用它作为mysql的输入。指定--one-database选项,因此MySQL只是要还原的数据库执行查询。如果你意识到有必要使用所有的更新日志文件,可以使用包含以下命令日志的目录:

%LS-TRL更新(0-9) | xargs的猫| mysql--。一个数据库DB_NAME

ls命令生成一个单独的日志文件更新列表,更新日志文件根据服务器(你知道,如果你其中的任何文件,排序顺序生成的顺序进行排序会发生变化,这将导致在更新日志中以错误的顺序使用)。有限公司您可能需要使用一些更新日志。例如,如果日志,因为命名update392备份,pdate393等产生的,可以在命令重新运行它们:

%的mysql - 一个数据库DB_NAME <录入。 392

%的mysql - 一个数据库DB_NAME <updata393

如果您正在运行的恢复,并打算使用更新日志恢复由于失误降数据的基础上,DROPTABLE或DELETE语句和丢失的信息时,一定要在开始更新日志删除这些语句。

恢复单个表

恢复单个表是非常困难的。如果是的mysqldump备份文件生成的,它只是不包含数据,您需要一个表,你需要提取的相关线路,并利用它们作为mysql的输入,这部分比较容易。困难的是,提取在该表的更新日志中使用的片段。你会发现:mysql_find_rows工具在这方面有所帮助,它可以提取多行从更新日志查询。另一种可能性是使用另一台服务器

恢复整个数据库,然后将该文件复制到表的原始数据库。这其实很容易!当文件被复制回数据库目录,确保原始数据库服务器关闭。

可以使用语句检查表。如果结果的msg_text部分是好的,那么你的表是健康的。反之,则表明mysql数据库中的表有损坏。另外有些厉害的高手一额可以通过运行脚本来检测。

MyISAM 表可以采用以下方法进行修复 :使用 reapair table 或myisamchk 来修复。如果修复无效,采用备份恢复表。

阶段1 :检查你的表

如果你有很多时间,运行myisamchk MYI 或myisamchk -e MYI 。使用-s (沉默)选项禁止不必要的信息。如果mysqld 服务器处于宕机状态,应使用--update-state 选项来告诉myisamchk 将表标记为' 检查过的' 。

你必须只修复那些myisamchk 报告有错误的表。对这样的表,继续到阶段2 。如果在检查时,你得到奇怪的错误( 例如out of memory 错误) ,或如果myisamchk 崩溃,到阶段3 。

阶段2 :简单安全的修复

注释:如果想更快地进行修复,当运行myisamchk 时,你应将sort_buffer_size 和Key_buffer_size 变量的值设置为可用内存的大约25% 。

首先,试试myisamchk -r -q tbl_name(-r -q 意味着“ 快速恢复模式”) 。这将试图不接触数据文件来修复索引文件。如果数据文件包含它应有的一切内容和指向数据文件内正确地点的删除连接,这应该管用并且表可被修复。开始修复下一张表。否则,执行下列过程:

在继续前对数据文件进行备份。使用myisamchk -r tbl_name(-r 意味着“ 恢复模式”) 。这将从数据文件中删除不正确的记录和已被删除的记录并重建索引文件。

如果前面的步骤失败,使用myisamchk --safe-recover tbl_name 。安全恢复模式使用一个老的恢复方法,处理常规恢复模式不行的少数情况( 但是更慢) 。如果在修复时,你得到奇怪的错误( 例如out of memory 错误) ,或如果myisamchk 崩溃,到阶段3 。

阶段3 :困难的修复

只有在索引文件的第一个16K 块被破坏,或包含不正确的信息,或如果索引文件丢失,你才应该到这个阶段。在这种情况下,需要创建一个新的索引文件。按如下步骤 *** 做:

把数据文件移到安全的地方。使用表描述文件创建新的( 空) 数据文件和索引文件:

shell> mysql db_name

mysql> SET AUTOCOMMIT=1;

mysql> TRUNCATE TABLE tbl_name;

mysql> quit

如果你的MySQL 版本没有TRUNCATE TABLE ,则使用DELETE FROM tbl_name 。将老的数据文件拷贝到新创建的数据文件之中。回到阶段2 。现在myisamchk -r -q 应该工作了。你还可以使用REPAIR TABLE tbl_name USE_FRM ,将自动执行整个程序。

阶段4 :非常困难的修复

只有frm 描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。

从一个备份恢复描述文件然后回到阶段3 。你也可以恢复索引文件然后回到阶段2 。对后者,你应该用myisamchk -r 启动。

如果你没有进行备份但是确切地知道表是怎样创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他数据库将描述文件和索引文件移到破坏的数据库中。这样提供了新的描述和索引文件,但是让MYD 数据文件独自留下来了。回到阶段2并且尝试重建索引文件。

1、source命令

1)打开开始菜单->程序->MySQL->MySQLCommandLineClient,输入MySQL的root密码。

2)然后输入use数据库名;进入对应的数据库,再用source备份文件具体路径;命令导入备份文件。注意,在这里的命令后面都要加;分号,截图如下:

2、mysql命令

1)如果是Windows系统,请在命令行模式下进入mysql的bin目录,如D:Programmysql41in。如果是Linux系统,请直接看下面的步骤。

2)执行mysql命令导入数据库,命令格式为:

mysql-u用户名-p密码数据库名

比如:mysql-uroot-pabc123mydb

二、数据库的导出(备份)

一般使用mysqlmp命令

1)如果是Windows系统,请在命令行模式下进入mysql的bin目录,如D:Programmysql41in。如果是Linux系统,请直接看下面的步骤。

2)执行mysqlmp命令导入数据库,命令格式为:

mysqlmp-u用户名-p密码数据库名>备份文件具体路径

594 表维护和崩溃恢复

后面几节讨论如何使用myisamchk来检查或维护MyISAM表(对应MYI和MYD文件的表)。

你可以使用myisamchk实用程序来获得有关你的数据库表的信息或检查、修复、优化他们。下列小节描述如何调用myisamchk(包括它的选项的描述),如何建立表的维护计划,以及如何使用myisamchk执行各种功能。

尽管用myisamchk修复表很安全,在修复(或任何可以大量更改表的维护 *** 作)之前先进行备份也是很好的习惯

影响索引的myisamchk *** 作会使ULLTEXT索引用full-text参数重建,不再与MySQL服务器使用的值兼容。要想避免,请阅读5951节,“用于myisamchk的一般选项”的说明。

在许多情况下,你会发现使用SQL语句实现MyISAM表的维护比执行myisamchk *** 作要容易地多:

· 要想检查或维护MyISAM表,使用CHECK TABLE或REPAIR TABLE。

· 要想优化MyISAM表,使用OPTIMIZE TABLE。

· 要想分析MyISAM表,使用ANALYZE TABLE。

可以直接这些语句,或使用mysqlcheck客户端程序,可以提供命令行接口。

这些语句比myisamchk有利的地方是服务器可以做任何工作。使用myisamchk,你必须确保服务器在同一时间不使用表。否则,myisamchk和服务器之间会出现不期望的相互干涉。

595 myisamchk:MyISAM表维护实用工具

5951 用于myisamchk的一般选项

5952 用于myisamchk的检查选项

5953 myisamchk的修复选项

5954 用于myisamchk的其它选项

5955 myisamchk内存使用

5956 将myisamchk用于崩溃恢复

5957 如何检查MyISAM表的错误

5958 如何修复表

5959 表优化

可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应MYI和MYD文件的表)。

调用myisamchk的方法:

shell> myisamchk [options] tbl_name

options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk --help得到选项列表。

tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在 *** 作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复 *** 作。

如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用“ MYI”后缀)来指定一个表。它允许你通过使用模式“MYI”指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:

shell> myisamchk MYI

如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:

shell> myisamchk /path/to/database_dir/MYI

你甚至可以通过为MySQL数据目录的路径指定一个通配符来检查所有的数据库中的所有表:

shell> myisamchk /path/to/datadir//MYI

推荐的快速检查所有MyISAM表的方式是:

shell> myisamchk --silent --fast /path/to/datadir//MYI

如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:

shell> myisamchk --silent --force --fast --update-state \

-O key_buffer=64M -O sort_buffer=64M \

-O read_buffer=1M -O write_buffer=1M \

/path/to/datadir//MYI

该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5955节,“myisamchk内存使用”。

当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:

warning: clients are using or haven't closed the table properly

这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。

如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。

5951 用于myisamchk的一般选项

本节描述的选项可以用于用myisamchk执行的任何类型的表维护 *** 作。本节后面的章节中描述的选项只适合具体 *** 作,例如检查或修复表。

· --help,-

显示帮助消息并退出。

· --debug=debug_options, -# debug_options

输出调试记录文件。debug_options字符串经常是'd:t:o,filename'。

· --silent,-s

沉默模式。仅当发生错误时写输出。你能使用-s两次(-ss)使myisamchk沉默。

· --verbose,-v

冗长模式。打印更多的信息。这能与-d和-e一起使用。为了更冗长,使用-v多次(-vv, -vvv)!

· --version, -V

显示版本信息并退出。

· --wait, -w

如果表被锁定,不是提示错误终止,而是在继续前等待到表被解锁。请注意如果用--skip-external-locking选项运行mysqld,只能用另一个myisamchk命令锁定表。

还可以通过--var_name=value选项设置下面的变量:

变量

默认值

decode_bits

9

ft_max_word_len

取决于版本

ft_min_word_len

4

ft_stopword_file

内建列表

key_buffer_size

523264

myisam_block_size

1024

read_buffer_size

262136

sort_buffer_size

2097144

sort_key_blocks

16

stats_method

nulls_unequal

write_buffer_size

262136

可以用myisamchk --help检查myisamchk变量及其 默认值:

当用排序键值修复键值时使用sort_buffer_size,使用--recover时这是很普通的情况。

当用--extend-check检查表或通过一行一行地将键值插入表中(如同普通插入)来修改键值时使用Key_buffer_size。在以下情况通过键值缓冲区进行修复:

· 使用--safe-recover。

· 当直接创建键值文件时,需要对键值排序的临时文件有两倍大。通常是当CHAR、VARCHAR、或TEXT列的键值较大的情况,因为排序 *** 作在处理过程中需要保存全部键值。如果你有大量临时空间,可以通过排序强制使用myisamchk来修复,可以使用--sort-recover选项。

通过键值缓冲区的修复占用的硬盘空间比使用排序么少,但是要慢。

如果想要快速修复,将key_buffer_size和sort_buffer_size变量设置到大约可用内存的25%。可以将两个变量设置为较大的值,因为一个时间只使用一个变量。

myisam_block_size是用于索引块的内存大小。

stats_method影响当给定--analyze选项时,如何为索引统计搜集处理NULL值。它如同myisam_stats_method系统变量。详细信息参见533节,“服务器系统变量”和747节,“MyISAM索引统计集合”的myisam_stats_method的描述。

ft_min_word_len和ft_max_word_len表示FULLTEXT索引的最小和最大字长。ft_stopword_file为停止字文件的文件名。需要在以下环境中对其进行设置。

如果你使用myisamchk来修改表索引(例如修复或分析),使用最小和最大字长和停止字文件的 默认全文参数值(除非你另外指定)重建FULLTEXT索引。这样会导致查询失败。

出现这些问题是因为只有服务器知道这些参数。它们没有保存在MyISAM索引文件中。如果你修改了服务器中的最小或最大字长或停止字文件,要避免该问题,为用于mysqld的myisamchk指定相同的ft_min_word_len,ft_max_word_len和ft_stopword_file值。例如,如果你将最小字长设置为3,可以这样使用myisamchk来修复表:

shell> myisamchk --recover --ft_min_word_len=3 tbl_nameMYI

要想确保myisamchk和服务器使用相同的全文

以上就是关于MySQL误删除数据,如何恢复全部的内容,包括:MySQL误删除数据,如何恢复、怎么查看mysql数据库中的表是否损坏、怎么还原,恢复或导入MySQL数据库(如何还原数据库)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9729821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存