mysql 删除恢复
一、模拟误删除数据表的恢复
1 二进制日志功能启用
vim /etc/my.cnf [mysqld] log-bin
2 完全备份
mysqldump -A -F --master-data=2 --single-transaction |gzip > /data/all.sql.gz
3 修改数据表
insert students (name,age)values('a',20); 修改第一次
insert students (name,age)values('b',30); 修改第二次
flush logs; 切换二进制日志
insert students (name,age)values('e',30); 修改第一次
4 误删除数据表
drop table students; 误删除table
5 用户继续修改其它表
insert teachers (name,age)values('mage',30); 误删除后继续修改
6 发现表删除
flush tables with read lock; 发现表被删除,第一时间锁定表格,设为只读
7 干净系统还原
systemctl stop mairadb 暂停服务 rm -rf /var/lib/mysql/ 删除config中标明的datadir 确保用户不能访问服务器 vim /etc/my.cnf [mysqld] skip-networking=1 systemctl start mariadb
8 完全备份还原
gzip -d /data/all.sql.gz 解压完全备份的/data/all.sql.gz mysql < /data/all.sql 导入完全备份的all.sql
9 还原增量备份
less /data/all.sql //查看二进制日志位置 -- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=245; //查看完全备份信息,好确定二进制恢复的位置 //找到mariadb-bin.000003 245之后的所有二进制日志 mariadb-bin.000002 mariadb-bin.000004 mysqlbinlog --start-position=245 /var/lib/mysql/mariadb-bin.000002 > /data/binlog.sql mysqlbinlog /var/lib/mysql/mariadb-bin.000003 >> /data/binlog.sql vim /data/binlog.sql //找到drop table students;删除此行 mysql < /data/binlog.sql
10恢复用户的访问
vim /etc/my.cnf [mysqld] skip-networking=1 删除此行
##mysql -e "show databases" |grep -Ev "Database|information_schema|performance_schema"|sed -r 's#(.*)#mysqldump -B \1 |gzip > /data/\1-`date +%F`.sql.gz#' |bash
备份所有databases中除information_schema&performance_schema的数据库
二、xtrabackup完全备份和还原
1 在原主机完全备份
xtrabackup --backup --target-dir=/backups/ 备份源主机到/backups scp -r /backups/ 192.168.134.192:/
2 在目标主机
systemctl stop mariadb //停止恢复主机的mariadb服务 mkdir /data/mysql -pv chown mysql.mysql /data/mysql/ //确保目录权限没问题 vim /etc/my.cnf datadir=/data/mysql/ //修改配置 xtrabackup --prepare --target-dir=/backups //恢复前预处理 xtrabackup --copy-back|move-back --target-dir=/backups //将预处理过的backups目录复制或者移动到datadir chown -R mysql.mysql /data/mysql/ //确保所有mysql下的所有文件都是mysql的用户与组 systemctl restart mariadb //完工
三、xtrabackup完全,增量备份和还原
1在原主机上实现
1)完全备份
mkdir /backups/{full,inc1,inc2} -pv
xtrabackup --backup --target-dir=/backups/full/
2)第一次修改数据
mysql hellodb -e ”insert hellodb.students (name,age) values('a',18)“
3)第一次增量备份
xtrabackup --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full
4)第二次修改数据
mysql -e "insert hellodb.students (name,age) values('b',28);"
5)第二次增量备份
xtrabackup --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/ scp -r /backups/ 目标主机:/
2在目标主机还原
1)清空数据,停服务
systemctl stop mariadb rm -rf /data/mysql/*
2)预处理数据库
xtrabackup --prepare --apply-log-only --target-dir=/backups/full xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1/ xtrabackup --prepare --target-dir=/backups/full --incremental-dir=/backups/inc2
3)复制数据
xtrabackup --copy-back --target-dir=/backups/full
4)权限和启动服务
chown -R mysql.mysql /data/mysql/ systemctl start mariadb
mysql实现主从-级联复制
MySQL级联复制(A->B->C)
MySQL主从结构实际中是用到最多的一种架构。 新上的两台服务器B和C,要替换掉之前旧的服务器A,同时,B和C是新的主从关系。因此,配置成级联复制,来迁移数据,也方便切换。
架构图如下:
master A ------> slave B(到此为主从) ------> slave C

MySQL复制
复制过滤器:
让从节点仅复制指定的数据库,或指定数据库的指定表
两种实现方式:
(1) 服务器选项:主服务器仅向二进制日志中记录与特定数据库相关的事件
注意:此项和binlog_format相关
参看:https://mariadb.com/kb/en/library/mysqld-options/#-binlogignore-db
binlog_do_db = 数据库白名单列表,多个数据库需多行实现
binlog_ignore_db = 数据库黑名单列表
问题:基于二进制还原将无法实现;不建议使用
(2) 从服务器SQL_THREAD在replay中继日志中的事件时,仅读取与特定数
据库(特定表)相关的事件并应用于本地
问题:会造成网络及磁盘IO浪费
MySQL复制
从服务器上的复制过滤器相关变量
replicate_do_db= 指定复制库的白名单
replicate_ignore_db= 指定复制库黑名单
replicate_do_table= 指定复制表的白名单
replicate_ignore_table= 指定复制表的黑名单
replicate_wild_do_table= foo%.bar% 支持通配符
replicate_wild_ignore_table=
实验机器ip
192.168.134.191 主服务器>192.168.134.192 从服务器 (主从复制)
一、主节点配置:
(1) 启用二进制日志
vim /etc/my.cnf [mysqld] log_bin
#log_bin启用二进制日志
(2) 为当前节点设置一个全局惟一的ID号
vim /etc/my.cnf [mysqld] server_id=1
(3) 创建有复制权限的用户账号
mysql > GRANT REPLICATION SLAVE ON *.* TO 'wang'@'HOST' IDENTIFIED BY 'centos';
二、从节点配置:
(1) 启动中继日志
vim /etc/my.cnf [mysqld] server_id=2
(2) 使用有复制权限的用户账号连接至主服务器,并启动复制线程
mysql > CHANGE MASTER TO MASTER_HOST='192.168.134.191', MASTER_USER='wang', MASTER_PASSWORD='centos', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;
(3) 启动slave
mysql > START SLAVE
这个时候mysql的主从复制就完成了。
如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点
实验机器:192.168.134.191 主服务器>192.168.134.192 从服务器>192.168.134.193 N从服务器(级联复制)
通过备份恢复数据至从服务器
复制起始位置为备份时,二进制日志文件及其POS
如果要启用级联复制,需要在从服务器(192.168.134.192)用以下配置
vim /etc/my.cnf [mysqld] log_bin 启用二进制日志 log_slave_updates
#一般情况下slave不会把从master接收到的binlog记录写入自己的binlog,这个参数会使slave通过SQL线程把从master接受到的binlog写进自己的binlog,但是前提是slave一定要开启自己的binlog,此参数一般用于级联复制,例如需要A复制到B,B复制到C,那么B就要开启此参数。
mysql半同步实现

主服务配置:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;
mysql> SHOW VARIABLES LIKE '%semi%';
mysql> SHOW STATUS LIKE '%semi%‘;
从服务器配置:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
mysql 删除恢复的更多相关文章
- MySQL删除所有表的外键约束、禁用外键约束
转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- mysql备份恢复详解
前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lv ...
- MySQL 备份恢复(导入导出)单个 innodb表
MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...
- (转载)MySQL删除所有表的外键约束、禁用外键约束
其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...
- MYSQL删除表的记录后如何使ID从1开始
MYSQL删除表的记录后如何使ID从1开始 MYSQL删除表的记录后如何使ID从1开始 http://hi.baidu.com/289766516/blog/item/a3f85500556e2c09 ...
- HDFS副本机制&负载均衡&机架感知&访问方式&健壮性&删除恢复机制&HDFS缺点
副本机制 1.副本摆放策略 第一副本:放置在上传文件的DataNode上:如果是集群外提交,则随机挑选一台磁盘不太慢.CPU不太忙的节点上:第二副本:放置在于第一个副本不同的机架的节点上:第三副本:与 ...
- MySQL 删除数据表
MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...
- MySQL 删除数据库
MySQL 删除数据库 使用 mysqladmin 删除数据库 使用普通用户登陆mysql服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用 ...
- MySQL删除外键定义的方法
MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...
随机推荐
- 洛谷P2585 [ZJOI2006]三色二叉树(树形dp)
传送门 设$dp[u][i]$表示点$u$颜色为$i$时最多(最少)的绿点个数(这里用$0$表示绿点) 然后直接用树形dp就可以了 记得把情况讨论清楚 //minamoto #include<b ...
- IT兄弟连 JavaWeb教程 URI、URL
URI介绍 URI(Uniform Resource Identifier),是统一资源标识符的缩写,是一个用于标识某一个Web资源名称的字符串,该标识允许用户对任何资源通过特定的协议进行交互.Web ...
- 【UVA - 540】Team Queue (map,队列)
Team Queue Descriptions: Queues and Priority Queues are data structures which are known to most comp ...
- Robotframework自动化系列:筛选结果数量统计
Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...
- python之商品操作小程序
要求:写一个添加商品的程序,商品信息写入txt文件中,以二维字典形式比如:{‘小米’:{‘价格’:‘1999元’,‘数量’:10}} 1.添加商品 #商品名称 #价格 #数量 2.查看商品 3.删除商 ...
- Oracle apex 搭建
参考文档 : 百度文库 <Oracle ERP APEX开发指南 > APEX HOME: /oracle11g/product/11.2/apex/apex Oracle home: ...
- javaFx 学习笔记
1.每个javaFx程序定义在一个继承自javafx.application.Application的类中 Button:用于设置一个按钮,Button btOK = new Button(" ...
- [转]ASP.NET MVC Bootstrap极速开发框架
本文转自:http://www.cnblogs.com/smartbooks/p/3814927.html 前言 每次新开发项目都要从头开始设计?有木有一个通用的快速开发框架?并且得是ASP.NET ...
- 日常博客----rem,em的恩怨相杀
基本知识: 使用 em 和 rem 单位可以让我们的设计更加灵活,能够控制元素整体放大缩小,而不是固定大小. 我们可以使用这种灵活性,使我们在开发期间,能更加快速灵活的调整,允许浏览器用户调整浏览器大 ...
- 在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...