一,参数详解

[root@bug ~]# ? mysqldump

--master-data[=#]

mysqldump导出数据时,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,在slave上导入数据时就会执行这个语句,salve就会根据指定这个文件位置从master端复制binlog。

--master-data=2表示在dump过程中记录主库的binlog和pos点,并在dump文件中注释掉这一行;

--master-data=1表示在dump过程中记录主库的binlog和pos点,并在dump文件中不注释掉这一行,即恢复时会执行;

默认情况下这个值是1。

--lock-tables   #Lock all tables for read.这样在flush tables with read lock后,直到整个dump过程结束,断开线程后才会unlock tables释放锁,整个dump过程其他线程不可写,从而保证数据的一致性,适用于MyISAM存储引擎, 因为MyISAM存储引擎不支持事物。

--single-transaction #设置事务的隔离级别,适用于innodb存储引擎。

--dump-slave=2表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,记录当时主库的binlog和pos点,并在dump文件中注释掉这一行;

--dump-slave=1表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,记录当时主库的binlog和pos点,并在dump文件中不注释掉这一行;

注意,在从库上执行备份时,即--dump-slave=2,这时整个dump过程都是stop io_thread的状态。

详细信息,引用一位大牛的文章:

https://blog.csdn.net/rewiner120/article/details/70598828

,操作记录

适用于innodb引擎,mysql5.7,编译安装

2.1构造测试数据

mysql> create database test;
Query OK, row affected (0.00 sec) mysql> use test
Database changed mysql> create table a(x int() not null auto_increment primary key);
Query OK, rows affected (0.01 sec) mysql> insert into a values();
Query OK, row affected (0.00 sec) mysql> insert into a values(),(),(),(),(),(),(),(),(),();
Query OK, rows affected (0.00 sec)
Records: Duplicates: Warnings: mysql> select count(*) from a;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (0.00 sec)

2.2备份数据

[root@bug ~]# mysqldump --single-transaction\
> --flush-logs --master-data=\
> --set-gtid-purged=off --all-databases\
> -uroot -porange -S/mysqldb/d_red/mysql.sock\
> >/mysqldb/backup/`date "+%Y_%m_%d_%H_%M"`.dump [root@bug ~]# cd /mysqldb/backup/
[root@bug backup]# ll
总用量
-rw-r--r-- root root 8月 : 2018_08_31_20_01.dump

2.3,模拟业务,误删数据

mysql> drop table a;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from a;
ERROR 1146 (42S02): Table 'test.a' doesn't exist

  

2.4,使用mysqldump恢复数据

[root@bug ~]# mysql -uroot -porange -S/mysqldb/d_red/mysql.sock< /mysqldb/backup/2018_08_31_20_01.dump

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3161 (HY000) at line 70: Storage engine MyISAM is disabled (Table creation is disallowed).

  

2.5恢复失败,排查错误

[root@bug log]# more general.log

2018-08-31T20:01:50.058290+08:00           22 Query     DROP TABLE IF EXISTS `columns_priv`
2018-08-31T20:01:50.060213+08:00 22 Query /*!40101 SET @saved_cs_client = @@character_set_client */
2018-08-31T20:01:50.060407+08:00 22 Query /*!40101 SET character_set_client = utf8 */
2018-08-31T20:01:50.060973+08:00 22 Query CREATE TABLE `columns_priv` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
`Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges'
2018-08-31T20:01:50.062082+08:00 22 Quit
2018-08-31T20:01:50.102468+08:00 21 Query show engine MyISAM status #日志文件到此停止输出,初步判断因为出现show engine MyISAM status语句,导致mysqldump脚本执行过程报错跳出.
#查看备份集文件,重点检查存储引擎部分,
[root@bug backup]# more 2018_08_31_20_01.dump -- Table structure for table `columns_priv`
-- DROP TABLE IF EXISTS `columns_priv`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `columns_priv` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
`Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges';
/*!40101 SET character_set_client = @saved_cs_client */;

#果然,在备份的过程中,创建权限表的时候,mysqldump使用了MyISAM引擎,而数据库设置的默认存储引擎是innodb;
#到数据库内,进行进一步确认 mysql> show variables like '%engine%';
+----------------------------------+------------------+
| Variable_name | Value |
+----------------------------------+------------------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | MyISAM,FEDERATED |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+------------------+
4 rows in set (0.01 sec) #问题锁定无误,MyISAM引擎被禁用,导致恢复时,无法创建权限表

  

2.5故障排除

mysql> set disabled_storage_engines=FEDERATED;
ERROR 1238 (HY000): Variable 'disabled_storage_engines' is a read only variable #在数据库内修改失败,此参数为只读,只能去配置文件内修改,因为我采用的是个性化编译安装,所以默认配置文件为自定义的/mysqldb/d_red/conf/red.cnf. [root@bug ~]# vi /mysqldb/d_red/conf/red.cnf disabled_storage_engines ="FEDERATED" #找到disabled_storage_engines参数,修改赋值. #因为修改的是静态参数,所以需要重启数据库才能生效, [root@bug bin]# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/mysqldb/d_red/mysql.sock' (2) #关闭数据库进程后,发现无法登陆 [root@bug bin]# ps -ef|grep mysql
root 19400 7903 0 20:36 pts/1 00:00:00 grep --color=auto mysql #发现没有mysqld进程,也没有mysqld_safe进程,判断为启动失败 #查看错误日志 [root@bug log]# more mysql.err 2018-08-31T20:33:38.990846+08:00 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2018-08-31T20:33:38.991415+08:00 0 [ERROR] unknown variable 'rpl_semi_sync_master_enabled=ON' #提示权限表故障,原因很简单,当在使用mysqldump恢复时,默认情况下,恢复某表前,mysqldump会先删除同名的表,但权限表删除后,又没能恢复成功,导致数据库无法启动. #解决思路,既然手里有备份的数据文件,只要构造全部的系统表的表结构就行了 #进行数据库的初始化,就能解决表构造表结构的问题. [root@bug base]# mysqld --defaults-file=/mysqldb/d_red/conf/red.cnf --initialize-insecure --user=mysql --datadir=/mysqldb/d_red/data/ #因为使用了--initialize-insecure参数,所以初始化后的数据库密码为空 #使用mysqldump恢复数据,只能在数据库启动的情况下进行 #mysqldump默认会将数据恢复到同名的库下 #所以要先启动数据库,登陆,创建同名的库 [root@bug d_red]# mysql -uroot -S/mysqldb/d_red/mysql.sock mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.01 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec) mysql> create database a;
Query OK, 1 row affected (0.01 sec) #应用备份文件,进行数据恢复 [root@bug data]# mysql -uroot -p123456 -S/mysqldb/d_red/mysql.sock< /mysqldb/backup/2018_08_31_20_01.dump
mysql: [Warning] Using a password on the command line interface can be insecure. #登陆数据库,进行验证
mysql> use test
Database changed
mysql> select * from a;
+----+
| x |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
+----+
11 rows in set (0.00 sec) #被误删的数据已经全部找回

  

mysqldump 备份与恢复操作记录的更多相关文章

  1. MySQL备份与恢复-mysqldump备份与恢复

    这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...

  2. centos 6x系统下源码安装mysql操作记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...

  3. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  4. Oracle 10g数据库备份与恢复操作手册

    Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...

  5. mysql数据库主从操作记录

    master数据库已投入生产一段时间后,做主从复制的操作记录 环境: master库:172.18.237.13slave库:172.18.237.14 mysql版本说明: master:mysql ...

  6. Mysql更换MyISAM存储引擎为Innodb的操作记录

    一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...

  7. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  8. Linux下修改系统编码的操作记录

    Linux系统安装后,发现中文显示乱码.因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8)操作记录如下:1)检查linux的系统编码检查linux的系统编码,确定系 ...

  9. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

随机推荐

  1. Iterator接口介绍(迭代器)

    第一步 第二步 第二步用while 第二步用for循环(了解) 备注:

  2. HTML和JavaScript代码分离、平稳退化(1)

    使用的编辑器是Hbuilder,浏览器是Chrome. HTML和JavaScript代码分离,会使得修改网页功能和代码的阅读与维护会轻松的许多,不用在DOM中阅读大量的JavaScript代码. 文 ...

  3. 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)

    [题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...

  4. 洛谷$P3227\ [HNOI2013]$切糕 网络流

    正解:网络流 解题报告: 传送门! 日常看不懂题系列,,,$QAQ$ 所以先放下题目大意趴$QwQ$,就说有个$p\cdot q$的矩阵,每个位置可以填一个$[1,R]$范围内的整数$a_{i,j}$ ...

  5. SQL预处理

    每向数据库发送一条SQL语句,数据库中的SQL解释器就会将SQL语句转换成数据库底层命令,然后执行该命令完成相关的数据库操作.如果频繁的向数据库提交SQL语句,势必会增加数据库中SQL解释器的负担,进 ...

  6. K8S集群搭建

    K8S集群搭建 摘要 是借鉴网上的几篇文章加上自己的理解整理得到的结果,去掉了一些文章中比较冗余的组件和操作,力争做到部署简单化. K8S组件说明 Kubernetes包含两种节点角色:master节 ...

  7. Spring Boot中@Scheduled注解的使用方法

    Spring Boot中@Scheduled注解的使用方法 一.定时任务注解为@Scheduled,使用方式举例如下 //定义一个按时间执行的定时任务,在每天16:00执行一次. @Scheduled ...

  8. 51nod 1086背包问题V2 (完全背包模板题)

    1086 背包问题 V2 1 秒 131,072 KB 20 分 3 级题 题目描述 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1, ...

  9. Netty快速入门(01)Linux I/O模型介绍

    Netty简述 Netty是一个高性能的网络编程框架. 上面提到了几个关键的字眼,高性能,网络编程,框架.这些概括Netty的本质. Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务 ...

  10. 【Java基础总结】反射

    1. 什么是反射 Class.Method.Field.Constructor,它们是反射对象.它们是类.方法.成员变量.构造器,在内存中的形式. 也就是万物皆对象!类是类型.方法是类型.成员变量是类 ...