(十二)MySQL逻辑备份mysqldump
(1)简介
- 语法
mysqldump -h服务器 -u用户名 -p密码 [-P端口号] [参数] 数据库名 >备份文件.sql - 关于数据库:
-A,--all-databases 所有库,会生成DDL语句(创建数据库的语句和进入数据库的语句,导入的时候不需要指定数据)
test 数据库,没有指定其它参数,导入到数据的时候需要指定导入到哪个数据库,不会生成创建数据库的DDL语句,mysql -uroot -predhat testdb <1.sql
test t1 t2 test数据库的表t1和t2 ,导入到数据的时候需要指定导入到哪个数据库,不会生成创建数据库的DDL语句
-B, --databases bbs test mysql 多个数据库 ,会生成DDL语句(创建数据库的语句和进入数据库的语句,导入的时候不需要指定数据)mysql -uroot -predhat <1.sql
- 其它参数说明
--single-transaction #InnoDB 一致性服务可用性
-x #MyISAM 一致性服务可用性
-E #备份时间调度器代码
-R #备份存储过程和存储函数
-F #备份之前刷新日志
-d #只备份表结构
-t #只备份表数据
--triggers #备份触发器
--master-data=1|2 #用于记录binlog日志位置和文件名追加到文件中,一般使用1
(2)机器损坏备份恢复
前提:需要有完全备份和增量备份(二进制日志文件)
1)备份
- 需要提前开启二进制日志
#vim /etc/my.cnf
log-bin=/data/mydata/mysql-bin/master
server-id=1
#mkdir /data/mydata/mysql-bin
#chown -R mysql.mysql /data/mydata/mysql-bin
#systemctl restart mysqld
- 准备数据
mysql> create database testdb;
mysql> create table testdb.test(id int);
mysql> insert into testdb.test values(1);
- 完整备份
mysqldump -uroot -pMysql@123 -A -R --single-transaction --master-data=1 --flush-logs >/backup/$(date +%F-%H)-mysql-all.sql \\需要提前创建好备份目录
生成目录:ll /backup/2018-04-26-00-mysql-all.sql
- 生成一些数据,用于使用二进制日志恢复
mysql> insert into testdb.test values(2);
mysql> flush logs;
mysql> insert into testdb.test values(2);
mysql> insert into testdb.test values(3);
mysql> flush logs;
mysql> insert into testdb.test values(4);
mysql> flush logs;
mysql> select * from testdb.test;
+------+
| id |
+------+
| 1 |
| 2 |
| 2 |
| 3 |
| 4 |
+------+
- 把二进制文件拷贝了其它目录,我这里就先放在/root目录了
cp -ar /data/mydata/mysql-bin/ /root - 模拟数据库故障
rm -rf /var/lib/mysql/*
systemctl stop mysqld
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld \\无法启动
rm -rf /var/lib/mysql/* \\再删除数据
systemctl start mysqld \\再次可以启动了
grep "password" /var/log/mysqld.log
2018-04-25T10:01:13.953346Z 1 [Note] A temporary password is generated for root@localhost: 9Mf3.k)AOgEd
mysqladmin -uroot -p'9Mf3.k)AOgEd' password 'Mysql@123';
2)恢复:注意恢复时关闭记录二进制日志,避免产生不必要的IO操作
- 关闭记录二进制日志,完整备份恢复
#mysqladmin -uroot -p'Mysql@123' flush-logs
mysql> set sql_log_bin=0;
mysql> system mysql -uroot -predhat </backup/2018-04-26-00-mysql-all.sql
- 获取备份记录的log_file文件和pos位置点
# grep -i change /backup/2018-04-26-00-mysql-all.sql | head -1
CHANGE MASTER TO MASTER_LOG_FILE='master.000003', MASTER_LOG_POS=154;
- 增量备份恢复
mysql> system mysqlbinlog --start-position=154 master.000003 master.000004 master.000005 master.000006 | mysql -uroot -p'Mysql@123'
- 验证数据
mysql> select * from testdb.test;
+------+
| id |
+------+
| 1 |
| 2 |
| 2 |
| 3 |
| 4 |
+------+
5 rows in set (0.01 sec)
(3)模拟删除数据恢复
1)准备数据
mysql -uroot -predhat -e "create database testdb"
mysql -uroot -predhat -e "create table testdb.test(id int)"
mysql -uroot -predhat -e "insert into testdb.test values(1)"
2)完整备份
mysqldump -uroot -predhat -A -R --single-transaction --master-data=1 --flush-logs >/backup/$(date +%F-%H)-mysql-all.sql
生成目录:ll /backup/2018-04-25-10-mysql-all.sql
3)准备数据用于增量备份恢复
mysql> insert into testdb.test values(2);
mysql> flush logs;
mysql> insert into testdb.test values(3);
mysql> flush logs;
mysql> insert into testdb.test values(4);
mysql> flush logs;
mysql> insert into testdb.test values(5);
mysql> select * from testdb.test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
4)删除数据库:注意删除数据库刷新一下二进制日志
mysql> drop database testdb;
mysql> flush logs;
5)完全备份恢复
mysql -uroot -predhat </backup/2018-04-25-10-mysql-all.sql
6)获取备份文件的位置点
# grep -i "change" /backup/2018-04-25-10-mysql-all.sql | head -1
CHANGE MASTER TO MASTER_LOG_FILE='master.000002', MASTER_LOG_POS=154;
7)获取删库的pos位置点
[root@localhost ~]# mysqlbinlog -v /data/mydata/mysql-bin/master.000005 | grep -C 3 "^\bdrop\b"
# mysqlbinlog -v /data/mydata/mysql-bin/master.000005 | grep -C 3 "^\bdrop\b"
# at 472
#180425 10:34:23 server id 1 end_log_pos 570 CRC32 0x1d4bcda1 Query thread_id=24 exec_time=0 error_code=0
SET TIMESTAMP=1524666863/*!*/;
drop database testdb
/*!*/;
# at 570
#180425 10:35:14 server id 1 end_log_pos 635 CRC32 0x836dc275 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no
8)增量备份恢复
master.000005 是删除数据库的二进制文件,上面把删除库语句上面at的pos位置找到,恢复这个文件的时候使用stop-position=472
cd /data/mydata/mysql-bin
#mysqlbinlog --start-position=154 master.000002 master.000003 master.000004 | mysql -uroot -p'redhat'
# mysqlbinlog --stop-position=472 master.000005 | mysql -uroot -p'redhat'
9)验证
mysql> select * from testdb.test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
(十二)MySQL逻辑备份mysqldump的更多相关文章
- MySQL 逻辑备份mysqldump&mysqlpump&mydumper原理解析
目录 准备 mysqldump备份 mysqlpump备份 mydumper备份 想弄清除逻辑备份的原理,最好的办法是开启general_log,一探究竟 准备 创建用户 CREATE USER IF ...
- MySQL逻辑备份mysqldump
MySQL 备份之 mysqldump mysqldump mysqldump工具备份: 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较 ...
- (4.12)mysql备份还原——mysql逻辑备份之mysqldump
关键词:mysql逻辑备份介绍,mysqldump,mysqldump最佳实践 我的相关文章:https://www.cnblogs.com/gered/p/9721696.html 正文 1.mys ...
- MySQL 逻辑备份工具
简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyIS ...
- 逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复
逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级 ...
- 图解MySQL逻辑备份的实现流程
1. 摘要 数据作为一家公司的重要资产,其重要程度不言而喻.数据库为数据提供存取服务,担任着重要的角色,如果因数据误删.服务器故障.病毒入侵等原因导致数据丢失或服务不可用,会对公司造成重大损失,所以数 ...
- MYSQL的备份与恢复--逻辑备份mysqldump
目录 0.备份与恢复概述 1.逻辑备份-完整备份与恢复 2.逻辑备份-增量备份与恢复 (1)环境准备 (2)恢复全量数据 (3)恢复增量备份 3.新来的开发妹子删了库! (1)模拟环境准备 (2)全备 ...
- mysql逻辑备份与还原工具mysqldump
(一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所 ...
- MySQL逻辑备份利器-mydumper
关于mydumper的简介和下载请访问:https://launchpad.net/mydumper 简言之,mydumper是多线程逻辑备份,对于表和数据量很大的情况下,建议使用mydumper提高 ...
随机推荐
- javascript string对象方法replace
最简单的replace用法是: var str = 'aaaaa9876b0000'; str.replace(/a/g,'A'); 有时候我们希望只是在匹配的位置添加特定的字符: var str = ...
- 【bzoj2957】楼房重建 分块+二分查找
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子.为了简化问题,我们考虑这些事件发生在一个二 ...
- BZOJ3522 POI2014HOT-Hotels(树形dp)
分两种情况.三点两两lca相同:在三点的lca处对其统计即可,显然其离lca距离应相同:某点在另两点lca的子树外部:对每个点统计出与其距离x的点有多少个即可. 可以长链剖分做到线性,当然不会. #i ...
- HDU 6153 A Secret(扩展KMP模板题)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others) Total ...
- 【题解】POI2014FAR-FarmCraft
这题首先手玩一下一下数据,写出每个节点修建软件所需要的时间和到达它的时间戳(第一次到达它的时间),不难发现实际上就是要最小化这两者之和.然后就想到:一棵子树内,时间戳必然是连续的一段区间,而如果将访问 ...
- 2018宁夏邀请赛K Vertex Covers
题目链接:https://nanti.jisuanke.com/t/28411 题意: 给出n(n<=36)个点的一个图.求点覆盖集数. 题解: 将n个点折半为L和R两部分.对于R内部的边,枚举 ...
- 获取本地ip地址 C#
与ipconfig获取的所有信息一致的方法: private void GetIp() { System.Diagnostics.Process cmdp= new System.Diagnostic ...
- BZOJ 3629 JLOI2014 聪明的燕姿 约数和+DFS
根据约数和公式来拆s,最后再把答案乘出来,我们发先这样的话递归层数不会太大每层枚举次数也不会太多,然而我们再来个剪枝就好了 #include<cstdio> #include<ios ...
- Asp.net MVC Combres的简单用法
第一步:添加nuget包 [1]添加 nuget包后,会自动在 webconfig里面 添加配置文件(不用改) <section name="dotless" type=&q ...
- gogole调试请求体的数据怎么知道
在network---->header->request payload中看 详细情况见下图所示: