ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-11-22 17:30:00  阅读:236  来源: 互联网

标签:实战 文件 phpmyadmin 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有