首页 > 代码库 > MySQL数据备份与恢复
MySQL数据备份与恢复
**无论备份还是恢复,都要验证用户及权限**
一、数据备份
1、数据备份的备份方式
物理备份:cp、tar、tar+gzip —> 兼容性差,目标地址空间大,耗时
系统自带物理备份工具mysqlhotcopy --> 备份时锁表
逻辑备份:备份产生数据的SQL语句 —> 兼容性好,占用空间小
系统自带完整备份工具Mysqldump(MySQL-client包产生) --> 备份时锁表
2、数据备份的备份策略
完整备份: 完全备份,把数据库服务器上的所有库所有表全部备份
差异备份: 自‘完整备份’之后,叠加备份所有产生的新数据。
优缺点:备份数据有冗余,占用空间,恢复时方便
例如:第1天做了完整备份,第2天产生3条记录,差异备份时需备份3条记录,第3天产生2条 记录,差异备份时则需备份5条记录
完整备份 1条记录 1day 备份1条记录
差异备份 3条记录 2day 备份3条记录
2条记录 3day 备份5条记录
……… ……………
增量备份:‘自上一次备份’之后,备份产生的新数据。
优缺点:备份节省空间,恢复时调用的文件多
完整备份 1条记录 1day 1
增量备份 3 2day 3
2 3day 2
……… …………
3、工作中通常备份策略用法:
完整备份+差异备份
完整备份+增量备份
4、备份工具
1)完整备份工具mysqldump
**由mysql包提供,数据量不太大时用,
**备份的时候锁表,备份期间别人不能对备份数据进行操作
格式:mysqldump [–h数据库IP/主机名] -u登录用户名 -p密码 数据库名 > 路径/备份文件名.sql
不写路径时,默认备份到当前命令所在的目录下
若写路径,需事先创建好
若数据库管理员从本机登录且没有密码:mysqldump 数据库名 >路径/xxx.sql
用来连接数据库的用户要对相应的数据库有权限
数据库名的表示格式:
所有库 --all-databases
指定单个库下的所有表 数据库名
某个库下的某个表 数据库名 表名
备份某几个库 -B 数据库名1 数据库名2 数据库名N
例:mysqldump -uroot -p --all-databases > /mysqlbak/alldb.sql //备份数据库服务器上的所有库
解决:将备份写入计划任务后,因备份名一样,会复盖前天的备份,可以用“时间”做备份文件名。
获取时间命令:#date +%F →2014-07-21
#date +%T →17:30:17
mysqldump webdb > webdb-`date +%F`.sql
mysqldump -h192.168.10.20 -uroot -ptarena webdb > /mysqllog/webdb-`date+%F`.sql //远程备份
二、数据恢复
格式:mysql –h服务器IP/主机名 -u登录用户名 –p密码 数据库名 < 备份文件名
mysql 数据库名 < 备份文件名 //若登录数据库不需要用户名密码
注意:恢复数据时候“<”必须写对千万注意不要写反,要是恢复的时候写成“>”那么会自动清除备份文件内容
备份库的时候,前面加-B备份出的文件里面带“创建库”的SQL语句,恢复的时候不用在数据库里在创建库
数据库名是可选项,恢复数据时候必须查看一下备份文件里面的SQL语句,当恢复时使用的备份文件里有建库SQL语句时,数据库名可以省略,反之没有建库SQL语句的时候必须“进数据库里面手动建一个库(库名可以随便写)”然后在恢复的时候写上新建的数据库名。
例:
mysql webdb < webdb-2014-01-06.sql
mysql -h192.168.10.20 -uroot -ptarena webdb < /mysqllog/webdb-2014-01-06.sql
本文出自 “Dave-技术博客” 博客,请务必保留此出处http://davewang.blog.51cto.com/6974997/1858713
MySQL数据备份与恢复