分类
原创教程 域名主机

使用 myisamchk 修复wordpress崩溃的mysql数据库表

用wordpress+woocommerce搭建的独立外贸网站,因为上传产品过多,造成数据库大小超过1G,加上空间服务器问题。
经常造成数据库崩溃,造成网站数据库连接不上,打不开。

服务器管理运维面板:宝塔
网站程序:wordpress

一般网站打不开,提示数据库连接不上,需要进入宝塔运维面板,查看是否数据库MYSQL是否停止,如果没有,就通过phpmyadmin打开数据查看。
这个时候会看到数据库里一些表在使用中,通常操作是,点击在使用中的表,然后选择修复表,就会解决问题。

但是会遇到修复不了的情况。下面就介绍一下用myisamchk 修复崩溃的mysql数据库表方法。
目前该方法适用于宝塔运维后台,其它平台仅供参考。

1.首先停止MYSQL

方法一:可以在宝塔运维面板后台直接关掉。
方法二:宝塔后台》打开SSH终端(当然要先登录终端)》输入:service mysql stop

2.找到MYSQL数据库文件目录。

注意:一般情况,MYSQL数据库文件目录:/var/lib/mysql/YOUR_DATABASE_NAME
但是,安装宝塔运维面板的MYSQL数据库文件目录:/www/server/data/YOUR_DATABASE_NAME
找到MYSQL数据库文件目录,加入要修复的数据库名称abc
那么,安装宝塔运维面板的,在SSH终端里面输入 cd /www/server/data/abc
然后SSH终端里面变成:[root@XXXX abc]#

这里特别注意的是,一定要找准你的数据库在哪个文件目录。

3.修复崩溃的mysql数据库表,如wordpress的表wp_posts

继续输入命令:myisamchk -r -o -f -v wp_posts

注意:一般情况下不要使用 -f 强制修复,-f 参数会在遇到一般修复无法成功的时候删除部分出错数据以尝试修复。所以,不到万不得已不要使用 -f。

4.修复成功所有的表之后,重启MYSQL

输入命令:start mysql.service

5.整个MYSQL修复流程操作参考

# service mysql stop
# cd /var/lib/mysql/databasename
# myisamchk -r tablename
MyISAM-table ‘tablename’ is not fixed because of errors
Try fixing it by using the –safe-recover (-o), the –force (-f)
option or by not using the –quick (-q) flag
# myisamchk -r -o -f tablename
Data records: 107435
Found block that points outside data file at 16166832
# service mysql start

5.再回phpmyadmin查看相关表是否还在”使用中”。

如果发现没有表在“使用中”,证明修复成功,可以考虑打开相关网站。

最后提供一下 myisamchk 相关命令使用方法

myisamchk支持下列选项:
-a, –analyze
分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。
-#, –debug=debug_options
输出调试记录文件。debug_options字符串经常是’d:t:o,filename’。
-d, –description
打印出关于表的一些信息。
-e, –extend-check
非常彻底地检查表。这仅在极端情况下是必要的。通常,myisamchk应该找出所有错误,即使没有改选项。
-f, –force
覆盖老的临时文件。如果你在检查表时使用-f (运行myisamchk没有-r),myisamchk在检查期间将自动为出现一个错误的表用-r重启。
–help
显示一条帮助消息并且退出。
-i, –information
打印有关被检查的表的信息统计。
-k #, –keys-used=#
与-r一起使用。告诉ISAM表处理器仅更新头#个索引。较高编号的索引被撤销。这能用来使插入变得更快!撤销的索引能通过使用myisamchk -r被重新激活。
-l, –no-symlinks
在修复时,不跟随符号连接。通常myisamchk修复一个符号连接所指的表。
-q, –quick
与-r一起使用使得一个修复更快。通常,原来的数据文件没被接触;你能指定第二个-q强制使用原来的数据文件。
-r, –recover
恢复模式。可以修复几乎所有一切,除非唯一的键不是唯一。
-o, –safe-recover
恢复模式。使用一个老的恢复方法;这比-r慢些,但是能处理一-r不能处理的情况。
-O var=option, –set-variable var=option
设置一个变量的值。可能的变量列在下面。
-s, –silent
沉默模式。当错误发生时,仅写输出。你能使用-s两次(-ss)非常沉默地做myisamchk。
-S, –sort-index
以从高到低的顺序排序索引树块。这将优化搜寻并且将使按键值的表扫描更快。
-R index_num, –sort-records=index_num
根据一个索引排序记录。这使你的数据更局部化并且可以加快在该键上的SELECT和ORDER BY的范围搜索。(第一次做排序可能很慢!) 为了找出一张表的索引编号,使用SHOW INDEX,它以myisamchk看见他们的相同顺序显示一张表的索引。索引从1开始编号。
-u, –unpack
解开一个用myisampack压缩的表。
-v, –verbose
冗长模式。打印更多的信息。这能与-d和-e一起使用。为了更冗长,使用-v多次(-vv, -vvv)!
-V, –version
打印myisamchk版本并退出。
-w, –wait
如果表被锁定,等待。
对–set-variable(-O)选项,可能的变量是:
key_buffer_size 当前值: 16776192
read_buffer_size 当前值: 262136
write_buffer_size 当前值: 262136
sort_buffer_size 当前值: 2097144
sort_key_blocks 当前值: 16
decode_bits 当前值: 9

myisamchk内存使用
当你运行myisamchk时,内存分配很重要。myisamchk使用不超过你用-O选项指定的内存量。如果你想在很大的文件上使用myisamchk,你首先应该确定你想要它使用多少内存。缺省仅使用大约 3M 来修复。通过使用更大的值,你能使myisamchk更快地操作。例如,如果你有多于32M内存,你能使用例如这些选项(除了任何你可能指定的选项):
shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M …
使用-O sort=16M应该可能对大多数情形就足够了。
必须明白,myisamchk使用在TMPDIR里面的临时文件。如果TMPDIR指向一个内存文件系统,你可能很容易得到内存溢出的错误。如果它发生,设定TMPDIR指向有更多空间的某个目录并且重启myisamchk。

表优化
为了组合成碎片的记录并且消除由于删除或更新记录而浪费的空间, 以恢复模式运行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

大多数情况下,也可使用命令OPTIMIZE TABLES优化并修复表,但是这不如myisamchk快或可靠(在真正的致命错误的情况下)。
另一方面,OPTIMIZE TABLE较易使用并且你不必须关心清空表。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


RECOMMENDED