一· mysql分逻辑备份和物理备份。

    逻辑备份将数据库备份为一个文本文件,备份文件可以查看编辑。mysqldump工具完成。

1. 指定数据库,或者库中的表。

shell> mysqldump [options]  db_name [tables]

2.备份一个或者多个数据库

shell> mysqldump [options]  ---database DB1 [DB2 DB3...]

3.备份全库

shell> mysqldump [options] --all-database

例子:

1.备份所有数据库:$mysqldump -uroot -p --all-database > all.sql

2.备份test数据库:$mysqldump -uroot -p test > test.sql

3.备份test下的emp:$mysqldump -uroot -p test emp > emp.sql 

4.备份test下的emp和dept:$mysqldump -uroot -p test emp dept > emp_dept.sql

 

二·数据库恢复

1.完全恢复

mysql -uroot -p dbname < bakfile

注:备份后数据不完整,还需要将备份后执行的日志重做:mysqlbinlog binlog-file |mysql -u root -p ***

例子:

备份数据

#mysql -uroot -p -l -F test >test.dump

-l给所有表加读索,-F生成新的日志文件

故障需要恢复备份:

#mysql -uroot -p test < test.dmp

使用mysqlbinlog恢复自mysqldump备份以来的BINLOG

#mysqlbinlog localhost-bin.000015 | mysql -u root -p test 

2.基于时间的恢复

误操作删除了一张表,没必要完全恢复,不完全恢复。分为基于时间的恢复和基于位置的恢复。

如上午10点发生误操作,恢复到故障前:

shell>mysqlbinlog --stop-date="2012-11-21 9:59:59"/var/log/mysql/bin.123456 | mysql -u root -pmypwd

跳过故障时间点继续执行后面的BINLOG完成恢复。

shell>mysqlbinlog --start-date="2012-11-21 10:01:00"/var/log/mysql/bing.123456 | mysql -u root -pmypwd \

3.基于位置恢复

和基于时间类似,但是精确。一个时间点可能有很多条SQL语句同时执行。

shell执行如下命令:

shell > mysqlbinlog --stat-date="2012-11-21 9:55:00" --stop-date="2012-11-21 10:05:00" /var/log/mysql/bin.123456 >/tmp/mysql_restore.sql

该命令在/tmp目录下创建小的文本文件。编辑此文件。找到出错语句的位置,368312和368315

恢复了以前的备份后,输入下面内容

shell > msyqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \ | mysql -u root -pmypwd

shell > mysqlbinlog --stop-position="368315" /var/log/mysql/bin.123456 \ | mysql -u root -pmypwd \