您的位置:首页 > 数据库 > MySQL

记一次mysql数据库备份引起的风波

2012-11-28 20:27 204 查看
前几日闲着无事,正练习着几个简单的linux命令,平时图形用户界面操作惯了,这真要转到命令行下还真不太适应。突然想到自己管理的那个linux服务器上的一个主要网站的mysql数据库有半年没备份了,正好练习下。

说干就干,cd命令进入目标目录,输入:zip -r ./XXX.zip ./* 一阵滚屏后,SecureCRT亲切地反馈命令执行完成。然后自然而然sz命令了,下载完成后,在本地搭建的服务器上测试了下,数据正常,便把数据包扔进了自己电脑的备份目录,OK!

马上就要期末考试了,平时没怎么上过课,课后没怎么认真做作业的我表示十分慌张,没办法,老老实实自习吧!今天正在一教自习着,手机响了。拿出来一看,是原来部门的一个干事(当然现在是干部了)打来的。看到这小子打来电话我就觉得没好事,果不其然,第一句就问在电脑旁没。我问什么事情,他说一个学生在管理网站后台时不小心把一个栏目下的文章全给删掉了!!!我勒个去!这该是一个什么样的操作啊!恢复那些文章肯定是不行的了,还好,哥有备份,嘿嘿!我便答应他回去处理一下,当然,小干事的态度是很好的,我便又趁机鼓励、批评教育了他一番,过了一把学长瘾~

废话少说,进入正题。回到寝室,打开那个网站,发现那个原本有近千条新闻的栏目下只有几十条最近的新闻了,看来是犯了错怕被骂,赶紧补上几十条暂时瞒天过海吧!根据平时的经验,因为这个网站的所有新闻都放在了一个表里(这个数据库的设计者真是个渣!),不太好区分,又加上我嫌麻烦,便直接K掉了那个数据库,然后把前几天备份的上传上去。本以为万事大吉,再次打开网站,我擦!提示SQL语句出错!我晕,这本地的网站和服务器上的是一模一样的啊,平时用的好好的,怎么今天就不行了呢?抱着怀疑的态度,我登录上phpmyadmin,咦,数据库、表什么的都在啊,随便点进去一个表,访问OK。当点击到那个出问题的表时,问题来了:phpmyadmin提示can't
find xxx.frm……我纳闷了,其他表正常,为啥这个表会提示文件找不到呢?为了确认是真的找不到,便cd进去对应目录,尼玛,这个文件好好的在文件夹里躺着!真的是“躺着”也中枪啊!

我又随手点开了其他的表,发现有几个表出现了这个问题,大部分表是正常的。在仔细一看,发现在这些无法访问的表栏目里显示着“使用中”三个字,我想会不会就是这个问题呢? 带着疑问上网 一搜,看到有人说修复表可能解决问题,好吧,修复就修复吧,可这修复功能在哪呢?找了好半天才发现它藏在了一个下拉框里!勾选那几个出问题的表,然后修复,可问题依旧!

再上网寻觅了 一番,发现有人说可能是权限的问题,即mysql没有访问那些表的权限,那人还提供了几条命令:chown -R root /usr/local/mysql5/var。照着敲进去,运行后,重启 mysql,我擦!!!mysql直接躺着不肯起来了!!!顺便嘟哝了一句看不懂的英语。OK,有问题,找度娘!直接复制这条错误代码,百度立马就找到了相关文章,真不愧是度娘啊!点进去一看,说是要删除mysql数据目录下的mysq-bin.index文件,你让我删我就删,kill掉然后再次重启,这下mysql乖乖启动了,可还是没能解决问题,再刷新phpmyadmin,想死的心都有!除了mysql的系统数据库和极个别数据库,大部分数据库直接显示表数目为0!

这下我慌了!感觉捅出大篓子来了!其他数据库我可从来没备份过啊,这下全没了,我到哪哭去?随手进入一个数据库的目录,想看看是不是真的不在了,ls一下,晕,这不好好在这嘛!看来数据没有被删除,应该还是老问题。这时我发现phpmyadmin已经没有用武之地了,干脆自己动手,手动进入mysql环境,先show database,发现数据库好好的都出现了,再use 一下 那个表消失的数据库,提示:

Mysql Error:1018:can't read dir of XXX

老规矩,复制粘贴问度娘。一番查找后在百度空间看到了一篇帖子说这个问题,上面解释说是数据库的属主不对,使用chown命令为mysql赋权即可。我想刚刚不是赋过一次了吗?好吧,再来一次。为了不打错命令,我仔细对比了一下,上面那条命令是chown -R root /usr/local/mysql5/var,而这条是chown -R mysql:mysql /usr/local/mysql/var,果然命令不对,上面那条是把数据库的属主设置为root,下面这条才是设置为mysql,看来文件就在这里,我重新输入了一下这条新命令,然后重启mysql,抱着忐忑不安的心理访问网站,我的天,竟然奇迹般的好了!!!

折腾了我一个多小时,问题终于解决,心里那个激动啊!下面来总结一下:

1、罪魁祸首就在于我那天备份数据库的时候没有先停止mysql服务,在数据库中的某几个表正在使用时进行备份,导致出现了上面所说的”使用中“和can't find XXX.frm 的故障。

2、不要轻易使用网上提供的命令,最好能找到其他也是使用这个命令解决问题的类似帖子,能确认一下,不然对于我们这种命令菜鸟来说,一旦操作出了问题,想再恢复就难了,还好今天使用的命令都没造成什么大问题。

3、mysql目录下一大堆mysql-bin.0000X文件,如果不占用太大的空间,不太影响性能,最好不要轻易删除,就我所知,这个可用来做数据恢复的,今天看来还有别的用处啊。像今天出现的多个数据库表数目为0的问题,就是因为我轻易删掉了这些东西!

4、要养成数据备份的好习惯,像我这个例子,还好我之前备份了数据库,不然真得把数据恢复到半年前,估计要被老师骂死!手动重发那些通知,不得累死啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: