用Myisamchk进行崩溃恢复MySQL
MySQL常见错误分析与解决方法总结

MySQL常见错误分析与解决⽅法总结MySQL常见错误分析与解决⽅法总结⼀、Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分析:这说明"localhost"计算机是存在的,但在这台机器上却没提供MySQL服务。
需要启动这台机器上的MySQL服务,如果机⼦负载太⾼没空相应请求也会产⽣这个错误。
解决:既然没有启动那就去启动这台机⼦的mysql。
如果启动不成功,多数是因为你的my.ini配置的有问题。
重新配置其即可。
如果觉得mysql负载异常,可以到mysql/bin 的⽬录下执⾏mysqladmin -uroot -p123 processlist来查看mysql当前的进程。
⼆、Unknown MySQL Server Host 'localhosadst' (11001)翻译:未知的MySQL服务器 localhosadst分析:服务器 localhosasdst 不存在。
或者根本⽆法连接解决:仔细检查⾃⼰论坛下⾯的 ./config.inc. 找到$dbhost重新设置为正确的mysql 服务器地址。
三、Access denied for user: 'roota@localhost' (Using password: YES)翻译:⽤户 roota 访问 localhost 被拒绝(没有允许通过)分析:造成这个错误⼀般数据库⽤户名和密码相对mysql服务器不正确解决:仔细检查⾃⼰论坛下⾯的 ./config.inc.php 找到dbuser、dbpw核实后重新设置保存即可。
四、Access denied for user: 'red@localhost' to database 'newbbs'翻译:⽤户 red 在localhost 服务器上没有权限操作数据库newbbs分析:这个提⽰和问题三是不同的。
mysql repair修表原理

MySQL修复表的基本原理在MySQL中,修复表是一种修复损坏的表的方法。
当MySQL表发生损坏或崩溃时,可能会导致数据丢失或无法访问。
修复表的目的是尽可能地恢复损坏的表并修复其中的错误,使其能够再次正常工作。
1. 表损坏的原因MySQL表损坏的原因可能有多种,包括硬件故障、操作系统故障、MySQL崩溃、断电等。
这些原因可能导致表中的数据和索引出现错误或不一致。
2. 修复表的方法MySQL提供了多种修复表的方法,包括使用REPAIR TABLE语句、使用myisamchk工具和使用InnoDB存储引擎的一些特定方法。
2.1 使用REPAIR TABLE语句修复表REPAIR TABLE语句是MySQL提供的一种修复表的简单方法。
它可以用于修复MyISAM和ARCHIVE存储引擎的表。
使用REPAIR TABLE语句修复表的基本原理如下:1.MySQL首先会检查表的元数据,包括表结构、表的引擎类型等。
如果表的元数据损坏,MySQL将无法修复表。
2.如果表的元数据正常,MySQL会尝试修复表中的错误。
它会扫描表中的数据和索引,检查是否存在错误或不一致。
3.如果MySQL发现了错误或不一致,它将尝试修复这些问题。
修复的方法包括删除损坏的行、重建索引、修复索引等。
4.修复过程中,MySQL会生成一个修复日志,记录修复过程中的操作和结果。
这个修复日志可以用于后续的分析和恢复。
2.2 使用myisamchk工具修复表myisamchk是MySQL提供的一个命令行工具,可以用于修复MyISAM存储引擎的表。
它提供了更多的修复选项,可以对表进行更细粒度的修复。
使用myisamchk工具修复表的基本原理如下:1.首先,myisamchk会检查表的元数据,包括表结构、表的引擎类型等。
如果表的元数据损坏,myisamchk将无法修复表。
2.如果表的元数据正常,myisamchk会对表进行一致性检查。
它会扫描表中的数据和索引,检查是否存在错误或不一致。
mysql出现“Incorrectkeyfilefortable”处理方法

mysql出现“Incorrectkeyfilefortable”处理⽅法最近服务器出现问题,导致公司的⽹站数据丢了很多。
智软的也丢了不少。
这⼏天⼀直都在忙这修复数据。
今天在恢复⼀个客户数据的时候。
发现了⼀贯问题。
有多个表损坏了。
因为都是直接把表复制进去的。
然后就出现了这个问题问题如图:dedecms Error Warnin!Error infos: Incorrect key file for table 'it_member_snsmsg'; try to repair it图⽚1这个是说表坏掉了。
修复⽅法如上:下⾯就是具体的操作⽅法:在DEDE的后台SQL操作中直接输⼊复制代码代码如下:repair table tablename;REPAIR TABLE tablename USE_FRM把 tablename换成表名就可以了!但是修复了数据会丢掉。
只能在把数据导⼊进去。
如果在服务器上操作我们可以使⽤软件或者⽤批处理复制代码代码如下:cmd /k myisamchk --recover dede_archivesmysql> select * from Filter limit 4;ERROR 1034 (HY000): Incorrect key file for table ‘Filter'; try to repair itrepair table修复后还是没有⽤:mysql> repair table Filter;+—————+——–+———-+———————————————————+| Table | Op | Msg_type | Msg_text | +—————+——–+———-+———————————————————+| pfsmtp.Filter | repair | Error | Incorrect key file for table ‘Filter'; try to repair it | | pfsmtp.Filter | repair | error | Corrupt |退出mysql,执⾏如下修复动作:myisamchk -of /mail/var/mysql/smtp/Filter.MYImyisamchk -r /mail/var/mysql/smtp/Filter.MYImyisamchk safe-recover /mail/var/mysql/smtp/Filter.MYI再重启mysql后修复正常了。
mysqlcheck修复命令

mysqlcheck修复命令:mysqlcheck客户端可以检查和修复MyISAM表。
它还可以优化和分析表。
mysqlcheck的功能类似myisamchk,但其工作不同。
主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。
使用mysqlcheck的好处是不需要停止服务器来检查或修复表。
Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。
它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。
有3种方式来调用mysqlcheck:Php代码1shell> mysqlcheck [options] db_name [tables] -uusername -ppassword 2shell> mysqlcheck [options] --database DB1 [DB2 DB3...] -uusername-ppassword3shell> mysqlcheck [options] --all-databases -uusername -ppassword如果没有指定任何表或使用--database或--all-databases选项,加上-A则检查数据库服务器上的所有数据库。
比较常用的[options]比如:-a -c -o -r 可以统一写成-acormysqlcheck支持下面的选项:---help,-?显示帮助消息并退出。
--all--database,-A检查所有数据库中的所有表。
与使用---database选项相同,在命令行中命名所有数据库。
--all-in-1,-1不是为每个表发出一个语句,而是为命名数据库中待处理的所有表的每个数据库执行一个语句。
--analyze,-a分析表。
mysql8 的备份和恢复方法

mysql8 的备份和恢复方法MySQL 8 的备份和恢复方法MySQL 是一种常用的关系型数据库管理系统,被广泛应用于各种类型的应用程序中。
为了保护数据库中的重要数据,定期备份数据库并学会恢复是非常重要的。
本文将介绍 MySQL 8 数据库的备份和恢复方法。
备份数据库是指将数据库的数据和架构等信息复制到另一个位置,以便在数据丢失或系统崩溃时可以恢复数据。
下面是备份 MySQL 8 数据库的方法:1. 使用 MySQL 官方提供的 mysqldump 工具:mysqldump 是 MySQL 官方提供的用于备份数据库的命令行工具。
在备份MySQL 8 数据库时,可以使用以下命令:```mysqldump -u <用户名> -p <密码> <数据库名> > <备份文件名>.sql```这个命令将会把指定的数据库备份为一个 .sql 文件。
例如,要备份名为"example" 的数据库,可以运行以下命令:```mysqldump -u root -p example > example_backup.sql```该命令将提示输入密码,然后将 "example" 数据库备份到 "example_backup.sql" 文件中。
2. 使用 MySQL Workbench 进行备份:MySQL Workbench 是图形化的数据库管理工具,可以方便地备份和恢复MySQL 数据库。
打开 MySQL Workbench 后,选择 "Server" 菜单下的 "Data Export" 选项。
在弹出的窗口中,选择要备份的数据库和备份的位置,然后点击"Start Export" 开始备份。
这种方法适用于那些不熟悉命令行的用户,通过图形界面进行操作更加直观和方便。
修复数据库表

老数据库cd /home/ncmysql/mysq141/data/nc
目录里面执行修复数据库命令
myisamchk -r *MYI 修复所有的表格
myisamchk –r ncthisinfo 趋势图
myisamchk –r ncipservice 饼图
mysqladmin -u root -plymlq123 shutdown 老数据库
2,关闭网络督察服务killall -9 proeim
killall -9 nc
3,然后到cd /db/mysq141/data/nc,
5,同步数据库cd /home/ncmysql/nc/bin目录
./ncupdatedbstr -u nc -p nc -d nc -f ncc.str(同步数据库)
6,重启网络督察服务 ./proeim
修复过程如下:
(1)先停用网络程序进程
cd /home/ncmysql/nc/bin/
proeim stop
(2)停用数据库
mysqladmin -u root -pPronetwaySH shutdown
(3)修复损坏的数据库表
cd /usr/local/mysql/data/nc/
myisamchk -r *.MYI
(4)重新启动数据库
cd /usr/local/mysql/bin
safe_mysqld &
(5)cd /home/ncmysql/nc/bin/
同步数据库
./ncupdatedbstr -u nc -p nc -d nc -f ncc.str
执行5次
(6)启动网络督察
如何在MySQL中进行数据修复和恢复

如何在MySQL中进行数据修复和恢复数据库是现代应用程序中最重要的组成部分之一,它负责存储和管理数据。
然而,由于各种原因,数据库可能会遇到各种问题,例如数据损坏、意外删除或系统故障。
在这种情况下,及时进行数据修复和恢复变得至关重要。
本文将探讨如何在MySQL中进行数据修复和恢复的方法。
1. 检查和修复损坏的数据表MySQL提供了一个命令行工具叫做"mysqlcheck",用于检查和修复损坏的数据表。
要使用该工具,首先需要登录到MySQL服务器。
登录后,可以执行以下命令来检查并修复所有数据库中的表:mysqlcheck -u 用户名 -p --auto-repair --check --all-databases此命令会检查所有数据库中的所有表,并尝试修复损坏的表。
使用"--auto-repair"选项可以使mysqlcheck自动修复发现的问题,并使用"--check"选项来检查表的完整性。
如果发现了任何问题,mysqlcheck将尝试使用可用的方法进行修复。
2. 数据库恢复当数据表遇到严重问题时,可能需要执行数据库恢复操作。
MySQL提供了两种方式进行数据库恢复:使用二进制日志文件(binary log file)和使用备份。
使用二进制日志文件进行数据库恢复需要启用二进制日志。
在MySQL配置文件中,可以将"log-bin"选项设置为启用二进制日志功能。
启用后,MySQL将在执行任何更改数据库数据的操作时,记录到二进制日志文件中。
对于误删除数据或意外修改的情况,可以使用二进制日志文件进行恢复。
首先,需要找到有问题的时间点之前的二进制日志文件。
然后,使用mysqlbinlog工具来解析二进制日志文件,并生成包含有问题操作的SQL语句文件。
最后,可以将SQL语句文件导入到数据库中,以恢复数据到原来的状态。
对于较长时间内的数据丢失或数据库完全损坏的情况,可以使用备份进行恢复。
Mysql修复表的多种方法

修复mysql表的N种方法也许很多人遇到过类似Can’t open file: ‘[Table]m ytable.MYI’这样的错误信息,却不知道怎么解决他,下面我们做个介绍,多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。
大多数形式的数据库破坏的的修复相当简单。
和前面的校验一样,修复的方式也有三种。
下面讲的方法只对MyISAM格式的表有效。
其他类型的损坏需要从备份中恢复。
1,REPAIR TABLE SQL statem ent(m ysql服务必须处于运行状态)。
2,命令m ysqlcheck(m ysql服务可以处于运行状态)。
3,命令m yisam chk(必须停掉m ysql服务,或者所操作的表处于不活动状态)。
在修复表的时候,最好先作一下备份。
所以你需要两倍于原始表大小的硬盘空间。
请确保在进行修复前你的硬盘空间还没有用完。
1>用”repair table”方式修复语法:repair table 表名[选项]选项如下:QUICK 用在数据表还没被修改的情况下,速度最快EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。
利用.frm的定义来重建索引多数情况下,简单得用”repair table tablenam e”不加选项就可以搞定问题。
但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,例如:m ysql> REPAIR TABLE m ytable;+————————-+——–+———-+———————————————+| Table | Op | Msg_type | Msg_tex t |+————————-+——–+———-+———————————————+| sports_results.m ytable | repair | error | Can’t find file: ‘m ytable.MYI’ (errno: 2) | +————————-+——–+———-+———————————————+修复失败的原因时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Myisamchk进行崩溃恢复MySQL
由MySQL用来存储数据的文件格式以已经被广泛地测试过,但是总是有外部情况可以导致数据库表被破坏:
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。
这章描述如何检查和处理在MySQL数据库中的数据损坏。
如果你的表损坏很多,你应该尝试找出其原因!见G.1 调试一个MySQL服务器。
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:
文件用途
“tbl_name.frm” 表定义(表格)文件
“tbl_name.MYD” 数据文件
“tbl_name.MYI” 索引文件
这3个文件的每一个文件类型可能遭受不同形式的损坏,但是问题最常发生在数据文件和索引文件。
myisamchk通过一行一行地创建一个“.MYD”(数据 )文件的副本来工作,它通过由删除老的“.MYD 文件并且重命名新文件到原来的文件名结束修复阶段。
如果你使用–quick,myisamchk不创建一个临时“.MYD”文件,只是假定“.MYD”文件是正确的并且仅创建一个新的索引文件,不接触“.MYD”文件,这是安全的,因为myisamchk自动检测“.MYD”文件是否损坏并且在这种情况下,放弃修复。
你也可以给myisamchk两个–quick选项。
在这种情况下,myisamchk不会在一些错误上(象重复键)放弃,相反试图通过修改“.MYD”文件解决它们。
通常,只有在你在太少的空闲磁盘空间上实施一个正常修复,使用两个–quick选项才有用。
在这种情况下,你应该至少在运行myisamchk前做一个备份。
一、怎样检查表的错误
为了检查一张表,使用下列命令:
myisamchk tbl_name
这能找出所有错误的99.99%。
它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。
如果你想要检查一张表,你通常应该没有选项地运行myisamchk或用-s 或–silent选项的任何一个。
myisamchk -e tbl_name
它做一个完全彻底的数据检查(-e意思是“扩展检查”)。
它对每一行做每个键的读检查以证实他们确实指向正确的行。
这在一个有很多键的大表上可能花很长时间。
myisamchk通常将在它发现第一个错误以后停止。
如果你想要获得更多的信息,你能增加–verbose(-v)选项。
这使得myisamchk继续一直到最多20个错误。
在一般使用中,一个简单的myisamchk(没有除表名以外的参数)就足够了。
myisamchk -e -i tbl_name
象前面的命令一样,但是-i选项告诉myisamchk还打印出一些统计信息。
二、怎样修复表
一张损坏的表的症状通常是查询意外中断并且你能看到例如这些错误:
“tbl_name.frm”被锁定不能改变。
不能找到文件“tbl_name.MYI”(Errcode :### )。
从表处理器的得到错误###(此时,错误135是一个例外)。
意外的文件结束。
记录文件被毁坏。
在这些情况下,你必须修复表。
myisamchk通常能检测并且修复出错的大部分东西。
修复过程包含最多4个阶段,在下面描述。
在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。
如果它拒绝你修改文件,他们也必须是可被你写入的。
阶段1:检查你的表
运行
myisamchk *.MYI
或(myisamchk -e *.MYI,如果你有更多的时间)。
使用-s(沉默)选项禁止不必要的信息。
你必须只修复那些myisamchk报告有一个错误的表。
对这样的表,继续到阶段2。
如果在检查时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk 崩溃,到阶段3。
阶段2 :简单安全的修复
首先,试试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> DELETE FROM tbl_name;
mysql> quit
将老的数据文件拷贝到新创建的数据文件之中。
(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。
)
回到阶段2。
现在myisamchk -r -q应该工作了。
(这不应该是一个无限循环)。
阶段4:非常困难的修复
只有描述文件也破坏了,你才应该到达这个阶段。
这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。
从一个备份恢复描述文件并且回到阶段3。
你也可以恢复索引文件并且回到阶段2。
对后者,你应该用myisamchk -r启动。
如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。
删除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的数据库中。
这给了你新的描述和索引文件,但是让数据文件独自留下来了。
回到阶段2并且尝试重建索引文件。
三、表优化
为了组合成碎片的记录并且消除由于删除或更新记录而浪费的空间,以恢复模式运行myisamchk:
shell> myisamchk -r tbl_name
你可以用SQL的OPTIMIZE TABLE语句使用的相同方式来优化一张表,OPTIMIZE TABLE比较容易,但是myisamchk更快。
也没有在一个实用程序和服务器之间不必要的交互可能性,因为当你使用OPTIMIZE TABLE时,服务器做所有的工作。
myisamchk也有你可用来改进一个表的性能的很多其他选项:
-S, –sort-index
-R index_num, –sort-records=index_num
-a, –analyze
对于选项完整的描述见myisamchk调用语法。