MySQL备份与恢复整理
来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 16:08 点击:次
一、MySQL的逻辑备份是将数据库备份成一个文件,这样有利于查看与编辑。在MySQLk ,使用mysqldump工具来完成逻辑备份;
1、备份指定的库,或者此库中的表;
mysqldump [options]db_name [tables]
2、备份指定的一个库或者多个库;
mysqldump [options] --database DB1[DB2 DB3......]
3、备份所有数据库;
mysqldump [options] --all-database
举例如下;
1、备份所有数据库:
mysqldump -uroot -p --all-database > all.sql
2、备份product数据库;
mysqldump -uroot -p product > product.sql
3、备份product数据库下的code表;
mysqldump -uroot -p product code > code.sql
4、备份product数据库下的code表和list表;
mysqldump -uroot -p product code list > code_list.sql
......
二、完全恢复;
1、恢复数据库;
mysql -uroot -p dbname < bakfile
2、重做备份日志;
mysqlbinlog binlog-file | mysql -u root -p
完整举例如下;
1、第一天,备份数据库;
mysqldump -uroot -p -l -F product >product.sql
-l:给所有表加读锁,-F:生成一个新的日志文件。
2、第二天,插入一部分新数据;
3、第三天,数据库突然挂了,数据无法访问,需要恢复备份;
mysql -uroot -p product < product.sql
4、恢复完成后得到的是第一天备份时的数据,此时需要使用mysqldump恢复自mysqldump备份后的binlog:
mysqlbinlog localhost-bin.000012 | mysql -uroot -p product
三、基于时间点还原;
1、如果第三天9点发生误操作,可以用如下语句从备份和binlog将数据恢复到故障前:
mysqlbinlog --stop-date="2010-09-17 8:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
2、跳过故障点继续恢复;
mysqlbinlog --start-date="2010-09-17 9:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
四、基于位置恢复;
和基于时间点的恢复相类似,但更精确,同一时间点可能有多条SQL语句同时执行,恢复的操作步骤如下;
1、在shell下执行如下命令;
mysqlbinlog --start-date="2010-09-17 8:55:00" --stop-date="2010-09-17 9:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
此时在tmp下建立了小的文本文件,编辑它并找出错语句前后的位置号,例如前后号分别为:198765和198869;
2、恢复了以前的备份文件后,接着执行如下命令;
mysqlbinlog --stop-position="198765" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
mysqlbinlog --start-position="198769" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
第一行:恢复到停止位置的所有事务;
第二行:将恢复从给定的起始位置直到二进制日志结束的所有事务;
**********************************************************************************************
物理备份
1、备份指定的库,或者此库中的表;
mysqldump [options]db_name [tables]
2、备份指定的一个库或者多个库;
mysqldump [options] --database DB1[DB2 DB3......]
3、备份所有数据库;
mysqldump [options] --all-database
举例如下;
1、备份所有数据库:
mysqldump -uroot -p --all-database > all.sql
2、备份product数据库;
mysqldump -uroot -p product > product.sql
3、备份product数据库下的code表;
mysqldump -uroot -p product code > code.sql
4、备份product数据库下的code表和list表;
mysqldump -uroot -p product code list > code_list.sql
......
二、完全恢复;
1、恢复数据库;
mysql -uroot -p dbname < bakfile
2、重做备份日志;
mysqlbinlog binlog-file | mysql -u root -p
完整举例如下;
1、第一天,备份数据库;
mysqldump -uroot -p -l -F product >product.sql
-l:给所有表加读锁,-F:生成一个新的日志文件。
2、第二天,插入一部分新数据;
3、第三天,数据库突然挂了,数据无法访问,需要恢复备份;
mysql -uroot -p product < product.sql
4、恢复完成后得到的是第一天备份时的数据,此时需要使用mysqldump恢复自mysqldump备份后的binlog:
mysqlbinlog localhost-bin.000012 | mysql -uroot -p product
三、基于时间点还原;
1、如果第三天9点发生误操作,可以用如下语句从备份和binlog将数据恢复到故障前:
mysqlbinlog --stop-date="2010-09-17 8:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
2、跳过故障点继续恢复;
mysqlbinlog --start-date="2010-09-17 9:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
四、基于位置恢复;
和基于时间点的恢复相类似,但更精确,同一时间点可能有多条SQL语句同时执行,恢复的操作步骤如下;
1、在shell下执行如下命令;
mysqlbinlog --start-date="2010-09-17 8:55:00" --stop-date="2010-09-17 9:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
此时在tmp下建立了小的文本文件,编辑它并找出错语句前后的位置号,例如前后号分别为:198765和198869;
2、恢复了以前的备份文件后,接着执行如下命令;
mysqlbinlog --stop-position="198765" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
mysqlbinlog --start-position="198769" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd
第一行:恢复到停止位置的所有事务;
第二行:将恢复从给定的起始位置直到二进制日志结束的所有事务;
**********************************************************************************************
物理备份
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>