InnoDB

mysql数据库误删除后的数据恢复操作说明

江枫思渺然 提交于 2020-12-27 01:00:58
在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么办??? 下面,就mysql数据库误删除后的恢复方案进行说明。 一、工作场景 (1)MySQL数据库每晚12:00自动完全备份。 (2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库! (3)需要紧急恢复!可利用备份的数据文件以及增量的binlog文件进行数据恢复。 二、数据恢复思路 (1)利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。 (2)用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。 (3)通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据。 三、实例说明 ---------------------------------------- 首先,要确保mysql开启了binlog日志功能 在/etc/my.cnf文件里的[mysqld]区块添加: log-bin=mysql-bin 然后重启mysql服务 ---------------------------------------- (1

这21个写SQL的好习惯,你要养成呀

你离开我真会死。 提交于 2020-12-26 05:46:28
前言 每一个好习惯都是一笔财富,本文基于MySQL,分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select * from user where userid =10086 or age =18; 2、操作delete或者update语句,加个limit(SQL后悔药) 在执行删除或者更新语句,尽量加上limit,以下面的这条 SQL 为例吧: delete from euser where age > 30 limit 200; 因为加了limit 主要有这些好处: 「降低写错SQL的代价」 , 你在命令行执行这个SQL的时候,如果不加limit,执行的时候一个 「不小心手抖」 ,可能数据全删掉了,如果 「删错」 了呢?加了limit 200,就不一样了。删错也只是丢失200条数据,可以通过binlog日志快速恢复的。 「SQL效率很可能更高」 ,你在SQL行中,加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。 「避免了长事务」 ,delete执行时,如果age加了索引

顺丰快递:请签收MySQL灵魂十连

*爱你&永不变心* 提交于 2020-12-25 13:55:31
攻击性不大,侮辱性极强 1、SQL语句执行流程 MySQL大体上可分为 Server层 和 存储引擎层 两部分。 Server层: 连接器 :TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。 查询缓存 :查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。 分析器 :根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。 优化器 :多种执行策略可实现目标,系统自动选择最优进行执行。 执行器 :判断是否有权限,将最终任务提交到存储引擎。 存储引擎层 负责数据的存储和提取。其架构模式是 插件式 的,支持 InnoDB 、 MyISAM 、 Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB ,它从MySQL 5.5.5版本开始成为了默认存储引擎(经常用的也是这个)。 SQL执行顺序 2、BinLog、RedoLog、UndoLog BinLog BinLog 是记录所有数据库表结构变更(例如create、alter table)以及表数据修改(insert、update、delete)的二进制日志,主从数据库同步用到的都是BinLog文件。BinLog日志文件有三种模式。 STATEMENT 模式 内容 :binlog 只会记录可能引起数据变更的

顺丰快递:请签收MySQL灵魂十连

99封情书 提交于 2020-12-25 13:32:52
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨sowhat1412 来源丨sowhat1412(ID:sowhat9094) 攻击性不大,侮辱性极强 1、SQL语句执行流程 MySQL大体上可分为 Server层 和 存储引擎层 两部分。 Server层: 连接器 :TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。 查询缓存 :查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。 分析器 :根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。 优化器 :多种执行策略可实现目标,系统自动选择最优进行执行。 执行器 :判断是否有权限,将最终任务提交到存储引擎。 存储引擎层 负责数据的存储和提取。其架构模式是 插件式 的,支持 InnoDB 、 MyISAM 、 Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB ,它从MySQL 5.5.5版本开始成为了默认存储引擎(经常用的也是这个)。 SQL执行顺序 2、BinLog、RedoLog、UndoLog BinLog BinLog 是记录所有数据库表结构变更(例如create

Mysql解压版安装配置

不想你离开。 提交于 2020-12-24 23:45:48
1、下载压缩包   地址:      https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-winx64.zip 2、解压至任意不含中文的路径下 3、在根目录创建my.ini 文件,文件内容如下   注意修改端口及路径 [ client ] default-character-set = utf8 [ mysqld ] port =3306 basedir ="C:/BtSoft/mysql/mysql-5.7.20-winx64/" datadir ="C:/BtSoft/mysql/mysql-5.7.20-winx64/data/" tmpdir ="C:/BtSoft/mysql/mysql-5.7.20-winx64/data/" socket ="C:/BtSoft/mysql/mysql-5.7.20-winx64/data/mysql.sock" log-error ="C:/BtSoft/mysql/mysql-5.7.20-winx64/data/mysql_error.log" log-bin = mysql-bin binlog_format = mixed server_id = 1 #skip-locking max_connections = 300 table_open_cache =

如何快速导入数据

南笙酒味 提交于 2020-12-24 10:54:28
前言: 日常学习和工作中,经常会遇到导数据的需求。比如数据迁移、数据恢复、新建从库等,这些操作可能都会涉及大量数据的导入。有时候导入进度慢,电脑风扇狂转真的很让人崩溃,其实有些小技巧是可以让导入更快速的,本篇文章笔者会谈一谈如何快速的导入数据。 注:本篇文章只讨论如何快速导入由逻辑备份产生的SQL脚本,其他文件形式暂不讨论。 1.尽量减小导入文件大小 首先给个建议,导出导入数据尽量使用MySQL自带的命令行工具,不要使用Navicat、workbench等图形化工具。特别是大数据量的时候,用MySQL自带的命令行工具导出和导入比用Navicat等图形化工具要快数倍,而且用Navicat等图形化工具做大数据量的操作时很容易卡死。下面简单介绍下怎么用MySQL自带的命令行工具做导入导出。 # 导出整个实例 mysqldump -uroot -pxxxxxx --all-databases > all_database.sql # 导出指定库 mysqldump -uroot -pxxxxxx --databases testdb > testdb.sql # 导出指定表 mysqldump -uroot -pxxxxxx testdb test_tb > test_tb.sql # 导入指定SQL文件 (指定导入testdb库中) mysql -uroot -pxxxxxx

mysql中设置外键约束及主表从表的关系

蹲街弑〆低调 提交于 2020-12-24 06:35:53
1.新建外键代码 alter table stu5 add constraint 编号 foreign key (bh) references stu2 (bh) on delete restrict on update restrict ; 说明: stu2和stu5是两张表,“编号”为字段bh的约束名(是stu5表中的一个属性),bh是stu2表中的主键,而bh并不是stu5的主键,那么则称stu2为主表,stu5为从表。 注意: 1.新建外键,子表外键字段列值必须是父表引用列值的子集【值都不能包含怎么做引用列?】。 2.引用列字段必须是索引或主键或联合主键(索引值或联合主键值可重复,唯一主键不能重复)【不做索引怎么关联?】 2.删除和更新有四种设置方式 (1)cascade:级联,当父表更新、删除,子表所有同值记录会同步更新和删除【修改子表,必须保证修改后B表外键字段的值依然能在A表中找到,否则会报错。】(2)set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错 (3)restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改 (4)no action:和restrict一样 (5) SET DEFAULT 指定如果试图删除某一行

这21个写SQL的好习惯,你要养成呀

匆匆过客 提交于 2020-12-24 05:13:03
前言 关注公众号: 后端技术漫谈 ,技术之路不迷路~ 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select * from user where userid =10086 or age =18; 2、操作delete或者update语句,加个limit(SQL后悔药) 在执行删除或者更新语句,尽量加上limit,以下面的这条 SQL 为例吧: delete from euser where age > 30 limit 200; 因为加了limit 主要有这些好处: 「降低写错SQL的代价」 , 你在命令行执行这个SQL的时候,如果不加limit,执行的时候一个 「不小心手抖」 ,可能数据全删掉了,如果 「删错」 了呢?加了limit 200,就不一样了。删错也只是丢失200条数据,可以通过binlog日志快速恢复的。 「SQL效率很可能更高」 ,你在SQL行中,加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。 「避免了长事务」 ,delete执行时

How to clean or resize the ibtmp1 file in MySQL?

放肆的年华 提交于 2020-12-24 04:07:57
问题 MySQL 5.7 introduces a new file ibtmp1 for storing temporary data in InnoDB to increase the performance. But I have noted that its size increases continuously. On my db server its sizes increases to 92GB. Is there any way of reducing size or deleting the file without restarting the server ? Thanks 回答1: The ibtmp1 once created can't be shrink by any method without restarting mysql service. There are two ways to handle it: Precaution : At the time of server start you should limit the size of

How to clean or resize the ibtmp1 file in MySQL?

好久不见. 提交于 2020-12-24 04:07:13
问题 MySQL 5.7 introduces a new file ibtmp1 for storing temporary data in InnoDB to increase the performance. But I have noted that its size increases continuously. On my db server its sizes increases to 92GB. Is there any way of reducing size or deleting the file without restarting the server ? Thanks 回答1: The ibtmp1 once created can't be shrink by any method without restarting mysql service. There are two ways to handle it: Precaution : At the time of server start you should limit the size of