探索MySQL-Cluster奥秘系列之逻辑备份(13)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 数据库的备份恢复一直是数据库工作中的重点内容,如何合理有效地进行数据库的备份,并且当数据库环境发生意外时,能够以最快的时间恢复数据,则是衡量一个DBA是否称职的非常重要的指标。接下来这一小节,我们就来重点看下如何对MySQL-Cluster环境进行逻辑备份。

前面我们讲解了 MySQL Cluster 环境的搭建过程以及日常的维护管理,接下来我们将用 3 个小节讲解MySQL Cluster 集群环境的备份恢复,如逻辑备份、物理备份、数据恢复。

MySQL 数据库的备份方式可以采用逻辑备份也可以采用物理备份,二者的区别如下:

  • 逻辑备份是将数据库中的数据以 SQL 脚本的方式进行导出,导出的数据备份文件是以文本文件的形式存在,逻辑备份适用于数据量小、而且易用平台迁移的场景。
  • 物理备份是以物理拷贝的方式备份数据文件,物理备份则适用于数据量大,对数据备份有时效性要求的场景。

这一小节,我们主要来讲解一下对于 MySQL Cluster 环境,如何进行逻辑备份。

我们在使用逻辑备份方式备份 MySQL 数据库时,可以选用多种备份工具,比如我们有 mysqldump 和mysqlpump。这两种逻辑备份方式的区别是什么呢?

mysqlpump 工具是 mysqldump 工具的增强版,对于小数据量的逻辑备份可以采用 mysqldump,对于大数据量的逻辑备份可以采用 mysqlpump。原因在于 mysqldump 只支持单线程的备份任务,备份效率低,而 mysqlpump 命令则可以进行多线程的数据备份,备份效率高。

接下来,我们分别使用 mysqldump 和 mysqlpump 两种方式来演示如何对 MySQL Cluster 集群环境中的数据进行备份。

首先要讲的是,MySQL Cluster 集群环境的逻辑备份是在 SQL 节点发起的,因为对MySQL Cluster集群环境只有 SQL 节点才可以接收和解析具体的 SQL 命令。而且在演示备份之前,我们要先在当前的MySQL Cluster 环境中创建一些模拟数据。

mysql> create table tt1 (id int,name char(10)) engine=ndb;
Query OK, 0 rows affected (0.05 sec)
mysql> insert into tt1(id,name) values(1,'a'),(2,'b'),(3,'c');
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from tt1;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
+------+------+
3 rows in set (0.03 sec)
mysql> create table tt2(emp_id int,emp_name char(10),emp_age int) engine=ndb;
Query OK, 0 rows affected (0.05 sec)
mysql> insert into tt2(emp_id,emp_name,emp_age) values(1,'alex',21),(2,'tom',25);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from tt2;
+--------+----------+---------+
| emp_id | emp_name | emp_age |
+--------+----------+---------+
|      1 | alex     |      21 |
|      2 | tom      |      25 |
+--------+----------+---------+
2 rows in set (0.01 sec)

通过上面的代码,我们创建了两张测试表 tt1 和 tt2,接下来我们对数据进行备份。首先,我们使用 mysqldump 工具来进行数据的备份。

mysqldump 的数据备份

注意,下面的命令是只对 testdb 数据库中的数据信息进行备份,因为我们前面创建的测试表是存放在testdb 数据库下的。

[mysql@mysql04 ~]$ mysqldump  testdb -uroot -p > testdb_1.bak
Enter password: 
[mysql@mysql04 ~]$ ls -l
total 4
-rw-rw-r-- 1 mysql mysql   2051 Mar 10 16:00 testdb_1.bak

接下来,我们查看通过 mysqldump 工具备份的文件内容。

[mysql@mysql04 ~]$ more testdb_1.bak 
-- MySQL dump 10.13  Distrib 5.7.36-ndb-7.6.20, for linux-glibc2.12 (x86_64)
--
-- Host: localhost    Database: testdb
-- ------------------------------------------------------
-- Server version       5.7.36-ndb-7.6.20-cluster-gpl
/*!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 */;
--
-- Table structure for table `tt1`
--
DROP TABLE IF EXISTS `tt1`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tt1` (
  `id` int(11) DEFAULT NULL,
  `name` char(10) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `tt1`
--
LOCK TABLES `tt1` WRITE;
/*!40000 ALTER TABLE `tt1` DISABLE KEYS */;
INSERT INTO `tt1` VALUES (1,'a'),(3,'c'),(2,'b');
/*!40000 ALTER TABLE `tt1` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `tt2`
--
DROP TABLE IF EXISTS `tt2`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tt2` (
  `emp_id` int(11) DEFAULT NULL,
  `emp_name` char(10) DEFAULT NULL,
  `emp_age` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `tt2`
--
LOCK TABLES `tt2` WRITE;
/*!40000 ALTER TABLE `tt2` DISABLE KEYS */;
INSERT INTO `tt2` VALUES (1,'alex',21),(2,'tom',25);
/*!40000 ALTER TABLE `tt2` 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 2022-03-10 21:14:40

这样我们就实现了对数据库 testdb 的逻辑备份。当然了,我们其实可以对 MySQL Cluster 集群下的全部数据库进行数据的备份,这个时候只是需要将 -d 参数替换为 --all-databases 即可,具体操作如下所示:

[mysql@mysql04 ~]$ mysqldump  --all-databases -uroot -p > all_db_1.bak
Enter password:

那么以上就是关于使用 mysqldump 工具来对 MySQL Cluster 集群环境下数据信息的备份。

mysqlpump 的数据备份

使用 mysqlpump 工具来对 MySQL Cluster 集群环境中数据进行备份的操作和 mysqldump 非常类似,具体的操作命令如下所示:

[mysql@mysql04 ~]$ mysqlpump testdb -uroot -p > testdb_2.bak
Enter password: 
Dump progress: 1/2 tables, 0/5 rows
Dump completed in 58 milliseconds
[mysql@mysql04 ~]$ ll
total 4
-rw-rw-r-- 1 mysql mysql 1360 Mar 10 16:02 testdb_2.bak

接下来,我们查看通过 mysqlpump 工具备份好的文件内容。

[mysql@mysql04 ~]$ more  testdb_2.bak
-- Dump created by MySQL pump utility, version: 5.7.36-ndb-7.6.20, linux-glibc2.12 (x86_64)
-- Dump start time: Thu Mar 10 21:17:17 2022
-- Server version: 5.7.36
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE;
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET @@SESSION.SQL_LOG_BIN= 0;
SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE TABLE `testdb`.`tt1` (
`id` int(11) DEFAULT NULL,
`name` char(10) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8
;
INSERT INTO `testdb`.`tt1` VALUES (1,"a"),(3,"c"),(2,"b");
CREATE TABLE `testdb`.`tt2` (
`emp_id` int(11) DEFAULT NULL,
`emp_name` char(10) DEFAULT NULL,
`emp_age` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8
;
INSERT INTO `testdb`.`tt2` VALUES (2,"tom",25),(1,"alex",21);
SET TIME_ZONE=@OLD_TIME_ZONE;
SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET SQL_MODE=@OLD_SQL_MODE;
-- Dump end time: Thu Mar 10 21:17:17 2022

mysqlpump 工具备份全部数据库的操作命令如下:

[mysql@mysql04 ~]$ mysqlpump --all-databases -uroot -p > all_db_2.bak
Enter password: 
Dump completed in 444 milliseconds

我们可以看到,使用 mysqlpump 工具和使用 mysqldump 工具备份好的文件内容基本上是一样的。

以上就是关于在 MySQL Cluster 集群环境下对于数据备份方面的讲解和演示,你在 MySQL Cluster 集群环境下进行逻辑备份时,一定要注意,必须在 SQL 节点执行相应的备份命令,或者在其他的客户端服务器上,执行的备份命令中的连接地址必须为 SQL 节点的地址。

好了,关于 MySQL Cluster 集群环境下的数据备份方面的内容就讲解到这里。下一小节我们来讲解在MySQL Cluster 集群环境下如何对数据库中的数据进行物理备份。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
SQL 关系型数据库 MySQL
MySQL的主从结构是通过一系列的步骤搭建出来的
MySQL的主从结构是通过一系列的步骤搭建出来的
35 1
|
SQL 存储 移动开发
【MySQL技术内幕】8.3-逻辑备份
【MySQL技术内幕】8.3-逻辑备份
141 0
|
SQL 关系型数据库 MySQL
探索MySQL-Cluster奥秘系列之日志管理(12)
无论是对于哪种数据库产品,日志的重要性是不言而喻的,所以掌握如何对于MySQL-Cluster集群的日志进行管理,对于我们每一个维护MySQL-Cluster技术人员来说都是非常重要的。
190 1
|
存储 关系型数据库 MySQL
探索MySQL-Cluster奥秘系列之物理备份(14)
上一小节,我们学习了如何对于MySQL-Cluster集群环境进行逻辑备份,在这一小节中,我们则来看看如何进行物理备份,其实对于逻辑备份和物理备份而言,这两种备份方式都很重要,但是在实际的工作环境中,由于我们接触的环境数据量都比较大,所以使用物理备份更为合适些。
118 0
|
存储 SQL 关系型数据库
探索MySQL-Cluster奥秘系列之数据恢复(15)
通过前面两个小节,我们分别讲解了对于MySQL-Cluster集群环境的两种数据备份方式--逻辑备份和物理备份,但是单单知道如何备份是远远不够的。我们还需要明白,当MySQL-Cluster数据库环境出现故障时,我们应该如何进行数据的恢复,只有这样才能更好地维护好MySQL-Cluster环境。
158 0
|
存储 SQL 安全
探索MySQL-Cluster奥秘系列之数据节点(4)
在前面的小节中,我们学习了MySQL-Cluster集群的管理节点和SQL节点相关的知识,那么接下来我们来了解下MySQL-Cluster集群的数据节点的内容。
211 0
|
SQL 监控 索引
探索MySQL-Cluster奥秘系列之管理节点(2)
在上一小节中,我们对于MySQL-Cluster这款产品的一些背景内容及基本的概念进行了介绍,那么在这一小节中,我们重点来讲解下MySQL-Cluster集群的管理节点。
175 0
|
SQL 缓存 关系型数据库
探索MySQL-Cluster奥秘系列之管理节点配置(6)
在基础环境准备好之后,在这一小节中,我们来看如何对MySQL-Cluster集群环境的管理节点如何进行配置。
172 0
|
存储 SQL 关系型数据库
探索MySQL-Cluster奥秘系列之测试 NDB 数据引擎(9)
前面,我们已经对于MySQL-Cluster集群环境准备好了,那么接下来,我们就要在这个环境中做一些基本的测试,在这一小节中,我们来对NDB存储引擎的实际运行效果进行一个简单的测试。
317 0
|
SQL 存储 监控
探索MySQL-Cluster奥秘系列之服务启动(8)
经过前面几个小节的配置,MySQL-Cluster集群环境基本上就配置好了,接下来我们就来看下如何对当前配置好的MySQL-Cluster环境进行服务的启动。
198 0