① Linux 如何修复损坏的MySQL数据库
由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题。MySQL分别针对不同的数据表类型提供了多个数据检测恢复工具,这些工具是:myisamchkisamchk其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用: myisamchk tablename.MYI 进行检测,如果需要修复的话,可以使用: myisamchk -of tablename.MYI 关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。 另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前: [ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI 其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。 需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!
② 如何修复MySQL数据库表
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时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.php 找到$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
分析:这个提示和问题三是不同的。那个是在连接数据库的时候就被阻止了,而这个错误是在对数据库进行操作时引起的。比如在select update等等。这个是因为该用户没有操作数据库相应的权力。比如select 这个操作在mysql.user.Select_priv里记录 Y 可以操作N 不可以操作。
解决:如果是自己的独立主机那么更新mysql.user 的相应用户记录,比如这里要更新的用户为red 。或者直接修改 ./config.inc.php 为其配置一个具有对数据库操作权限的用户
或者通过如下的命令来更新授权grant all privileges on dbname.* to ‘user’@’localhost’ identified by ‘password’
提示:更新了mysql库中的记录一定要重启mysql服务器才能使更新生效
FLUSH PRIVILEGES;
五、No Database Selected
翻译:没有数据库被选择上
分析:产生的原因有两种
config.inc.php 里面$dbname设置的不对。致使数据库根本不存在,所以在 $db->select_db($dbname); 时返回了false
和上面问题四是一样的,数据库用户没有select权限,同样会导致这样的错误。当你发现config.inc.php的设置没有任何问题,但还是提示这个错误,那一定就是这种情况了。
解决:对症下药
打开config.inc.php 找到$dbname核实重新配置并保存
同问题四的解决方法
六、Can’t open file: ‘xxx_forums.MYI’. (errno: 145)
翻译:不能打开xxx_forums.MYI
问题分析:
这种情况是不能打开 cdb_forums.MYI 造成的,引起这种情况可能的原因有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方法:
1、修复数据表
可以使用下面的两种方式修复数据表:(第一种方法仅适合独立主机用户)
1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL/bin 下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:myisamchk -r 数据文件目录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上两种修复方式在执行前一定要备份数据库。
④ 镐庢牱淇澶峬ysql琛
澶氭暟𨱍呭喌涓,鏁版嵁搴撹镰村潖鍙鏄鎸囩储寮曟枃浠跺弹鍒颁简镰村潖,鐪熸g殑鏁版嵁琚镰村潖鎺夌殑𨱍呭喌闱炲父灏戙傚ぇ澶氭暟褰㈠纺镄勬暟鎹搴撶牬鍧忕殑镄勪慨澶岖浉褰撶亩鍗曘
鍜屽墠闱㈢殑镙¢獙涓镙,淇澶岖殑鏂瑰纺涔熸湁涓夌嶃
涓嬮溃璁茬殑鏂规硶鍙瀵筂yISAM镙煎纺镄勮〃链夋晥銆傚叾浠栫被鍨嬬殑鎹熷潖闇瑕佷粠澶囦唤涓鎭㈠嶃
1,REPAIR TABLE SQL statement(mysql链嶅姟蹇呴’澶勪簬杩愯岀姸镐)銆
2,锻戒护mysqlcheck(mysql链嶅姟鍙浠ュ勪簬杩愯岀姸镐)銆
3,锻戒护myisamchk(蹇呴’锅沧帀mysql链嶅姟,鎴栬呮墍镎崭綔镄勮〃澶勪簬涓嶆椿锷ㄧ姸镐)銆
鍦ㄤ慨澶嶈〃镄勬椂鍊,链濂藉厛浣滀竴涓嫔囦唤銆傛墍浠ヤ綘闇瑕佷袱鍊崭簬铡熷嬭〃澶у皬镄勭‖鐩樼┖闂淬傝风‘淇濆湪杩涜屼慨澶嶅墠浣犵殑纭鐩樼┖闂磋缮娌℃湁鐢ㄥ畬銆
1>鐢ㄢ漴epair table钬濇柟寮忎慨澶
璇娉:repair table 琛ㄥ悕 [阃夐”]
阃夐”濡备笅:
QUICK 鐢ㄥ湪鏁版嵁琛ㄨ缮娌¤淇鏀圭殑𨱍呭喌涓,阃熷害链蹇
EXTENDED 璇曞浘铡绘仮澶嶆疮涓鏁版嵁琛,浼氢骇鐢熶竴浜涘瀮鍦炬暟鎹琛,涓囱埇镞犲堢殑𨱍呭喌涓嬬敤
USE_FRM 鐢ㄥ湪.MYI鏂囦欢涓㈠け鎴栬呭ご閮ㄥ弹鍒扮牬鍧忕殑𨱍呭喌涓嬨傚埄鐢.frm镄勫畾涔夋潵閲嶅缓绱㈠紩
澶氭暟𨱍呭喌涓,绠鍗曞缑鐢ㄢ漴epair table tablename钬濅笉锷犻夐”灏卞彲浠ユ闷瀹氶梾棰樸备絾鏄褰.MYI鏂囦欢涓㈠け鎴栬呭ご閮ㄥ弹鍒扮牬鍧忔椂,杩欐牱镄勬柟寮忎笉绠$敤,渚嫔:
mysql> REPAIR TABLE mytable;
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
| Table | Op | Msg_type | Msg_text |
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
| sports_results.mytable | repair | error | Can钬檛 find file: 钬榤ytable.MYI钬 (errno: 2) |
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
淇澶嶅け璐ョ殑铡熷洜镞剁储寮曟枃浠朵涪澶辨垨钥呭叾澶撮儴阆鍒颁简镰村潖,涓轰简鍒╃敤鐩稿叧瀹氢箟鏂囦欢𨱒ヤ慨澶,闇瑕佺敤USE_FRM阃夐”銆备緥濡:
mysql> REPAIR TABLE mytable USE_FRM;
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺+
| Table | Op | Msg_type | Msg_text |
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+钬斺斺斺斺斺斺斺-+钬斺斺+钬斺斺-+钬斺斺斺斺斺斺斺斺斺斺斺+
鎴戜滑鍙浠ョ湅鍒癕sg_test琛ㄩ”镄勮緭鍑轰俊鎭钬漮k钬,琛ㄥ悕宸茬粡鎴愬姛淇澶嶅弹鎹熻〃銆
2>鐢╩ysql鍐呭缓锻戒护mysqlcheck𨱒ヤ慨澶
褰搈ysql链嶅姟鍦ㄨ繍琛屾椂,涔熷彲浠ョ敤mysql鍐呭缓锻戒护mysqlcheck𨱒ヤ慨澶嶃
璇娉:mysqlcheck -r 鏁版嵁搴揿悕 琛ㄥ悕 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK
鍒╃敤mysqlcheck鍙浠ヤ竴娆℃т慨澶嶅氢釜琛ㄣ傚彧瑕佸湪鏁版嵁搴揿悕钖庡垪鍑虹浉搴旇〃钖嶅嵆鍙(鐢ㄧ┖镙奸殧寮)銆傛垨钥呮暟鎹搴揿悕钖庝笉锷犺〃钖,灏嗕细淇澶嶆暟鎹搴扑腑镄勬墍链夎〃,渚嫔:
%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
3>鐢╩yisamchk淇澶
鐢ㄨ繖绉嶆柟寮忔椂,mysql链嶅姟蹇呴’锅沧帀,鎴栬呮墍镎崭綔镄勮〃澶勪簬涓嶆椿锷ㄧ姸镐(阃夐”skip-external-locking娌¤浣跨敤)銆傝扮潃涓瀹氲佸湪鐩稿叧.MYI鏂囦欢镄勮矾寰勪笅鎴栬呰嚜宸卞畾涔夊叾璺寰勚
璇娉:myisamchk [阃夐”] [琛ㄥ悕]
涓嬮溃鏄鍏堕夐”鍜屾弿杩
钬揵ackup, -B 鍦ㄨ繘琛屼慨澶嶅墠浣灭浉鍏宠〃寰楀囦唤
钬揷orrect-checksum 绾犳f牎楠屽拰
钬揹ata-file-length=#, -D # 閲嶅缓琛ㄦ椂,鎸囧畾鏁版嵁鏂囦欢寰楁渶澶ч暱搴
钬揺xtend-check, -e 璇曞浘铡绘仮澶嶆疮涓鏁版嵁琛,浼氢骇鐢熶竴浜涘瀮鍦炬暟鎹琛,涓囱埇镞犲堢殑𨱍呭喌涓嬬敤
钬揻orce, -f 褰挞亣鍒版枃浠跺悕鐩稿悓镄.TMD鏂囦欢镞,灏嗗叾瑕嗙洊鎺夈
keys-used=#, -k # 鎸囧畾镓鐢ㄧ殑keys鍙锷犲揩澶勭悊阃熷害,姣忎釜浜岃繘鍒朵綅浠h〃涓涓猭ey.绗涓涓猭ey涓0
钬搑ecover, -r 链甯哥敤镄勯夐”,澶у氭暟镰村潖閮藉彲浠ラ氲繃瀹冩潵淇澶嶃傚傛灉浣犵殑鍐呭瓨瓒冲熷ぇ,鍙浠ュ炲ぇ鍙傛暟sort_buffer_size镄勫兼潵锷犲揩鎭㈠岖殑阃熷害銆备絾鏄阆囧埌鍞涓阌鐢变簬镰村潖钥屼笉鍞涓 镄勮〃镞,杩欑嶆柟寮忎笉绠$敤銆
钬搒afe-recover 锛峯 链褰诲簳镄勪慨澶嶆柟寮,浣嗘槸姣-r鏂瑰纺鎱,涓鑸鍦-r淇澶嶅け璐ュ悗镓崭娇鐢ㄣ傝繖绉嶆柟寮忚诲嚭 镓链夌殑琛,骞朵互琛屼负锘虹𨱒ラ吨寤虹储寮曘傚畠镄勭‖鐩樼┖闂撮渶姹傛瘆-r鏂瑰纺绋嶅井灏忎竴镣,锲 涓哄畠娌″垱寤哄垎绫荤紦瀛樸备綘鍙浠ュ炲姞key_buffer_size镄勫兼潵锷犲揩淇澶岖殑阃熷害銆
钬搒ort-recover, -n mysql鐢ㄥ畠绫诲垎绫荤储寮,灏界$粨鏋沧槸涓存椂鏂囦欢浼氶潪甯稿ぇ
钬揷haracter-sets-dir=钬 鍖呭惈瀛楃﹂泦璁剧疆镄勭洰褰
钬搒et-character-set=name 涓虹储寮曞畾涔変竴涓鏂扮殑瀛楃﹂泦
钬搕mpdir=path, -t 濡傛灉浣犱笉𨱍崇敤鐜澧冨彉閲庑MPDIR镄勫肩殑璇,鍙浠ヨ嚜瀹氢箟涓存椂鏂囦欢镄勫瓨鏀句綅缃
钬搎uick, -q 链蹇镄勪慨澶嶆柟寮,褰撴暟鎹鏂囦欢娌℃湁琚淇鏀规椂鐢,褰揿瓨鍦ㄥ氶敭镞,绗浜屼釜-q灏嗕细淇鏀 鏁版嵁鏂囦欢
钬摇npack, -u 瑙e紑琚玬yisampack镓揿寘镄勬枃浠
myisamchk搴旂敤镄勪竴涓渚嫔瓙
% myisamchk -r mytable
- recovering (with keycache) MyISAM-table 钬榤ytable.MYI钬