详解mysql备份恢复的三种实现方式

实例详解:操作时数据库以及库中的表可以自己创建,主要讲解备份的过程及其中的要点

详解一:对catidb数据库进行完全备份:

mysql>use catidb;Databasechangedmysql>show tables; //使用catidb数据库查看其中的表+——————+|Tables_in_catidb |+——————+|tb1||tb2|+——————+2rows in set (0.00 sec)

对catidb数据库进行备份,恢复

[root@localhost~]# mysqldump -uroot -pmypass catidb > /tmp/catidb.sql //用这种方法对catidb数据库进行备份,,在数据库恢复时有一个问题,即该catidb.sql文件中没用创建catidb数据库的语句,在恢复时所含所有表会恢复到当前默认的数据库中,相当的危险,因此需要谨慎,在恢复之前一定要先创建数据库mysql>drop database catidb;//备份之后将catidb数据库删除QueryOK, 2 rows affected (0.07 sec)mysql>create database catidb; //在恢复之前一定要先创建数据库,数据库名字可以自己定义QueryOK, 1 row affected (0.04 sec)mysql>use catidb;Databasechangedmysql>source /tmp/catidb.sql //进行数据恢复mysql>show tables;//恢复成功+——————+|Tables_in_catidb |+——————+|tb1||tb2|+——————+2rows in set (0.01 sec)

详解二:

利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份

仍以上面的catidb数据库为例先对catidb 数据库进行完全备份

mysql>use catidb;Databasechangedmysql>show tables;+——————+|Tables_in_catidb |+——————+|tb1||tb2|+——————+2rows in set (0.00 sec)

对catidb数据库进行完全备份

[root@localhost~]# mysqldump -uroot -pmypass –single-transaction –master-data=2 –databasescatidb > /backup/catidb_`date +%F`.sql

备份完成之后又对catidb数据库进行了新的操作

mysql>show tables;+——————+|Tables_in_catidb |+——————+|tb1||tb2|+——————+2rows in set (0.00 sec)mysql>use catidbDatabasechangedmysql>create table tb3 (id int);QueryOK, 0 rows affected (0.11 sec)mysql>insert into tb3 values (1),(6),(9);QueryOK, 3 rows affected (0.09 sec)Records:3 Duplicates: 0 Warnings: 0

进行增量备份:从上一次完全备份完成后,到所有新的操作之前,那么如何查看记录的位置

开始位置:

[root@localhost~]# less /backup/catidb_2013-09-07.sql–MySQL dump 10.13 Distrib 5.5.33, forLinux (x86_64)—-Host: localhost Database: catidb———————————————————-Server version5.5.33-log/*!40101SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101SET NAMES utf8 */;/*!40103SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103SET TIME_ZONE=’+00:00′ */;/*!40014SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’NO_AUTO_VALUE_ON_ZERO’ */;/*!40111SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;—-Position to start replication or point-in-time recovery from—- CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000004′,MASTER_LOG_POS=1673;

结束位置:

mysql>show master status;+——————+———-+————–+——————+|File| Position |Binlog_Do_DB | Binlog_Ignore_DB |+——————+———-+————–+——————+| mysql-bin.000004 |1959 |||+——————+———-+————–+——————+1row in set (0.00 sec)

二进制增量备份

[root@localhost~]# mysqlbinlog –start-position=1673 –stop-position=1959/mydata/data/mysql-bin.000004 > /backup/catidb_`date +%F_%H`.sql

之后又进行了一些操作

记录一次此刻二进制日志的位置

mysql>show master status;+——————+———-+————–+——————+|File| Position |Binlog_Do_DB | Binlog_Ignore_DB |+——————+———-+————–+——————+|mysql-bin.000004 |1959 |||+——————+———-+————–+——————+1row in set (0.00 sec)mysql>use catidb;Databasechangedmysql>insert into tb3 values (2),(5);QueryOK, 2 rows affected (0.11 sec)Records:2 Duplicates: 0 Warnings: 0

之后不小心删除了catidb数据库

mysql>drop database catidb;

QueryOK, 3 rows affected (0.13 sec)

开始进行恢复操作,首先把所需二进制日志导出来

[root@localhost~]# mysqlbinlog –start-position=1959 /mydata/data/mysql-bin.000004/*!50530SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019SET @@session.max_insert_delayed_threads=0*/;/*!50003SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER/*!*/;#at 4#130907 5:41:54 server id 1 end_log_pos 107Start: binlog v 4, server v 5.5.33-log created 130907 5:41:54 at startup#Warning: this binlog is either in use or was not closed properly.ROLLBACK/*!*/;BINLOG’IkwqUg8BAAAAZwAAAGsAAAABAAQANS41LjMzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiTCpSEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==’/*!*/;#at 1959#130907 9:53:14 server id 1 end_log_pos 2029 Query thread_id=6 exec_time=0 error_code=0SETTIMESTAMP=1378518794/*!*/;SET@@session.pseudo_thread_id=6/*!*/;SET@@session.foreign_key_checks=1, @@session.sql_auto_is_null=0,@@session.unique_checks=1, @@session.autocommit=1/*!*/;SET@@session.sql_mode=0/*!*/;SET@@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!\Cutf8 *//*!*/;SET@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;SET@@session.lc_time_names=0/*!*/;SET@@session.collation_database=DEFAULT/*!*/;BEGIN/*!*/;#at 2029#130907 9:53:14 server id 1 end_log_pos 2124 Query thread_id=6 exec_time=0 error_code=0use`catidb`/*!*/;SETTIMESTAMP=1378518794/*!*/;insertinto tb3 values (2),(5)/*!*/;#at 2124#130907 9:53:14 server id 1 end_log_pos 2151 Xid = 175COMMIT/*!*/;# at 2151#130907 9:54:04 server id 1 end_log_pos 2236 Query thread_id=6 exec_time=1 error_code=0SETTIMESTAMP=1378518844/*!*/;drop database catidb/*!*/;DELIMITER;#End of log fileROLLBACK/* added by mysqlbinlog */;/*!50003SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

注意我们保存的是drop catidb数据库之前的内容,因此需要查看其中的位置,此时为2151

开始导出二进制日志

[root@localhost~]# mysqlbinlog –start-position=1959 –stop-position=2151/mydata/data/mysql-bin.000004 > /tmp/catidb_binlog.sql

开始恢复,此时不需要启动二进制日志

mysql>set sql_log_bin=0;QueryOK, 0 rows affected (0.00 sec)mysql>flush logs; //滚动二进制日志QueryOK, 0 rows affected (0.17 sec)其实,每个人都是幸福的。只是,你的幸福,常常在别人眼里。

详解mysql备份恢复的三种实现方式

相关文章:

你感兴趣的文章:

标签云: