mysqldump 备份与恢复操作记录
[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 备份与恢复操作记录的更多相关文章
- MySQL备份与恢复-mysqldump备份与恢复
这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...
- centos 6x系统下源码安装mysql操作记录
在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...
- Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...
- Oracle 10g数据库备份与恢复操作手册
Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...
- mysql数据库主从操作记录
master数据库已投入生产一段时间后,做主从复制的操作记录 环境: master库:172.18.237.13slave库:172.18.237.14 mysql版本说明: master:mysql ...
- Mysql更换MyISAM存储引擎为Innodb的操作记录
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- Linux下修改系统编码的操作记录
Linux系统安装后,发现中文显示乱码.因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8)操作记录如下:1)检查linux的系统编码检查linux的系统编码,确定系 ...
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
随机推荐
- Spark RDD的弹性到底指什么
RDD(Resiliennt Distributed Datasets)抽象弹性分布式数据集对于Spark来说的弹性计算到底提现在什么地方? 自动进行内存和磁盘数据这两种存储方式的切换 Spark 可 ...
- hdu3499---玄学的分层图
枚举固然可以,但是我还是想看看分层图.... 如本题所述 ,从上图到下图就是一个折扣的过程,上部分只有一种办法下去,下部分图没有办法去上面,该模型十分的巧妙啊!!! 下面我来演示一下自己改的样例吧 紫 ...
- 小白进阶之路-python基本运算符
1.算数运算符(+.-.*./.%.**(幂 二次方.三次方).//(地板除,返回商的整数部分) 2.比较运算符(==.!=.<>(不等于).>.<.>=.<=) ...
- 解决模糊查询问题 element UI 从服务器搜索数据,输入关键字进行查找
做项目是遇见下拉框的形式,后台返回来3万多条,用element UI中的select选择器中的搜索还是会造成页面卡顿和系统崩溃,因此用了它的远程搜索功能,发现还不错,解决了这个问题. 代码1 < ...
- $loj\ 6045$ [雅礼集训 $2017\ Day8$] 价 网络流
正解:网络流 解题报告: 传送门$QwQ$ 这题还,挺有趣的我$jio$得. 考虑依然先是照着最小割的模子建图呗,然后从意义上来分析,割一条边就相当于不吃一种减肥药/买一种药材.由已知得,买的药材数量 ...
- 洛谷P1147 连续自然数和 题解 枚举
题目链接:https://www.luogu.com.cn/problem/P1147 题目大意: 给你一个数 \(M\) ,求有多少对连续自然数对之和为 \(M\),输出这列连续自然数对的首项和末项 ...
- 在Mac/linux上查找(并终止)进程锁定特定端口的几种方法
前言 无论是做网站还是做产品,经常使用到杀死某个进程的方法.制作脚本并熟悉运用是一个非常节省时间的方法. 基本命令 查找: [sudo] lsof -i :3000 杀戮 kill -9 方法一 ...
- docker-网络驱动
网络驱动程序 Docker的网络子系统是可插拔的,使用驱动程序.默认情况下存在多个驱动程序,并提供核心网络功能: bridge:默认网络驱动程序.如果未指定驱动程序,则这是要创建的网络类型.当的应用程 ...
- ENS使用指南系列之一 [ 注册 .eth 域名详细教程 ]
ENS 域名系统中目前支持三种顶级域名,分别是 .eth .xyz .luxe.其中, .eth 是 ENS 系统的原生域名,是由一系列智能合约控制的去中心化的域名,另外两种是从互联网域名中接入的,要 ...
- jupyter启动后,浏览器自动打开,但是显示空白
解决办法 1.在Windows菜单中,搜索regedit,打开它.2.导航到计算机> HKEY_CLASSES_ROOT> .js> Content Type(如果没找到需要新建或直 ...