mysql recovery 1 (允许停机,不许丢数据)

1.备份策略:

1)按天备份:

优点:恢复时间短,维护成本低

缺点:占用空间大,占用资源多(比如说老是要锁表)

2)按周备份:

优点:占用空间小,资源占用低

缺点:维护成本大

2.增量恢复的场景

1)数据库迁移,或者跨机房灾备。

2)增加从库。

3)认为操作失误,从库也没办法。

3.案例(可以停机,但是不能丢数据)

1)增量,全备开启

[[email protected] ~]# grep log-bin /etc/my.cnf

log-bin=mysql-bin

mysqldump -uroot -p111111 -A -B --single-transaction -F --master-data=2 --events|gzip >/backup/all.sql.gz

2)模拟误操作

mysql> drop database oldboy;

3)模拟误操作后的用户写入

insert into oldboy_utf8.test(name) values(‘dirty1‘),(‘dirty2‘);

mysqladmin -uroot -p111111 flush-logs

insert into oldboy_utf8.test(name) values(‘dirty1‘),(‘dirty2‘);

...

4)发现问题,根据问题时间段,定位出问题的binlog点。

[[email protected] ~]# ll /application/mysql/data/ |grep mysql-bin

-rw-rw----. 1 mysql mysql      544 11月  8 16:44 mysql-bin.000001

-rw-rw----. 1 mysql mysql      486 11月 11 21:32 mysql-bin.000035

-rw-rw----. 1 mysql mysql      126 11月 12 15:13 mysql-bin.000036

-rw-rw----. 1 mysql mysql      150 11月 12 16:29 mysql-bin.000037

-rw-rw----. 1 mysql mysql     2516 11月 12 16:53 mysql-bin.000038

-rw-rw----. 1 mysql mysql     1422 11月 12 16:57 mysql-bin.000039

-rw-rw----. 1 mysql mysql      998 11月 12 16:58 mysql-bin.000040

-rw-rw----. 1 mysql mysql      107 11月 12 16:58 mysql-bin.000041

-rw-rw----. 1 mysql mysql      779 11月 12 16:58 mysql-bin.index

mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000038|grep drop

drop database oldboy

5)准备全备和增量。

#准备全备

cd /backup

[[email protected] ~]# gunzip /backup/all.sql.gz

[[email protected] ~]# head -50 /backup/all.sql|grep -i "CHANGE MASTER"

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000038‘, MASTER_LOG_POS=107;

#对外停止写,刷新binlog(不停的话要丢数据42,43等log)

配置防火墙,拒绝客户端连接(略)。

mysql> set global read_only = ON;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘%read_only%‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only     | ON    |

+---------------+-------+

1 row in set (0.00 sec)

mysqladmin -uroot -p111111 flush-logs

#准备增量

mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000038 --start-position=107 > /backup/bin.sql

mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000039 >> /backup/bin.sql

mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000040 >> /backup/bin.sql

mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000041 >> /backup/bin.sql

vim /backup/bin.sql 删除错误语句

6)开始恢复数据

mysql -uroot -p111111</backup/all.sql

mysql -uroot -p111111</backup/bin.sql

恢复对外写:

mysql> set global read_only = OFF;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘%read_only%‘;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only     | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

时间: 2024-10-06 08:46:05

mysql recovery 1 (允许停机,不许丢数据)的相关文章

Mysql丢数据及主从数据不一致的场景

Mysql丢数据及主从数据不一致的场景 随着对MySQL的学习,发现了MySQL的很多问题,最重要的就是丢数据的问题.对于丢数据问题,我们应该了解丢数据的场景,这样在以后的学习中多考虑如何去避免及解决这些问题. 1.MySQL数据库层丢数据场景   本节我们主要介绍一下在存储引擎层上是如何会丢数据的. 1.1.InnoDB丢数据   InnoDB支持事务,同Oracle类似,事务提交需要写redo.undo.采用日志先行的策略,将数据的变更在内存中完成,并且将事务记录成redo,顺序的写入red

mysql数据库种类介绍及 mysqldump备份数据

一  Nosql 指的是非关系型数据库,作为传统关系型数据库的一个有效补充,针对特定场景.以高性能和使用便利为目一 的功能特异化的数据库产品 Nosql特点: Noosql数据库存储不需要固定的表结构 1 他不是否定关系数据库,而是作为关系数据库的一个重要补充 2 Nosql为了高性能高并发而产生的 3 Nosql典型产品memcache(纯内存) 一重启就丢数据 redis(持久化缓存)  持久化缓存 mongodb 二  非关系型数据库种类: 1 键值存储数据库 2 列存储数据库 3 面向文

MongoDB丢数据问题的分析

坊间有很多传说MongoDB会丢数据.特别是最近有一个InfoQ翻译的Sven的一篇水文(为什么叫做水文?因为里面并没有他自己的原创,只是搜罗了一些网上的博客,炒了些冷饭吃),其中又提到了丢数据的事情.大家知道作为一个数据库来说,数据的持久性基本上是数据库的最低要求了.如果MongoDB真的有那么糟糕的数据安全问题,它早就在技术选择众多的今天被无情地淘汰掉了.那么真相到底如何呢? 实事求是地来说,MongoDB确实在其发展的过程中,有一些数据持久化的问题没有处理好,特别是一些默认值的选定上.大部

flume到底会丢数据吗?其可靠性如何?——轻松搞懂Flume事务机制

先给出答案: 需要结合具体使用的source.channel和sink来分析,具体结果可看本文最后一节. Flume事务 ? 一提到事务,我们首先就想到的是MySQL中的事务,事务就是将一批操作做成原子性的,即这一批要么都成功,要么都失败. ? 同样的道理,在flume中也有事务,那么Flume中的事务在哪个地方呢?在Flume中的批量操作又是指什么呢? Flume中的事务存在于哪个位置? ? 在Flume中一共有两个事务,一个是在Source到Channel之间,一个是Channel到Sink

MySql按周/月/日分组统计数据的方法

知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days; select DATE_FORMAT(create_time,'%Y%m') month

MySQL的YEARWEEK函数以及查询本周数据(转)

MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010-3-14') 返回 11 SELECT YEARWEEK('2010-3-14',1) 返回 10 其中第二个参数是 mode ,具体指的意思如下: Mode First day of week Range Week 1 is the first we

MySQL到底能支持多大的数据量?

MySQL是中小型网站普遍使用的数据库之一,然而,很多人并不清楚MySQL到底能支持多大的数据量,再加上某些国内CMS厂商把数据承载量的责任推给它,导致很多不了解MySQL的站长对它产生了很多误解,那么,MySQL的数据量到底能支持多少呢?其实MySQL单表的上限,主要与操作系统支持的最大文件大小有关.我们来看一下官方的介绍. MySQL表最大能达到多少? MySQL 3.22 限制的表大小为4GB.由于在MySQL 3.23 中使用了MyISAM 存储引擎,最大表尺寸增加到了65536TB(2

用命令从mysql中导出/导入表结构及数据

在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo table1 table2 > foo.sql这样就可以将数据库databasefoo的表table1,table2以sql形式导入foo.sql中,其中-uroot参数表示访问数据库的用户名是root,如果有密码还需要加上-p参数Eg: C:\Users\jack> mysqldump -uroo

Unity3D_WebPlayer_PHP连接MySQL数据库_3_php登录和读取所有数据

1,PHP登录代码[login.php] 完整代码如下 <?php $name=$_POST['pname']; $password=$_POST['ppwd']; if ($name && $password){ $conn=mysql_connect("xxxxxxxx","Mysql用户名","MYsql密码") or die("SomeConstrError"); mysql_select_db(