数据库
首页 > 数据库> > 实战:MYSQL高级操作和崩溃维护

实战:MYSQL高级操作和崩溃维护

作者:互联网

       现在我们一般都使用mysql作为我们的数据库,主要原因是因为mysql是免费的,而且互联网公司也有能力处理mysql的问题。

       有用的话记得关注订阅我哦!这样你就能第一时间收到我更新的内容了!

       遇到实际的问题,比如你自己做的网站,一开始上线没什么数据量,也很少出问题,就算出问题,也好解决,但是随着网站运行的时间往后,数据量增多,而且你经常可能会重启服务器,但是你并没有遵循先关闭数据库,然后再重启服务器的操作,你直接重启了服务器,正常一般情况下问题不大,但是很多时候这往往会造成mysql数据表的异常,比如经常会出现:

Table is marked as crashed and should be repaire

         同时如果你有phpmyadmin的话,有问题的数据表会一直显示使用中,如图

        这个表一定是有问题了,造成的结果很严重,只要涉及到这些使用中的数据表的页面,全部都是一堆的报错,根本不在是你正常的页面了。你说问题严重吗?

        先知道是什么个情况,接下来我们再解决。 

        以下操作你最好有一个服务器,也好结合着研究实战一下,这都是我项目上遇到的难搞的问题,很棘手,到时候你的项目上线了,也很容易遇到。

       遇到问题不要怕,解决了就不是问题了。

      服务器的话,我这边自己主要用的是阿里云的,现在我手里有十多台,腾讯云那边也有三四台,反正这东西也不贵,你自己搞点啥都用的上,哪怕学习研究都行,很多公司现在也用,常规操作还是得会的。建议怎么着得搞一台,哪怕学习学习使用都行,也不贵。

      最好能去买一个,然后就可以边看边操作了,领个红包再去买服务器,便宜些,现在搞活动呢!

      我主要买阿里云的,腾讯云便宜我也买,你可以对比着买!

       阿里云限量红包,速领。

阿里云限量红包https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=v6vhcyn8     腾讯云新用户红包腾讯云优惠券_代金券_云服务器折扣券-腾讯云腾讯云优惠券,腾讯云代金券,腾讯云服务器折扣券icon-default.png?t=LA92https://cloud.tencent.com/act/vouchers/list?fromSource=gwzcw.2477393.2477393.2477393&utm_medium=cpc&utm_id=gwzcw.2477393.2477393.2477393&cps_key=b0c7af9380d6324294316347ba2c8a49

      阿里云最新活动最新活动_阿里云最新活动,阿里云最全的优惠聚集地https://www.aliyun.com/activity?userCode=v6vhcyn8     腾讯云最新活动

腾讯云11.11大促_腾讯云11.11优惠活动-腾讯云腾讯云推出11.11智惠云集活动:爆品秒杀,企业专享优惠,低至1折起;企业抽奖活动,100%中奖;免费领取11000元代金券!icon-default.png?t=LA92https://cloud.tencent.com/act/double11?spread_hash_key=3d5d628c89ca2247f5f05604d3ae5c3a&from=pre-2021double11     阿里云腾讯云所有优惠汇总信息

浅谈VPS云服务器(内含神秘大额专属特惠)_zhumengyisheng的博客-CSDN博客怎么做一个网站?都需要什么?要个服务器?要个域名?去哪里买?哪个好啊?有优惠吗?所有的优惠都在这里了,给自己建个网站吧,毕竟要学以致用啊!https://blog.csdn.net/zhumengyisheng/article/details/121391896      如果没有服务器的话,也可以先看看,或者自己想办法,看看怎么模拟一下。

       即使你不知道这是怎么造成的,但你应该清楚,你的数据表肯定是出现异常了,这有可能是因为重启操作的时候数据表还在写入数据,但是你没有关闭mysql,直接关机造成了数据写入异常,总之需要修复,那么如何修复呢?

       最简单的办法,你可以去下载一个phpmyadmin,或者集成包,比如wampserver安装一下,这东西就是windows下的apache、mysql、php的服务环境,所以linux下面我们自然称之为lamp,你明白l是什么吧?linux嘛!w就是windows。

       如果使用phpmyadmin的话,不要在服务器上去装,你可以在你电脑上直接安装wampserver的集成环境,或者你单独装phpmyadmin,当然这需要你把PHP的环境弄起来,phpmyadmin就是一个管理mysql的在线工具,你把这个东西装在你自己的电脑上,然后直接去连接服务器上的mysql就可以了。

       wampserver集成环境中phpmyadmin默认的用户名是root,默认密码为空。

       问题来了,phpmyadmin如何连接服务器上的mysql数据库呢?

       如果你使用wampserver的集成环境的话,安装的时候尽可能选择默认安装,不要更改默认,不然容易引起问题。在C:\wamp64\apps\phpmyadmin4.6.4这个目录下有一个config.inc.php和config.sample.inc.php文件,这就是配置mysql服务器连接的文件。

      修改这个配置文件里面的配置参数,就可以选择连接服务器上的mysql了,你闭着眼睛也知道,大概是哪些参数,无非是三个参数嘛,一个你mysql服务器的地址,一个mysql的用户名,最后一个mysql的密码,修改这三个参数就可以了。

       实例如下:其中config.inc.php文件做如下修改

 然后再将config.sample.inc.php的地址也改一下。

         此刻你应该已经可以通过phpmyadmin在线工具去连接你的mysql服务器了。

       输入你服务器mysql的用户名和密码即可连接上你服务器上的mysql数据库。

       此处有可能连接不上,报2002错误,这都很正常,不要怕,连不上肯定是有原因的嘛!

        一般主要检查两个原因:

        第一:你登陆的用户权限问题,是不是允许你当前这个用户远程访问数据库?这个你需要去确认mysql数据库用户的权限,得去服务器上查一下,如果当前用户是%的权限,那么就可以远程登陆,不然的话这个用户就不允许远程访问,你自然登陆不进去,不过一般自己用的都会开着。

        第二:你的防火墙规则,如果你用云服务器的话,就是所谓的安全组规则,这个东西就是防火墙,你需要允许通过,不然防火墙过不去,自然连不上,自然登陆不上。实例如图:

        你需要添加你的ip进去,或者改成通用的0.0.0那个,所有的都可以了。

        通过以上的操作我们终于登陆进去了,并且成功的连上了mysql数据库。 

 打开你的phpmyadmin,你会发现有问题的数据表显示的是使用中,不再是你平时看到的那个样子

       即使你再怎么不懂,你也能知道,这个使用中可不是什么好事,这明显是有问题啊!同时,你去访问你的网站的时候,只要涉及到这些表的页面,一定是报错的,一定是表损坏,报一堆错误,不是你每天看到的正常页面那个样子了。 

        到了现在我们刚刚能通过phpmyadmin连接上mysql数据库,而且看到了有些数据表有问题了,它们一直处于使用中,那怎么解决呢?

        这也是为什么我要你用phpmyadmin的原因,这个问题一般很好解决,一般很好解决,尤其是数据量小的时候,很好解决。

      很简单,你可以选中你使用中的那些表,或者干脆全选都行,最好全选吧,然后做四个操作。

       检查表------分析表-------修复表------优化表。 

       这里面最起作用的就是修复表,但是既然都到这了,我们干脆把这些操作都做了,有问题解决问题,没问题也事先优化,所以我建议这四个维护全部都点一遍,但是你可千万别手贱,点删除表。

点了删除就自己哭会吧,如果是公司项目,万一再没有备份......,那等着离职吧!所以,要谨慎。

       一般情况下,尤其是数据量较小的表,那么问题就解决 ,你再去看数据表都正常了,页面也正常了,一切都正常了。

      但是既然有一班,那自然就能有二班。你把那些都点了,告诉你修复失败了,原因可能是因为数据量太大了,或者很多其他原因,不一定能修复成功。同时你大概会看到这样的东西。

Table ‘xxx‘is marked as crashed and last (automatic) repair failed

       修复失败了,那怎么办呢?你也不用再去尝试了,只要一次不成功,那么之后基本成功不了,得换一种方式了。

       这种方式需要登陆你的服务器去操作,我这里使用的是centos服务器,一般都是远程登陆服务器嘛,具体操作你应该会吧?找到你mysql的数据文件目录:

      centos默认的话,一般在这个位置:/var/lib/mysql/你的数据库名称,其他的你改过的话,你应该知道位置,然后进到你的数据库名称目录里面去,你会看到一堆的文件:

 如果你不懂这些文件是什么东西,那我现在告诉你:前面那个dis_it618_ad_sale自然是数据表的名称,你在phpmyadmin里面应该会看到一张dis_it618_ad_sale这样的数据表,那么这张数据表实际的存储就是这三个文件。

明明是一张表,那为什么是三个文件呢?这三个文件都是什么意思呢?

       看到这个excel表了吗?它有几个要素?是不是有产品、第一季度、第二季度这种表头和里面的巧克力、数字这种数据?所以这就构成了两个文件。

    FRM文件就是表头,一般很小,就是先定义下来这个表的表头,就是产品、第一季度这种。

    MYD是什么?D是data,明白了吧?所以这个就是里面的数据文件,这个必然是最大的,都是数据嘛。

     那么那个MYI是什么东西呢?你想数据表里面数据是很多的,可能会有几百万行,那你要找个数据得去查几百万行?那效率得多低?那么怎么高速的查询出来你要的数据呢?你看汉语字典,里面有六万多汉字,你要查你要的汉字,你难道是去看六万多个字一个个找?必然不是啊,有个什么东西帮助你?

     偏旁查字法,部首查字法,你是不是靠着这些东西啊?那么数据表也是一样啊,那几百万个数据,挨个查还不废了?所以要建个索引,就像部首那种东西,差部首就好了,然后就锁定位置了。你现在明白了吧?数据库也需要一个偏旁部首的那种东西,这就是索引,然后通过索引就能快速定位你要查的数据。

      所以,MYI就是数据表的索引文件。

      既然索引这么有用,那是不是全部加上?每个表头字段都加上,多好,全部搞上,多块?其实也不是这样的,它有一些规则的,你想嘛,索引是要占个文件的,就是MYI文件嘛,那你每次加一行数据减一行数据的,那个索引文件也得写个东西进去,这样是不是很麻烦?所以,一般我们说如果数据表以写入操作为主,那么就不要加索引了,加索引反而麻烦,如果查询为主,那毫无疑问自然要加上索引。索引怎么加呢?一般是where查询条件后面的字段酌情加。可以去看看索引添加规则。

      一般数据库常见的优化就是加索引,这和字典加上部首是一样的,对查询的效率提升是百倍级别以上的,尤其是数据量大的时候,提升一百倍的查询速度你想想是什么效果?

     补充了点数据库的知识,现在你认识到了这几个文件是干嘛的,那么一张数据表就对应着上面的三个文件,或者说它至少得有两个文件,一个FRM表头文件,一个MYD数据记录文件,这是必须的,MYI索引文件不一定有,但是你会神奇的发现:

     处于使用中的那些表它们居然只有一个FRM文件,连MYD数据记录文件都没有。

     现在我们回到之前的问题:phpmyadmin修复失败了怎么办?

     现在我们登陆到了服务器上的/var/lib/mysql/你的数据库名称/数据表文件。这里面都是一堆的frm、MYI、MYD文件,就是数据表文件嘛,在这个目录下执行一个命令,比如是你的dis_it618_ad_sale这个表是使用中,那么一定在数据库目录下面执行:

myisamchk -r -q dis_it618_ad_sale

就可以了,执行结果就是输出一堆的fixing index1什么之类的。

       执行的结果一般一般是这样的:

[root]# myisamchk -r -q dis_it618_ad_sale
- recovering (with sort) MyISAM-table 'dis_it618_ad_sale'
Data records: 1781
- Fixing index 1
- Fixing index 2
- Fixing index 3

        执行完成之后,一般问题就解决了,你通过phpmyadmin去查看,原来在使用中的这个dis_it618_ad_sale数据表正常了,并且相关的页面也都可以正常访问了,皆大欢喜。

      但是生活哪有一帆风顺的,哪能万事如意?你很可能白欢喜一场,因为你很快就会发现,我了个草,怎么又来?你发现没过多长时间,不到半小时,数据表又废了,相关的页面又崩溃了,你的那些数据表又变成使用中了。

      生活怎么这么难?这都折腾了几趟了?怎么还没完没了了?

       怎么办啊?我们都折腾这么久了,但是这问题依然在那,就像个灾难片,今儿过不去了。

       你还在线上呢?你说这个时候难不难?怎么搞哦!一个头两个大啊!

       只剩下最后的一招了,还是在数据表文件那个目录下面,执行:myisamchk -r -f dis_it618_ad_sale.MYI

myisamchk -r -f dis_it618_ad_sale.MYI

        当然,这些操作,你如果可以,最好在本地执行没有问题之后,再去服务器上操作,还得有备份,服务器操作,虽不能确保万无一失,但是却一定要做好防灾机制,避免造成不可挽回的局面,这是作为一个成熟的程序员必备的常识,如果你不想删库跑路的话。

       我们刚才说那个MYI是索引文件,这好像就是在修复索引文件,但是在使用中的时候,那个表我们只看到了FRM表头文件,其他的都没有,而且你都无法导出这个表的SQL,表都是坏的,什么操作都执行不了,目前只有这个方法有效,你说导出SQL它是导不出来的,它的MYD,MYI文件都没有,或者说不在这个目录下,你找都找不到,又怎么去弄出来?

       好了,以上就是本文的全部内容了,我们介绍了mysql数据库的一些操作,同时线上运行过程中出现了问题,我们该怎么解决,经过我们不懈的努力,最终总算是将出问题崩溃的数据表抢救了回来,你想想这种问题多么可怕?

      那是一堆线上运行的正式数据,你敢删掉吗?如果是金融数据呢?那就是客户的钱,你也敢删掉?那客户不得砸你们的门来?你只能想尽办法恢复,这是你唯一的出路。

      欢迎关注订阅我!

       如果你要学习计算机编程知识,也欢迎看看我之前写的文章:

      态度篇(这是我唯一希望你认知到的东西,你可以什么都忘了,但态度得端正。)

      为什么985高校还是在上C语言?这难道不是大学教育的失败?

为什么现在985高校还是上C语言课?_zhumengyisheng的博客-CSDN博客现在工作它们不都在找java、PHP、golang之类的吗?可是为什么985大学了居然还在教学生古老的C++啊?这不是误人子弟?这难道不是大学教育的失败?https://blog.csdn.net/zhumengyisheng/article/details/121391642       计算机那么好,为什么计算机专业出身的很多计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了? 

计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?_zhumengyisheng的博客-CSDN博客计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?为什么挤破头都抢不上的计算机专业,毕业工资那么高,分分钟年薪几十万,那他们为什么要转行呢?这里面到底有什么不为人知的秘密?到底是什么想不开让他们放弃了如此大好钱程前程?https://blog.csdn.net/zhumengyisheng/article/details/121391821

学习篇

编程语言第一课 入门 程序员的道与术

程序员的道与术_zhumengyisheng的博客-CSDN博客什么样的程序员才是好的程序员?程序开发学习到底是在学什么?你适合学习程序开发吗?编程语言众多,如果要学习我到底该学习哪一种?程序员的道与术,讲述那些不为你知的秘密https://blog.csdn.net/zhumengyisheng/article/details/121391210编程语言第二课 晋级 不忘初心 方得始终   

不忘初心,方得始终_zhumengyisheng的博客-CSDN博客难道我们学习程序就是学一堆一堆的框架吗?难道学习程序就是学一堆一堆的套路?如果不是,那我们到底又该学什么?程序的本质又是什么?本文将给你答案https://blog.csdn.net/zhumengyisheng/article/details/121391458编程语言第三课 深入 想法也疯狂,创造一门语言 

想法也疯狂--创造一门语言_zhumengyisheng的博客-CSDN博客开天辟地走一遭学了那么多语言,敢不敢挑战一次自己,创造一门语言?语言从来都不是天生的,它们都是人写出来的,既然别人能写,那你能不能写?如果要创造一门语言,那么到底该怎么创造?https://blog.csdn.net/zhumengyisheng/article/details/121391567 我永远有句话送给你:

教程从来都不是最重要的东西,最重要的是你的学习态度。

认真学习,刻苦专研,严谨求知的态度,坐的了冷板凳,强大的肾功能,最后再乘以时间,后积才能薄发。从来都是:

台上一分钟,台下十年功。

哪个行业里那些拿高薪的人不是如此?没有人可以随随便便成功。

全文完。

 

     

标签:实战,文件,phpmyadmin,MYSQL,数据表,索引,mysql,服务器,崩溃
来源: https://blog.csdn.net/zhumengyisheng/article/details/121471497