
有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如
检查优化并修复所有的数据库用:
#mysqlcheck-A-o-r-p
Enterpassword:
database1OK
database2OK
----------
修复指定的数据库用
#mysqlcheck-A-o-rDatabase_NAME-p
即可
另外如果只是对某个表进行修复可以用:myisamchk或isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchktablenameMYI
进行检测,如果需要修复的话,可以使用:
myisamchk-oftablenameMYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
另外可以把下面的命令放在你的rclocal里面启动MySQL服务器前:
[-x/tmp/mysqlsock]&&/pathtochk/myisamchk-of/DATA_DIR//MYI
其中的/tmp/mysqlsock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysqlsock,对于使用源码安装则是/tmp/mysqlsock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
1,简单的修复模式
myisamchk-r-qpath/数据库/坏表MYI
注:-r----恢复模式-q----快速修复
2,使用安全修复模式
myisamchk--safe-recoverpath/数据库/坏表MYI
3,困难的修复模式
如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段。在这种情况下,创建一个新的索引文件是必要的。按如下这样做:
把数据文件移更安全的地方。
使用表描述文件创建新的(空)数据和索引文件:
shell>mysqldb_name
mysql>DeleteFROMtbl_name;
mysql>quit
将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。)
回到阶段2。现在myisamchk-r-q应该工作了。(这不应该是一个无限循环)。
4,非常困难的修复模式
只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。
从一个备份恢复描述文件并且回到阶段3。你也可以恢复索引文件并且回到阶段2。对后者,你应该用myisamchk-r启动。
如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的数据库中。这给了你新的描述和索引文件,但是让数据文件独自留下来了。回到阶段2并且尝试重建索引文件。
5,优化表结构
myisamchk-r表
也可以使用sql语句来优化OPTIMIZETABLE
本方法参考自mouse博客
运行mysqlserver脚本,mysqlserver脚本通过调用mysqld_safe启动服务器,该脚本可以通过参数start和stop指定启动还是关闭。mysqlserver脚本在MySQL安装目录下的share/mysql目录中,如果是采用源码安装的MySQL,则可以在support-files目录里找到。如果想使用mysqlserver,则必须把它复制到合适的运行级别目录中。
如上配置之后,就可以利用以下命令启动和关闭MySQL实例。
执行命令:
service
mysqld
start就启动了。
不是数据表问题,应该是你的fat32格式问题,fat32只支持4g以下单个文件,如果你数据库超过了4g,就不行了。也可能是你设置的数据文件限制大小了。
解决办法两个,1,fat32转ntfs
2,真的是数据满了话,设置第二数据文件,数据库的文件不是唯一的。你建立数据文件的时候就可以设置多个。
分析:这是典型的socket没有正确设置的情况。
连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127001,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127001也是分开设置的。当设置为127001时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。
解决:首先要看本机MySQL的socket套接字文件在哪里,查看命令是:
mysqld --verbose --help | grep socket
输出结果显示套接字文件的位置,比如:这台服务器显示的是
socket /var/run/mysqld/mysqldsock
然后修改php的配置文件phpini与之对应起来就好了。
找到这一项:
mysqldefault_socket =
一般来说这一项都是空的,改成:
mysqldefault_socket = /var/run/mysqld/mysqldsock
这里应写上一步查询到的文件,根据你的情况设置。至此php配置就修改好了,如果是CLI(命令行)方式或者CGI方式的话,立即就生效,如果是FASTCGI方式,需要重启一下fastcgi进程。
1、先检查MYSQL服务是否正常启动;
2、MYSQL主机IP最好设为localhost,不允许远程链接;
3、删除可远程链接的用户账号,删除默认的可外部链接的空用户,给所有账号设置密码。
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES),是数据库错误造成的,解决方法如下:
1、首先需要更改root的权限远程的访问的权限,进行进入到自己数据库之后,进入mysql数据库中:use mysql。
2、进行执行update user set host='%' where user='root' 的命令进行执行。
3、执行了相关的命令之后,还是需要进行执行的flush privileges的命令。
4、还需要进行修改的是在etc/sysconfig/selinux进行编辑SELINUX=disabled中。
5、设置完成之后还是需要进行重启Linux,在访问之后,不再显示错误的内容。
wamp5不能正常启动有很多原因,我现在分享下我遇到的,希望对你有帮助!
1检查安装目录是不是英文目录,不能出现中文哦!
2检查80端口,这个就不详细讲了,这个百度多的是。
3最近遇到的一个就是,我之前能启动,不知道为什么突然就mysql 启动不了啦,这个你的看进程mysqld-ntexe看这个是不是在运行,如果在,就结束他,然后重启,如果还不成功,再在进程中关闭它,直达能启动为止,
如果不是这些原因的话,那再 去找找吧,很多原因会导致启动不了的
以上就是关于数据库损坏了怎么办全部的内容,包括:数据库损坏了怎么办、centos7安装好mysql数据库 系统为何打不开了、mysql数据库的数据表瀑了,怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)