mysql数据库备份注意,Tips: MySQL数据库使用mysqldump备份恢复时的注意事项
Tips: MySQL数据库使用mysqldump备份恢复时的注意事项背景mysqldump采坑点1. -E, -R, --triggers2. drop table3. --set-gtid-purged4. --single-transaction5. --master-data6. -e, --extended-insert, --skip-extended-insert7. -F, --flush-logs8. 字符集9. 注释10. 其它
背景
mysqldump作为MySQL数据库逻辑备份的常用工具,对于其备份出来的文件,应该进行确认,防止在恢复时误删数据。mmysqldump提供了很多选项,需要确认无误后再进行使用。
MySQL主从和双机为MySQL复制的常见架构,在此类集群中,对于数据的恢复,更需要小心,确认无误后再进行操作。
mysqldump采坑点
1. -E, -R, --triggers
常用的mysqldump的格式为(例如备份wstest.t1):
mysqldump -uroot -p -P 8001 -h 192.168.101.185 -E -R --triggers wstest t1 > wstest_t1.sql
这样既可备份wstest.t1及表上的EVENTS,ROUTINES,TRIGGERS,下文默认加上三者,但是在备份时需要注意,因为若未备份,则在恢复时候虽然数据正确,但是实例运行起来后,会出现问题。
2. drop table
默认情况下,mysqldump备份出来的文件中,在恢复表时候,会先drop table。
按照第一点的命令,备份得到的文件内容
-- MySQL dump 10.13 Distrib 8.0.12, for linux-glibc2.12 (x86_64)
--
-- Host: 192.168.101.185 Database: wstest
-- ------------------------------------------------------
-- Server version 8.0.12
/*!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 */;
SET NAMES utf8mb4 ;
/*!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 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
--
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ 'b3e550a7-b009-11e8-aca0-000c299263cc:1-284814';
--
-- Table structure for table `t1`
--
------注意在create表之前,先进行了drop--------
**DROP TABLE IF EXISTS `t1`;**
/*!40101 SET @saved_cs_client = @@character_set_client */;
SET character_set_client = utf8mb4 ;
CREATE TABLE `t1` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `uniq_b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=111112 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t1`
--
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (3,10004,100),(11,10016,30000),(431,12,99),(436,18,33),(111111,23231313,12313131);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Dumping events for database 'wstest'
--
--
-- Dumping routines for database 'wstest'
--
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!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 2019-06-11 10:23:09
若环境中已经存在新的数据,则这种方式将会删除表后重建,导致数据丢失。所以,可以在命令中加上**–skip-add-drop-table**:
mysqldump --skip-add-drop-table wstest t1 > wstest_t1.sql
.
从备份文件可以看出,在新建表之后,会使用insert into语句进行数据的插入。为了防止有重复数据中断恢复(恢复大表的时候,花费时间比较长,若中断后排错,又需要重新恢复,耗时较长),还可以使用**–replace**:
mysqldump --skip-add-drop-table --replace wstest t1 > wstest_t1.sql
得到的备份文件的插入数据部分为:
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
REPLACE INTO `t1` VALUES (3,10004,100),(11,10016,30000),(431,12,99),(436,18,33),(111111,23231313,12313131);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
3. --set-gtid-purged
执行第一点的mysqldump命令时,会有一个warning:
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don’t want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
需要关注**–set-gtid-purged**选项,在上文中备份出来的文件中,有如下两行:
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
这两行的意思是:不把恢复产生的sql记录在binlog中。这点尤其重要,因为在MySQL主从,或者MySQL双机的环境,若进行恢复,则会同步到对端,这样就存在一个问题:
若一端正常在数据写入,需要回复另一端的时候,此时,有这两行的话,相对来说就会使恢复过程更安全。 否则,在另一端也会执行备份文件中的内容(若备份文件中有类似drop table的选项,那将是一个删库的结果~)。
若是在一个全新的一个集群环境做恢复,那么可以加上**–set-gtid-purged=OFF**,这样,可在在从库中也收到binlog信息,得到一个数据一致的集群。
4. --single-transaction
备份时创建一致的快照,在单个事务中转储所有表。强烈建议开启,并配合–master-data使用
由于备份是一个阶段式的dump,所以可能出现:A表已经备份,B表关联了A的数据,那么再备份B表时,A表没有相关的记录。就会造成恢复的时候,出现数据逻辑不完整的情况。
5. --master-data
–master-data决定是否将binary log position和filename 信息记录在备份文件中。
=1:直接记录在文件中,恢复时会执行change master to…:
--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='mysql8001.000025', MASTER_LOG_POS=159500640;
=2:以注释的方式记录在备份文件:
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql8001.000025', MASTER_LOG_POS=159500640;
6. -e, --extended-insert, --skip-extended-insert
加上 -e 或者 –extended-insert,可以使insert语句为一个insert插入多条数据,如上文所示。
加上**–skip-extended-insert**, 则为一条insert插入一条数据:
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (3,10004,100);
INSERT INTO `t1` VALUES (11,10016,30000);
INSERT INTO `t1` VALUES (431,12,99);
INSERT INTO `t1` VALUES (436,18,33);
INSERT INTO `t1` VALUES (111111,23231313,12313131);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
7. -F, --flush-logs
在进行逻辑备份的全量+增量的恢复时,往往需要找到对应的binlog的position信息,所以在备份时,建议加上**-F**,这样,在dump之前会先flush logs,产生新的binlog文件,便于恢复。建议和–master-data一起使用
Note that if you dump many databases at once (using the option
–databases= or --all-databases), the logs will be
flushed for each database dumped. The exception is when
using --lock-all-tables or --master-data: in this case
the logs will be flushed only once, corresponding to the
moment all tables are locked. So if you want your dump
and the log flush to happen at the same exact moment you
should use --lock-all-tables or --master-data with
–flush-logs.
8. 字符集
可以看到备份出的文件中有SET NAMES utf8mb4 ; 等关于字符集的字样,同样在辈分时候应该注意,防止字符集不一致出现的数据不可用。
9. 注释
对于mysqldump中的注释部分,同样需要进行确认,例如上文中的SQL_MODE,TIME_ZONE等等。
10. 其它
(1) LOCK TABLE
对于表的回复操作,会有LOCK TABLE … WRITE操作,这个在使用时一定要注意,必要时(前提是已经重复确认数据不会产生加锁等相互影响),可以加上**–skip-add-locks ** 选项取消加表锁。
(2) – Dump completed on
备份结束后,可以查看最后一行是否为:– Dump completed on …
mysql数据库备份注意,Tips: MySQL数据库使用mysqldump备份恢复时的注意事项相关推荐
- mysql web备份软件_Windows下实现MySQL自动备份的批处理(复制目录或mysqldump备份)
今天有个需求要在 Windows 下实现数据库自动备份,拼凑了一下解决办法. 实现的特性 可指定多个数据库 按照 年/月/日 的方式组织备份 可选的使用 WinRAR 压缩备份 使用计划任务实现定时备 ...
- mysql 备份多个库_使用mysqldump备份多个库
mysqldump一次备份多个库 一个数据库实例中有20+个库,本次备份需要备份其中的10+个库,使用mysqldump直接进行备份踩到一个warning和一个error. 数据库版本:5.7.26 ...
- MySQL导出数据反单引号_使用mysqldump导出数据时对字段中包含的单引号的处理
最近在做一个日志统计项目,有一个辅助表是在MySQL数据库的,现在要将其迁移到Postgresql,自然是先用mysqldump将MySQL里面的数据导出,然后再导入到Postgresql即可.但在实 ...
- 【数据库运维】MYSQL备份恢复管理(上)
目录 MYSQL备份恢复管理 一,备份类型 二,逻辑备份优缺点 三,MySQL备份内容 四,MySQL备份工具 五,MySQL备份策略 1,策略一:直接拷贝数据库文件 案例:直接拷贝备份数据库comp ...
- 如何查看mysql备份的情况_MySQL数据库备份详解(示例代码)
原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...
- mysql黑窗口常用命令_mysql数据库常用命令
1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show ...
- mysql命令or_常用的MySQL命令大全
一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -ur ...
- mysql常用命令orderby_常用mysql命令大全
一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -ur ...
- mysql数据库备份方案_MySQL平台数据库备份方案详细说明
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表已破坏,用 ...
最新文章
- 模块就是一个普通的python程序文件_Python-模块和包
- 【阿里云 Linux 服务器】购买 Linux 到项目部署过程中遇到的问题,部署 SpringBoot 项目到服务器上,在手机上安装 Android 程序进行测试
- 显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...
- 代码分析 | 单细胞转录组clustering详解
- 启用文件系统缓存,提高Tuxera NTFS运作性能
- 基于单片机智能药盒控制系统设计(含论文)
- 仿微信朋友圈发表图片拖拽和删除功能
- 跟随鼠标移动-demo
- 红月OD反汇编实时显示坐标,背景色可透明也可以不透明
- tensorboard侧视_如何调整侧视/后视镜(以及为什么需要3台显示器)
- 特种浓缩分离:中药提取液的澄清过滤技术
- 导函数连续、可导、可微、连续、有界、可积的关系,史上最全!一张图搞定!
- 用c语言反向输出5ge字符,C语言入门:05.scanf函数
- 蛇形字符串、驼峰字符串转换
- “知识共享”与智能数学老师
- 台达 PLC 浮点数 乘法和除法
- 2019经济寒冬,软件定制开发公司的竞争力在哪里??
- 求和1+2+......+n
- springboot实现读取excel插入数据库
- 每一个优秀的人,都有一段默默努力的时光