mysql> select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.01 sec)
2,备份这张表所在的数据库
[root@node1 backup]# mysqldump -u root -p --master-data=2 --databases testdb > test2.sql
Enter password:
[root@node1 backup]# ll
total 4
-rw-r--r-- 1 root root 2053 Apr 22 05:28 test2.sql
[root@node1 backup]# more test2.sql
-- MySQL dump 10.13 Distrib 5.7.11, for Linux (i686)
--
-- Host: localhost Database: testdb
-- ------------------------------------------------------
-- Server version 5.7.11-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @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.000013', MASTER_LOG_POS=2198;
--
-- Current Database: `testdb`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `testdb`;
--
-- Table structure for table `t`
--
DROP TABLE IF EXISTS `t`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t`
--
LOCK TABLES `t` WRITE;
/*!40000 ALTER TABLE `t` DISABLE KEYS */;
INSERT INTO `t` VALUES (1),(2);
/*!40000 ALTER TABLE `t` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-04-22 5:28:41
[root@node1 backup]#
3,插入数据,并删除表
mysql> insert into t values(3);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t values(4);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
mysql>
mysql> drop table t;
Query OK, 0 rows affected (0.01 sec)
4,查看当前binlog位置,并得到删除操作的位置
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000003 | 201 |
| mysql-bin.000004 | 201 |
| mysql-bin.000005 | 3841844 |
| mysql-bin.000006 | 177 |
| mysql-bin.000007 | 177 |
| mysql-bin.000008 | 177 |
| mysql-bin.000009 | 7683463 |
| mysql-bin.000010 | 1908 |
| mysql-bin.000011 | 657 |
| mysql-bin.000012 | 4159 |
| mysql-bin.000013 | 2893 |
+------------------+-----------+
11 rows in set (0.01 sec)
mysql> show binlog events in 'mysql-bin.000013';
+------------------+------+----------------+-----------+-------------+---------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+---------------------------------------------------------+
| mysql-bin.000013 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.11-log, Binlog ver: 4 |
| mysql-bin.000013 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000013 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 219 | Query | 1 | 337 | use `testdb`; DROP TABLE `t` /* generated by server */ |
| mysql-bin.000013 | 337 | Anonymous_Gtid | 1 | 402 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 402 | Query | 1 | 521 | use `testdb`; DROP TABLE `t2` /* generated by server */ |
| mysql-bin.000013 | 521 | Anonymous_Gtid | 1 | 586 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 586 | Query | 1 | 701 | use `test`; DROP TABLE `t2` /* generated by server */ |
| mysql-bin.000013 | 701 | Anonymous_Gtid | 1 | 766 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 766 | Query | 1 | 881 | use `test`; DROP TABLE `t3` /* generated by server */ |
| mysql-bin.000013 | 881 | Anonymous_Gtid | 1 | 946 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 946 | Query | 1 | 1052 | use `testdb`; DROP TABLE IF EXISTS `test2` |
| mysql-bin.000013 | 1052 | Anonymous_Gtid | 1 | 1117 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 1117 | Query | 1 | 1206 | drop database testdb |
| mysql-bin.000013 | 1206 | Anonymous_Gtid | 1 | 1271 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 1271 | Query | 1 | 1356 | drop database test |
| mysql-bin.000013 | 1356 | Anonymous_Gtid | 1 | 1421 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 1421 | Query | 1 | 1521 | create database testdb |
| mysql-bin.000013 | 1521 | Anonymous_Gtid | 1 | 1586 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 1586 | Query | 1 | 1686 | use `testdb`; create table t(id int) |
| mysql-bin.000013 | 1686 | Anonymous_Gtid | 1 | 1751 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 1751 | Query | 1 | 1825 | BEGIN |
| mysql-bin.000013 | 1825 | Table_map | 1 | 1871 | table_id: 152 (testdb.t) |
| mysql-bin.000013 | 1871 | Write_rows | 1 | 1911 | table_id: 152 flags: STMT_END_F |
| mysql-bin.000013 | 1911 | Xid | 1 | 1942 | COMMIT /* xid=298 */ |
| mysql-bin.000013 | 1942 | Anonymous_Gtid | 1 | 2007 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 2007 | Query | 1 | 2081 | BEGIN |
| mysql-bin.000013 | 2081 | Table_map | 1 | 2127 | table_id: 152 (testdb.t) |
| mysql-bin.000013 | 2127 | Write_rows | 1 | 2167 | table_id: 152 flags: STMT_END_F |
| mysql-bin.000013 | 2167 | Xid | 1 | 2198 | COMMIT /* xid=299 */ |
| mysql-bin.000013 | 2198 | Anonymous_Gtid | 1 | 2263 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 2263 | Query | 1 | 2337 | BEGIN |
| mysql-bin.000013 | 2337 | Table_map | 1 | 2383 | table_id: 172 (testdb.t) |
| mysql-bin.000013 | 2383 | Write_rows | 1 | 2423 | table_id: 172 flags: STMT_END_F |
| mysql-bin.000013 | 2423 | Xid | 1 | 2454 | COMMIT /* xid=564 */ |
| mysql-bin.000013 | 2454 | Anonymous_Gtid | 1 | 2519 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 2519 | Query | 1 | 2593 | BEGIN |
| mysql-bin.000013 | 2593 | Table_map | 1 | 2639 | table_id: 172 (testdb.t) |
| mysql-bin.000013 | 2639 | Write_rows | 1 | 2679 | table_id: 172 flags: STMT_END_F |
| mysql-bin.000013 | 2679 | Xid | 1 | 2710 | COMMIT /* xid=565 */ |
| mysql-bin.000013 | 2710 | Anonymous_Gtid | 1 | 2775 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000013 | 2775 | Query | 1 | 2893 | use `testdb`; DROP TABLE `t` /* generated by server */ |
+------------------+------+----------------+-----------+-------------+---------------------------------------------------------+
42 rows in set (0.00 sec)
mysql>
5,安全起见,在生产中最好在测试库上做恢复,此处我直接在本机恢复
mysql>
mysql>
mysql>
mysql> drop database testdb;
Query OK, 0 rows affected (0.01 sec)
[root@node1 backup]#
[root@node1 backup]#
[root@node1 backup]# mysql -u root -p
Enter password:
[root@node1 backup]#
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
mysql>
mysql>
mysql>
mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql>
mysql>
mysql> select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.01 sec)
mysql>
6,从上面的日志中可以看到,我备份的pos是2198,删除的pos是2775,恢复完成后,表中拥有四条数据
root@node1 mysql]#
[root@node1 mysql]# mysqlbinlog --start-position=2198 --stop-position=2775 mysql-bin.000013 |mysql -u root -p
Enter password:
[root@node1 mysql]#
mysql> select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
mysql>