辛勤劳动的蜜蜂 发表于 2014-12-03 15:23

一次数据库备份的血泪史

唉,一次不够细心导致朋友的一个网站MySQL数据全没了。所谓吃一堑长一智,所以想想还是写篇文章提醒一下周边的小伙伴们。本着治病救人,药到根除的一贯方针,多多决定从MySQL常识开始讲。

数据库文件介绍

MySQL的每个数据库都对应着一个与数据库同名的文件夹。另外,完整的数据库文件由以下两个部分组成:

第一部分:MySQL所建数据库文件

后缀为.frm的文件:存储数据表的框架结构,文件名与表名相同,每个表对应一个同名frm文件,与操作系统和存储引擎无关,即不管MySQL运行在何种操作系统上,使用何种存储引擎,都有这个文件。

第二部分:MySQL所用存储引擎创建的数据库文件,存储引擎会创建各自不同的数据库文件。根据MySQL所使用的存储引擎的不同(常用的存储引擎是MyISAM和InnoDB)

1、MyISAM数据库表文件包括(MYD文件:即MY Data,表数据文件; .MYI文件:即MY Index,索引文件; .log文件:日志文件)

2、InnoDB数据库文件包括(ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用; .ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引; 日志文件: ib_logfile1、ib_logfile2)

MySQL数据库存放位置

1、MySQL如果使用MyISAM存储引擎,数据库文件类型就包括.frm、.MYD、.MYI,默认存放位置是/var/lib/***sql/data/你的数据库名(我用的ubuntu),注意:MyISAM是默认的引擎。

2、MySQL如果使用InnoDB存储引擎,数据库文件类型就包括.frm、ibdata1、.ibd,存放位置有两个,.frm文件默认存放位置是/var/lib/***sql/data/你的数据库名,ibdata1、.ibd文件默认存放位置是/var/lib/***sql/data。

PS: 看到没有,MyISAM只要备份一个与数据库同名的目录就行了,而InnoDB还要额外备份ibdata1、ibd文件。(这也正是我的悲剧点,呜呜呜~~~~)。

备份血泪史

因为默认的引擎就是MyISAM,当朋友让我备份时,我想都没想就是直接备份了MySQL里data目录下与数据库名相同的目录,后来恢复时才发现原来朋友用的是InnoDB引擎,悲剧就这么产生了,唉!

经验教训

备份数据时,千万一定要提前查看备份数据库是什么引擎,然后确定需要备份的数据库文件,不知道数据库存储位置的朋友,可以在MySQL目录里的my.cnf配置文件中找到。偷偷再告诉你一个简单的大招吧,直接把MySQL目录整个备份,不用你写数据库备份脚本?也不用手动备份,交给多备份就好!一键备份多个云盘数据永不丢失,需要时再一键恢复。省事省力又省心!

zhs23 发表于 2014-12-11 09:28

我也遇到过啊!数据库里的表 大部分是MYISAM。但是 有几个别的是 INNODB的。。。结果还原后 打不开。。。
最要命的时候。当时备份完了。老的服务器data直接删掉了。。。

_06月_ 发表于 2014-12-11 10:09

前几天刚刚碰到,还好不是线上的系统,数据量不大,不然就悲剧了

909413335 发表于 2014-12-11 12:05

小数据库用MYSQLDUMP逻辑备份就行了,大的用XTRBACKUP,全备加整备

如果一定要备份文件,就把整个DATA目录全部备份下来,这样是最保险的。

插播一个招聘
1、1年以上全职MYSQL/REDIS DBA工作经验.
2、精通/熟悉MySQL数据库的运行机制和体系架构.
3、精通/熟悉MySQL数据库的管理,有丰富的故障处理经验优先.
4、熟悉linux操作系统的使用,有一定的运维经验.
5、熟悉shell/python编程,善于利用脚本解决重复问题
6、熟悉mysql/redis/mongodb的使用优化.
7、基础扎实,做事认真,善于总结,有想法,能承受压力
8、性格沉稳细致或者灵活有原则,愿意陪公司一起成长

工作地点:珠海魅族总部待遇面议,高于业界普通水平
面试过程:先QQ,电话面试,达成一致后到公司来面谈一下就可以定下来。
联系QQ:32416070,不是猎头。

action08 发表于 2014-12-11 12:52

2014-12-03 15:23:41

刚刚发生的事情啊??

action08 发表于 2014-12-11 12:57

我看到了楼主用到了云盘备份数据,想多谈一个隐私的问题,


http://bbs.chinaunix.net/thread-4163369-1-1.html
保护隐私不是仅仅简单保护密码。公司的业务数据如果重要,应该有公司专用硬盘离线备份。

如果没有这方面的预算,要用云盘也该将数据【加密压缩】后再放到云。密码起码16位复杂组合

action08 发表于 2014-12-11 13:19

本帖最后由 action08 于 2014-12-11 13:19 编辑

root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~# grepdatadir /etc/mysql/my.cnf
datadir                = /var/lib/mysql
root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~# ls /var/lib/mysql/
debian-5.5.flagib_logfile0mysql               performance_schema
ibdata1          ib_logfile1mysql_upgrade_infotest
root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~#
请问需要备份哪些目录啊??谢谢

辛勤劳动的蜜蜂 发表于 2014-12-11 14:16

回复 5# action08


    是的 最近 哎

action08 发表于 2014-12-12 12:55

本帖最后由 action08 于 2014-12-12 12:59 编辑

恩,发生事情了,领导怎么看的??

还有现在公司整体对dba认可度是否有所改变啊??
页: [1]
查看完整版本: 一次数据库备份的血泪史