Mysql备份与还原实例

时间:2020-12-14 10:17:07

一、备份数据库

----清空一下日志
mysql> reset master;
Query OK,
0 rows affected (0.02 sec)
----查看一下echo表的存储引擎
mysql> show table status like 'echo' \G;
*************************** 1. row ***************************
Name: echo
Engine: InnoDB
Version:
10
Row_format: Compact
Rows:
3
Avg_row_length:
5461
Data_length:
16384
Max_data_length:
0
Index_length:
0
Data_free:
94371840
Auto_increment:
NULL
Create_time:
2013-09-23 16:45:31
Update_time:
NULL
Check_time:
NULL
Collation: utf8_general_ci
Checksum:
NULL
Create_options:
Comment:
1 row in set (0.00 sec)

ERROR:
No query specified
----开始备份
[root@rhel5 dump]# mysqldump -u root -p --skip-opt --quick --extended-insert=false --single-transaction --master-data=2 --databases jack > /mysql/mysql5.5/dump/echo.sql

Enter password:
[root@rhel5 dump]# ll
总计
4
-rw-r--r-- 1 root root 1558 09-23 21:47 echo.sql
--
-查看备份出来的sql
[root@rhel5 dump]# more echo.sql
-- MySQL dump 10.13 Distrib 5.5.22, for Linux (i686)
--
--
Host: localhost Database: jack
--
------------------------------------------------------
--
Server version 5.5.22-log
/*
!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.000001', MASTER_LOG_POS=107;

--
--
Current Database: `jack`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `jack` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `jack`;

--
--
Table structure for table `echo`
--

/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `echo` (
`id`
int(11) DEFAULT NULL,
`msg`
varchar(100) DEFAULT NULL
);
/*!40101 SET character_set_client = @saved_cs_client */;

--
--
Dumping data for table `echo`
--

INSERT INTO `echo` VALUES (1,'aaa');
INSERT INTO `echo` VALUES (1,'bbb');
INSERT INTO `echo` VALUES (1,'');
/*!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 */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2013-09-23 21:47:55

二、对表进行修改,然后删除

----插入一下内容
mysql> insert into echo values(4,'ccc');
Query OK,
1 row affected (0.02 sec)

mysql
> insert into echo values(5,'ddd');
Query OK,
1 row affected (0.01 sec)

mysql
> select * from echo;
+------+------+
| id | msg |
+------+------+
| 1 | aaa |
| 1 | bbb |
| 1 ||
| 4 | ccc |
| 5 | ddd |
+------+------+
5 rows in set (0.00 sec)

mysql
> drop table echo;
Query OK,
0 rows affected (0.02 sec)

mysql
> select * from echo;
ERROR
1146 (42S02): Table 'jack.echo' doesn't exist

三、查看表删除的位置

mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 593 |
+------------------+-----------+
1 row in set (0.00 sec)

mysql
> flush logs;
Query OK,
0 rows affected (0.01 sec)

mysql
> show binlog events;
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 107 | Server ver: 5.5.22-log, Binlog ver: 4 |
| mysql-bin.000001 | 107 | Query | 1 | 175 | BEGIN |
| mysql-bin.000001 | 175 | Query | 1 | 270 | use `jack`; insert into echo values(4,'ccc') |
| mysql-bin.000001 | 270 | Xid | 1 | 297 | COMMIT /* xid=176 */ |
| mysql-bin.000001 | 297 | Query | 1 | 365 | BEGIN |
| mysql-bin.000001 | 365 | Query | 1 | 460 | use `jack`; insert into echo values(5,'ddd') |
| mysql-bin.000001 | 460 | Xid | 1 | 487 | COMMIT /* xid=177 */ |
| mysql-bin.000001 | 487 | Query | 1 | 593 | use `jack`; DROP TABLE `echo` /* generated by server */ |
| mysql-bin.000001 | 593 | Rotate | 1 | 636 | mysql-bin.000002;pos=4 |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------+
9 rows in set (0.00 sec)
----从上面可以看出drop table 是在487----
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 636 |
| mysql-bin.000002 | 107 |
+------------------+-----------+
2 rows in set (0.00 sec)

mysql
> show binlog events in 'mysql-bin.000001' \G;
*************************** 1. row ***************************
Log_name: mysql
-bin.000001
Pos:
4
Event_type: Format_desc
Server_id:
1
End_log_pos:
107
Info: Server ver:
5.5.22-log, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql
-bin.000001
Pos:
107
Event_type: Query
Server_id:
1
End_log_pos:
175
Info:
BEGIN
*************************** 3. row ***************************
Log_name: mysql
-bin.000001
Pos:
175
Event_type: Query
Server_id:
1
End_log_pos:
270
Info:
use `jack`; insert into echo values(4,'ccc')
*************************** 4. row ***************************
Log_name: mysql
-bin.000001
Pos:
270
Event_type: Xid
Server_id:
1
End_log_pos:
297
Info:
COMMIT /* xid=176 */
*************************** 5. row ***************************
Log_name: mysql
-bin.000001
Pos:
297
Event_type: Query
Server_id:
1
End_log_pos:
365
Info:
BEGIN
*************************** 6. row ***************************
Log_name: mysql
-bin.000001
Pos:
365
Event_type: Query
Server_id:
1
End_log_pos:
460
Info:
use `jack`; insert into echo values(5,'ddd')
*************************** 7. row ***************************
Log_name: mysql
-bin.000001
Pos:
460
Event_type: Xid
Server_id:
1
End_log_pos:
487
Info:
COMMIT /* xid=177 */
*************************** 8. row ***************************
Log_name: mysql
-bin.000001
Pos:
487
Event_type: Query
Server_id:
1
End_log_pos:
593
Info:
use `jack`; DROP TABLE `echo` /* generated by server */
*************************** 9. row ***************************
Log_name: mysql
-bin.000001
Pos:
593
Event_type: Rotate
Server_id:
1
End_log_pos:
636
Info: mysql
-bin.000002;pos=4
9 rows in set (0.00 sec)

ERROR:
No query specified

四、查看备份的位置

[root@rhel5 dump]# more echo.sql 
-- MySQL dump 10.13 Distrib 5.5.22, for Linux (i686)
--
--
Host: localhost Database: jack
--
------------------------------------------------------
--
Server version 5.5.22-log
/*
!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.000001', MASTER_LOG_POS=107;

--
--
Current Database: `jack`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `jack` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `jack`;

--
--
Table structure for table `echo`
--

/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `echo` (
`id`
int(11) DEFAULT NULL,
`msg`
varchar(100) DEFAULT NULL
);
/*!40101 SET character_set_client = @saved_cs_client */;

--
--
Dumping data for table `echo`
--

INSERT INTO `echo` VALUES (1,'aaa');
INSERT INTO `echo` VALUES (1,'bbb');
INSERT INTO `echo` VALUES (1,'');
/*!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 */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2013-09-23 21:47:55

[root@rhel5 dump]# grep "CHANGE MASTER" ./echo.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

五、还原数据库

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jack |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
----因为没有测试库,所以只能把jack数据库给删除掉
mysql> drop database jack;
Query OK,
0 rows affected (0.02 sec)
----还原数据库
[root@rhel5 dump]# mysql -u root -p < ./echo.sql
Enter password:

mysql
> use jack
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
> show tables;
+----------------+
| Tables_in_jack |
+----------------+
| echo |
+----------------+
1 row in set (0.00 sec)
---已经还原到表被修改之前
mysql> select * from echo;
+------+------+
| id | msg |
+------+------+
| 1 | aaa |
| 1 | bbb |
| 1 ||
+------+------+
3 rows in set (0.01 sec)

mysql
> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 636 |
| mysql-bin.000002 | 1065 |
+------------------+-----------+
2 rows in set (0.00 sec)

mysql
> show binlog events in 'mysql-bin.000002';
+------------------+------+-------------+-----------+-------------+----------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+-------------+-----------+-------------+----------------------------------------------------------------------------------------------------+
| mysql-bin.000002 | 4 | Format_desc | 1 | 107 | Server ver: 5.5.22-log, Binlog ver: 4 |
| mysql-bin.000002 | 107 | Query | 1 | 188 | drop database jack |
| mysql-bin.000002 | 188 | Query | 1 | 337 | CREATE DATABASE /*!32312 IF NOT EXISTS*/ `jack` /*!40100 DEFAULT CHARACTER SET utf8 */ |
| mysql-bin.000002 | 337 | Query | 1 | 486 | use `jack`; CREATE TABLE `echo` (

`id`
int(11) DEFAULT NULL,
`msg`
varchar(100) DEFAULT NULL
)
|
| mysql-bin.000002 | 486 | Query | 1 | 554 | BEGIN |
| mysql-bin.000002 | 554 | Query | 1 | 652 | use `jack`; INSERT INTO `echo` VALUES (1,'aaa') |
| mysql-bin.000002 | 652 | Xid | 1 | 679 | COMMIT /* xid=206 */ |
| mysql-bin.000002 | 679 | Query | 1 | 747 | BEGIN |
| mysql-bin.000002 | 747 | Query | 1 | 845 | use `jack`; INSERT INTO `echo` VALUES (1,'bbb') |
| mysql-bin.000002 | 845 | Xid | 1 | 872 | COMMIT /* xid=207 */ |
| mysql-bin.000002 | 872 | Query | 1 | 940 | BEGIN |
| mysql-bin.000002 | 940 | Query | 1 | 1038 | use `jack`; INSERT INTO `echo` VALUES (1,'') |
| mysql-bin.000002 | 1038 | Xid | 1 | 1065 | COMMIT /* xid=208 */ |
+------------------+------+-------------+-----------+-------------+----------------------------------------------------------------------------------------------------+
13 rows in set (0.00 sec)

六、恢复数据库

[root@rhel5 data]# mysqlbinlog -u root -p --start-position=107 --stop-position=487 -vv ./mysql-bin.000001 | mysql -u root -p
Enter password: Enter password:
123456

mysql
> select * from echo;
+------+------+
| id | msg |
+------+------+
| 1 | aaa |
| 1 | bbb |
| 1 ||
| 4 | ccc |
| 5 | ddd |
+------+------+
5 rows in set (0.00 sec)