首页 > 代码库 > MySQL 备份恢复

MySQL 备份恢复

1:备份常用工具:

mysqldump, xtrabackup

mysqldump: 原生数据导出工具,以sql的形式导出保存

xtrabackup: percona团队提供的备份工具,基于文件系统的备份

2:备份全库:

mysqldump -h10.6.29.1 -uroot -p --all-databases > 20140925_all_db_10.6.29.1.sql
mysqldump是直接屏幕输出,所以重定向后即可得到对应的备份文件。存在问题:1:会锁全库,影响业务2:有可能缺失常规表以外的内容,如存储过程3:未记录binlog同步点,不能用于主从同步以及利用binlog增量恢复4:对于数据集较大的表,可能会吃掉server端大量内存

  

mysqldump -h10.6.29.1 -uroot -p --all-databases --master-data=http://www.mamicode.com/2 --routines --events --quick --single-transaction > 10.6.29.129.sql>
--master-data=http://www.mamicode.com/2 表示需要记录导出数据当时主库的binlog位置>

  

3:备份部分库

mysqldump -h10.6.29.129 -uroot -p --master-data=http://www.mamicode.com/2 --routines –events --quick --single-transaction --databases db1 db2 db3 > 20140925_all_db_10.6.29.1.sql>(先写明指定的database,然后紧跟需要备份的表名)

  

4:数据恢复

Mysql -h10.6.29.129 -uroot -p < 20140925_all_db_10.6.29.129.sql(简单易行,但要确保导入的库表,不会同时有业务在写入)

 

5:mysqlbinlog对日志进行解析

mysqlbinlog mysql.000002 > binlog_new.000002

  

mysqlbinlog mysql.000002 --start-position=549212174 --stop-datetime=‘2014-9-10 10:00‘ > binlog_new.000002.sql
--start-position 表示从binlog的那个位置开始解析,而这个起始点可以通过备份时的master-data参数得到--stop-datetime 表示只解析到哪个时间点的语句为止,可用于回档到某个指定时间点--start-datetime 从那个时间点开始,但通常还是尽量使用start-position,更为准确--verbose, -v 使用方式:-vv, -vvv,常用于ROW模式的详细输出

  

mysqlbinlog mysql.000005 > 5.sqlmysqlbinlog mysql.000005 -vv > 5-vv.sql

  

6:恢复单个表

1:拥有对应单表备份文件,直接导入2:使用mysqlbinlog解析binlog文件,再从得到的完整文件中获取对应表的语句,redo应用到数据库

  

如何过滤仅得到想要的语句?由于binlog里得到的语句数量通常相当庞大,可以借助最简单的grep的方式。grep -B3 -w tbl1 binlog.xxx.sql | egrep -v ‘^--$‘ > tbl1.sql

  

MySQL 备份恢复