一,参数详解

[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. .NET Core开发的iNeuOS工业互联平台,升级四大特性:配置数据接口、图元绑定数据、预警配置和自定义菜单

    目       录 1.      概述... 2 2.      演示信息... 2 3.      iNeuView(Web组态)配置数据接口... 2 4.      iNeuView(Web组 ...

  2. DOCKER学习_002:Docker的容器管理

    一 Docker的基本信息 前面已经安装了Docker,现在看一下已安装Docker的安装环境以及其他信息 1.1 系统环境 [root@docker-server3 ~]# uname -r -.e ...

  3. DEVOPS技术实践_04:Jenkins参数化构建

    一.参数化构建 1.1 各个参数的信息 凭据参数存储一个用户的账号密码信息,等等,运用最多的是选项参数 1.2 使用选项参数 构建已经变成参数化构建 1.3 获取这个值,修改Jenkinsfile文件 ...

  4. 利用Python实现高度定制专属RSS

    前言 本文转载自个人博客网站,欢迎来访订阅.本篇属于定制RSS系列终极一弹,是三种方式中自由度最高.定制化最强的,也需要一定的编程能力.附上前两篇链接:1.利用Feed43为网站自制RSS源:2.如何 ...

  5. 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  6. 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法

    最近在学习微信小程序时遇到了个问题:官方的背景音乐的api实例代码中的音乐src不管用(可能有期限,后面的方法获取的src同样可能有期限),因此本人只能自己去寻找办法获取src,现将方法记录在下面.( ...

  7. docker练习-堆栈

    介绍 分布式应用程序层次结构的顶部:堆栈. 堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起. 单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈 ...

  8. 2019 年百度之星 初赛一 1002 Game

    传送门 Problem Description 度度熊在玩一个好玩的游戏.游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.现在他要依次完成 n 个任 ...

  9. JavaSelenium 页面常用基本操作语法

    元素定位                 findElement() 方法返回一个元素, 如果没有找到,会抛出一个异常 NoElementFindException()              fi ...

  10. Deferred shading rendering path翻译

    Overview 概述 When using deferred shading, there is no limit on the number of lights that can affect a ...