MySQL备份与恢复之热备

原创 2013年11月09日 11:18:19

一 热备

       在上两篇文章(MySQL备份与恢复之冷备MySQL备份与恢复之真实环境使用冷备)中,我们提到了冷备和真实环境中使用冷备。那从这篇文章开始我们看下热备。显然热备和冷备是两个相对的概念,冷备是把数据库服务,比如MySQL,Oracle停下来,然后使用拷贝、打包或者压缩命令对数据目录进行备份;那么我们很容易想到热备就是在MySQL或者其他数据库服务在运行的情况下进行备份。但是,这里存在一个问题,因为生产库在运行的情况下,有对该库的读写,读写频率有可能高,也可能低,不管频率高低,总会就会造成备份出来的数据和生产库中的数据不一致的情况。热备这段时间,其他人不可以操作是不现实的,因为你总不可能终止用户访问Web程序。要解决这个问题,可以采用指定备份策略,比如哪个时间段进行备份,备份哪些数据等等,总之,保证数据的完整性和一致性,切记,备份重于一切!!!

 

       热备采用的是使用mysqldump命令进行备份,此工具是MySQL内置的备份和恢复工具,功能强大,它可以对整个库进行备份,可以对多个库进行备份,可以对单张表或者某几张表进行备份。但是无法同时备份多个库多个表,只有分开备份。下面我们看下热备的示意图,并进行热备模拟。

 

二 示意图

 

三 热备模拟


对单个库进行备份

第一步,移除LVM快照。(如果没有创建,忽略此步)

[root@serv01 data]# lvremove /dev/data/smydata 
Do you really want to remove active logical volume smydata? [y/n]: y
  Logical volume "smydata" successfully removed

 

第二步,设置MySQL的密码

mysql> set password=password("123456");
Query OK, 0 rows affected (0.00 sec)

 

第三步,查看MySQL是否启动。因为是热备,所以要求MySQL服务启动

[root@serv01 data]# /etc/init.d/mysqld status
 SUCCESS! MySQL running (2664)

第四步,导出单个数据库

[root@serv01 data]# cd /databackup/

#本质是导出为SQL
[root@serv01 databackup]# mysqldump -uroot -p123456 --database larrydb
-- MySQL dump 10.13  Distrib 5.5.29, for Linux (x86_64)
--
-- Host: localhost    Database: larrydb
-- ------------------------------------------------------
-- Server version 5.5.29-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 */;

--
-- Current Database: `larrydb`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `larrydb` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `larrydb`;

--
-- Table structure for table `class`
--

DROP TABLE IF EXISTS `class`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `class` (
  `cid` int(11) DEFAULT NULL,
  `cname` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `class`
--

LOCK TABLES `class` WRITE;
/*!40000 ALTER TABLE `class` DISABLE KEYS */;
INSERT INTO `class` VALUES (1,'linux'),(2,'oracle');
/*!40000 ALTER TABLE `class` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `stu`
--

DROP TABLE IF EXISTS `stu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stu` (
  `sid` int(11) DEFAULT NULL,
  `sname` varchar(30) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `stu`
--

LOCK TABLES `stu` WRITE;
/*!40000 ALTER TABLE `stu` DISABLE KEYS */;
INSERT INTO `stu` VALUES (1,'larry01',1),(2,'larry02',2);
/*!40000 ALTER TABLE `stu` 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 2013-09-10 18:56:06

#将输出结果保存到文件中
[root@serv01 databackup]# mysqldump -uroot -p123456 --database larrydb > larrydb.sql


第五步,模拟数据丢失,进入MySQL,删除数据库

[root@serv01 data]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| crm                |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)

mysql> drop database larrydb;
Query OK, 2 rows affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| crm                |
| game               |
| hello              |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)

mysql> exit
Bye

第六步,导入数据

[root@serv01 databackup]# mysql -uroot -p123456 <larrydb.sql

 

第七步,登录MySQL,查看数据是否正常

[root@serv01 data]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| crm                |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)

mysql> use larrydb;
Database changed
mysql> select * from class;
+------+--------+
| cid  | cname  |
+------+--------+
|    1 | linux  |
|    2 | oracle |
+------+--------+
2 rows in set (0.00 sec)

mysql> select * from stu;
+------+---------+------+
| sid  | sname   | cid  |
+------+---------+------+
|    1 | larry01 |    1 |
|    2 | larry02 |    2 |
+------+---------+------+
2 rows in set (0.00 sec)

对多个库进行备份

第一步,查看有哪些数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| crm                |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)
mysql> use game;
Database changed
mysql> show tables;
+----------------+
| Tables_in_game |
+----------------+
| country        |
| fight          |
| hero           |
+----------------+
3 rows in set (0.00 sec)

mysql> select * from country;
+-----+---------+----------+
| cno | cname   | location |
+-----+---------+----------+
|  10 | caowei  | luoyang  |
|  20 | shuhan  | chengdou |
|  30 | sunwu   | nanjing  |
|  40 | houhan  | luoyang  |
|  50 | beisong | kaifeng  |
|  60 | 魏国    | 洛阳     |
+-----+---------+----------+
6 rows in set (0.00 sec)


第二步,备份多个库

[root@serv01 databackup]# mysqldump -uroot -p123456 --databases larrydb game > larrydb_game.sql
[root@serv01 databackup]# ll larrydb_game.sql 
-rw-r--r--. 1 root root 6159 Sep 10 19:05 larrydb_game.sql

第三步,模拟数据丢失。

mysql> drop database game;
Query OK, 3 rows affected (0.01 sec)

mysql> drop database larrydb;
Query OK, 2 rows affected (0.00 sec)
mysql> use crm;
Database changed
mysql> show tables;
+---------------+
| Tables_in_crm |
+---------------+
| test          |
+---------------+
1 row in set (0.00 sec)

mysql> select * from test;
Empty set (0.00 sec)

mysql> drop database crm;
Query OK, 1 row affected (0.00 sec)


第四步,恢复数据

[root@serv01 databackup]# mysql -uroot -p123456 < larrydb_game.sql 

 

第五步,查看数据是否正常

[root@serv01 data]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)

mysql> use game;
Database changed
mysql> select * from country;
+-----+---------+----------+
| cno | cname   | location |
+-----+---------+----------+
|  10 | caowei  | luoyang  |
|  20 | shuhan  | chengdou |
|  30 | sunwu   | nanjing  |
|  40 | houhan  | luoyang  |
|  50 | beisong | kaifeng  |
|  60 | 魏国    | 洛阳     |
+-----+---------+----------+
6 rows in set (0.00 sec)

mysql> use larrydb;
Database changed
mysql> select * from class;
+------+--------+
| cid  | cname  |
+------+--------+
|    1 | linux  |
|    2 | oracle |
+------+--------+
2 rows in set (0.00 sec)

 

备份所有的库

[root@serv01 databackup]# mysqldump --help | grep all-database
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
  -A, --all-databases Dump all the databases. This will be same as --databases
                      --databases= or --all-databases), the logs will be
                      --all-databases or --databases is given.
all-databases                     FALSE

[root@serv01 databackup]# mysqldump -uroot -p123456 --all-databases > all_databases.sql
[root@serv01 databackup]# ll all_databases.sql -h
-rw-r--r--. 1 root root 506K Sep 10 19:16 all_databases.sql

备份某张表或者某几张表

第一步,备份某张表和某几张表

[root@serv01 databackup]# mysqldump game hero country -uroot -p123456 > game_hero_country.sql
[root@serv01 databackup]# ll game_hero_country.sql 
-rw-r--r—. 1 root root 3955 Sep 10 19:11 game_hero_country.sql


第二步,模拟数据丢失

mysql> use game;
Database changed
mysql> show tables;
+----------------+
| Tables_in_game |
+----------------+
| country        |
| fight          |
| hero           |
+----------------+
3 rows in set (0.00 sec)

mysql> drop table hero;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table country;
Query OK, 0 rows affected (0.00 sec)

 

第三步,查看数据是否正常

[root@serv01 databackup]# mysql -uroot -p123456 < game_hero_country.sql 
ERROR 1046 (3D000) at line 22: No database selected
[root@serv01 databackup]# mysql -uroot -p123456 --database game < game_hero_country.sql 

[root@serv01 databackup]# mysql -uroot -p123456 -e "select * from game.country"
+-----+---------+----------+
| cno | cname   | location |
+-----+---------+----------+
|  10 | caowei  | luoyang  |
|  20 | shuhan  | chengdou |
|  30 | sunwu   | nanjing  |
|  40 | houhan  | luoyang  |
|  50 | beisong | kaifeng  |
|  60 | 魏国    | 洛阳     |
+-----+---------+----------+


四 相关阅读



  我的邮箱wgbno27@163.com
  新浪微博@jutdb         
  微信公众平台:JustOracle(微信号:justoracle)
  数据库技术交流群:336882565(加群时验证 From CSDN XXX)
  All is well
  2013年11月9日
  By Larry Wen


katoon Sina CSDN
@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]
版权声明:本文为博主原创文章,未经博主允许不得转载。

MYSQL+InnoDB(备份与恢复)

1.备份与恢复概述 1.热备:对正在运行的数据库进行备份。 原理:1.记录备份开始时,innoDB存储引擎重做日志文件检查点的LSN 2.复制共享表空间文件以及独立表空间文件 ...
  • qq_23211905
  • qq_23211905
  • 2017年08月21日 16:20
  • 147

mysql主从热备

mysql主从热备有2种配置方式,备份某些库或者忽略备份某些库,建议选择后者 master机器 以下是代码片段: vi my.cnf,添加下面的   log-bin  ...
  • babydavic
  • babydavic
  • 2012年12月25日 09:58
  • 10594

Linux下MySQL的主从热备(自动同步)配置

Linux下MySQL的主从热备(自动同步)配置 个人在5.5上配置成功   环境说明: Master:192.168.1.200 Slave:192.168.1.132   M...
  • csnewdn
  • csnewdn
  • 2017年02月06日 12:50
  • 236

mysql热备

双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备,其中一个坏了可以切换到...
  • wodeyuer125
  • wodeyuer125
  • 2014年12月01日 11:50
  • 807

Effective MySQL之备份与恢复

五分钟成为一名DBA   如果我们已经有了一个MySQL生产级系统,而该产品却没有MySQL备份策略,那么我们至少应该做些什么呢?在采取任何备份策略之前,有许多有关数据库大小和存储策略引擎的用法的预...
  • qinghuawenkang
  • qinghuawenkang
  • 2013年10月11日 10:43
  • 2615

MySQL双机热备份实施方案

1、MySQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。实现MySQL数据库的...
  • sleepbird
  • sleepbird
  • 2007年08月15日 16:45
  • 13338

Mysql5.6主从热备配置

数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL、DML都将被同步到从数据库。 一、      实验环境 操作系统:windowsserver 20...
  • clj198606061111
  • clj198606061111
  • 2015年01月26日 15:13
  • 3114

MySQL之——数据库双机热备的配置方法

mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中。 一、说明 1、mysq...
  • l1028386804
  • l1028386804
  • 2015年09月11日 18:15
  • 2126

MYSQL双机热备、主从热备

MYSQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中,实现mysql数据库的热备...
  • Netbug_NB
  • Netbug_NB
  • 2015年08月04日 13:32
  • 1528

MySQL双机热备份的配置及原理

MySQL双机热备份的配置及原理 1.       主题 MySQL双机热备份的配置及原理 2.       摘要 双机热备就是使用MySQL提供的一种主从备份机制实现。其实就是把主数据库(m...
  • yjf840366772
  • yjf840366772
  • 2014年07月31日 18:21
  • 958
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL备份与恢复之热备
举报原因:
原因补充:

(最多只允许输入30个字)