各位用户为了找寻关于MySQL备份与恢复之热备(3)的资料费劲了很多周折。这里教程网为您整理了关于MySQL备份与恢复之热备(3)的相关资料,仅供查阅,以下为您介绍关于MySQL备份与恢复之热备(3)的详细内容

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

 

热备模拟

1、对单个库进行备份 第一步,移除LVM快照。(如果没有创建,忽略此步)

? 1 2 3 [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的密码

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

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

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

第四步,导出单个数据库

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 [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,删除数据库

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [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

第六步,导入数据

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

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [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)

对多个库进行备份 第一步,查看有哪些数据库

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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)

第二步,备份多个库

? 1 2 3 [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

第三步,模拟数据丢失。

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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)

 

第四步,恢复数据

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

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [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)

  备份所有的库

? 1 2 3 4 5 6 7 8 9 10 [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

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

? 1 2 3 [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

第二步,模拟数据丢失

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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)

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [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 | 魏国 | 洛阳 | +-----+---------+----------+

 

通过这两天关于MySQL热备和冷备的学习,大家是不是对MySQL备份与恢复的了解更加深入了,不管是冷备还是热备其目的都是一致的保证数据的完整性和一致性,切记,备份重于一切!!!

相信今天所学的知识在之后的学习工作中对大家有所帮助。