MyISAM

删库不跑路,MySQL数据来恢复

帅比萌擦擦* 提交于 2020-08-06 21:14:58
日常工作中,总会有因手抖、写错条件、写错表名、错连生产库造成的误删库表和数据的事情发生。那么,如果连数据都恢复不了,还要什么 DBA。 1. 前言 数据恢复的前提的做好备份,且开启 binlog,格式为 row。如果没有备份文件,那么删掉库表后就真的删掉了,lsof 中还有记录的话,有可能恢复一部分文件。但若刚好数据库没有打开这个表文件,那就只能跑路了。如果没有开启 binlog,那么恢复数据后,从备份时间点开始的数据都没了。如果 binlog 格式不为 row,那么在误操作数据后就没有办法做闪回操作,只能老老实实地走备份恢复流程。 2. 直接恢复 直接恢复是使用备份文件做全量恢复,这是最常见的场景。 2.1 mysqldump 备份全量恢复 使用 mysqldump 文件恢复数据非常简单,直接解压了执行: gzip -d backup.sql.gz | mysql -u<user> -h<host> -P<port> -p 2.2 xtrabackup 备份全量恢复 恢复过程: # 步骤一:解压(如果没有压缩可以忽略这一步) innobackupex --decompress <备份文件所在目录> # 步骤二:应用日志 innobackupex --apply-log <备份文件所在目录> # 步骤三:复制备份文件到数据目录 innobackupex --datadir=

mysql系列(五)——事务

为君一笑 提交于 2020-08-06 20:15:01
一、什么是事务 事务由单独单元的一个或者多个sql语句组成,在这个单元中,每个mysql语句时相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条sql语句一旦执行失败或者产生错误,整个单元将会回滚,也就是所有受到影响的数据将会返回到事务开始以前的状态;如果单元中的所有sql语句均执行成功,则事务被顺利执行。 支持事务的mysql引擎 show engines;(查看数据库支持事务的引擎(innodb)) +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level

[Err] 1214

早过忘川 提交于 2020-08-06 13:33:00
-- -- Table structure for table `film_text` -- -- InnoDB added FULLTEXT support in 5.6.10. If you use an -- earlier version, then consider upgrading (recommended) or -- changing InnoDB to MyISAM as the film_text engine -- CREATE TABLE film_text ( film_id SMALLINT NOT NULL , title VARCHAR ( 255 ) NOT NULL , description TEXT , PRIMARY KEY (film_id), FULLTEXT KEY idx_title_description (title,description) )ENGINE = InnoDB DEFAULT CHARSET = utf8; MySQL示例数据库 Sakila 安装 将 “”film_text” 表的 ENGINE 修改为: MyISAM就不报错了! -- -- Table structure for table `film_text` -- -- InnoDB added FULLTEXT support in 5.6.10.

MySQL5.7升级到8.0过程详解

﹥>﹥吖頭↗ 提交于 2020-08-06 13:28:51
前言: 不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。 1.升级前准备及注意事项 首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性: 默认字符集由latin1变为utf8mb4。 MyISAM系统表全部换成InnoDB表。 JSON特性增强。 支持不可见索引,支持直方图。 sql_mode参数默认值变化。 默认密码策略变更。 新增角色管理。 支持窗口函数,支持Hash join。 根据版本变化及官方升级教程,列举出以下几点注意事项: 注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。 密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。 sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。 是否需要手动升级系统表。在MySQL 8.0.16版本之前

MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码

被刻印的时光 ゝ 提交于 2020-08-06 10:14:58
笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而这是不能接受的。当然如果要整个表删除,毋庸置疑用 TRUNCATE TABLE 就好。 最初的方案(因为未预料到删除会如此慢),代码如下(最简单和朴素的方法): delete from table_name where cnt_date <= target_date 后经过研究,最终实现了飞一般(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程的方案层层递进,详细记录如下: 批量删除(每次限定一定数量),然后循环删除直到全部数据删除完毕;同时 key_buffer_size 由默认的8M提高到512M 运行效果: 删除时间大概从3个半小时提高到了3小时 (1)通过 limit (具体size 请酌情设置) 限制一次删除的数据量,然后判断数据是否删除完,附源码如下(Python实现): def delete_expired_data(mysqlconn, day): mysqlcur = mysqlconn.cursor() delete_sql = " DELETE from table_name where cnt_date<='

MySQL系列 | MySQL高级-09存储引擎

淺唱寂寞╮ 提交于 2020-08-06 09:50:24
MySQL有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以外还有许多其他引擎,有官方的,也有一些公司自己研发的。这篇文章主要简单概述一下常用常见的 MySQL 引擎,一则这是面试中常被问到的问题,二则这也是数据库设计中不可忽略的问题,用合适的引擎可以更好的适应业务场景,提高业务效率。 MyISAM MyISAM 是 mysql 5.5.5 之前的默认引擎,它支持 B-tree/FullText/R-tree 索引类型。 锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。 此引擎不支持事务,也不支持外键。 MyISAM 强调了快速读取操作。它存储表的行数,于是 SELECT COUNT (*) FROM TABLE 时只需要直接读取已经保存好的值而不需要进行全表扫描。 InnoDB InnoDB 存储引擎最大的亮点就是支持事务,支持回滚,它支持 Hash/B-tree 索引类型。 锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大,索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。 InnoDB 中不保存表的具体行数,也就是说,执行 select count (*) from table 时,InnoDB

Mysql 中 DDL、DML、DQL、DCL、TCL

微笑、不失礼 提交于 2020-08-06 09:15:53
1. DDL(Data Definition Languages)语句:即数据库定义语句 用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE、 ALTER、 DROP、 SHOW、 DESC、 TRUNCATE CREATE 创建数据库 CREATE DATABASE 数据库名; 创建表 CREATE TABLE table_name (column_name column_type); CREATE TABLE table_name (column_name column_type)ENGINE=存储引擎[InnoDB | MyISAM] DEFAULT CHARSET=编码方式(uft8); CREATE [可选-临时表:TEMPORARY] TABLE table_name (column_name column_type, PRIMARY KEY(主键ID), INDEX (索引字段[多个用逗号隔开]), )ENGINE=存储引擎(InnoDB、MyISAM) DEFAULT CHARSET=编码方式(uft8); ALTER 修改表 ALTER TABLE 表名 操作关键字[RENAME | ADD | CHANGE | MODIFY | DROP] 操作类型[COLUMN(默认) | INDEX] 操作的具体内容 [ // 可选

Mysql 架构及执行流程

☆樱花仙子☆ 提交于 2020-08-06 08:53:28
1. mysql 架构 1.1 简化版架构 客户端+ 核心服务 + 存储引擎 ⬇︎ ⬆︎(客户端)⬇︎⬆︎ =====【连接/线程处理】====} ⬇︎ ⬇︎ 【查询缓存】 ⬅︎ 【解析器】 } 【核心服务】 ⬇︎ ========【优化器】=======} ⬇︎⬆︎ =======【存储引擎】======= 1.2 详细版架构 MySql 逻辑架构图 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | | 客户端 | | 「 Connectors : PHP 、 JDBC 、 Python 、navicat」 | | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ⬇︎ ⬆︎ | === === === === Mysql 服务端 === === === === === === === === === === === === === === === === === === === === === == | | -- -- -- -- -- -- -- -- -- -- -- -- -- -- - | | Connection Pool | | -- -- -- -- -- -- -- -- -- -- --

100道MySQL数据库经典面试题解析(收藏版)

别等时光非礼了梦想. 提交于 2020-08-06 06:26:55
前言 100道MySQL数据库经典面试题解析,已经上传github啦 https://github.com/whx123/JavaHome/tree/master/Java面试题集结号 公众号:捡田螺的小男孩 数据库 1. MySQL 索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效 如何字段类型是字符串,where时一定用引号括起来,否则索引失效 like通配符可能导致索引失效。 联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。 在索引列上使用mysql的内置函数,索引失效。 对索引列运算(如,+、-、*、/),索引失效。 索引字段上使用(!= 或者 < >,not in)时,可能会导致索引失效。 索引字段上使用is null, is not null,可能导致索引失效。 左连接查询或者右连接查询查询关联的字段编码格式不一样,可能导致索引失效。 mysql估计使用全表扫描要比使用索引快,则不使用索引。 后端程序员必备:索引失效的十大杂症 索引不适合哪些场景 数据量少的不适合加索引 更新比较频繁的也不适合加索引 区分度低的字段不适合加索引(如性别) 索引的一些潜规则 覆盖索引 回表 索引数据结构(B+树) 最左前缀原则 索引下推 2. MySQL

MYSQL数据库优化(一)

喜欢而已 提交于 2020-08-06 04:14:45
内存的读写速度远大于磁盘的读写速度,减少磁盘读写,可以作为重点优化方向。 数据库内部最重要的就是存储结构,存储结构必然涉及到数据结构知识。比如用到了常用的哈希图、树。 MYSQL数据库常用两种引擎,InnoDB、MyISAM,可以直接对表指定数据库引擎。 MYSQL索引是一种数据结构,帮助更快的查询数据。索引使用的是B+树( B树改进版,一个节点可以包含多个值,深度可控,IO读写次数少,三层可以保存数千万个值 )。叶子节点存值,其余节点存索引值。数据结构可视化工具: https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html MYSQL生成的表和数据会保存在mysql/data目录下,并以表名生成对应的目录。FRM文件是表设计文件。 InnoDB引擎,会在mysql/data/表目录下生成IBD文件。IBD文件包含索引和数据,索引是聚集型索引。 MyISAM引擎,会在mysql/data/表目录下生成MYI和MYD文件,MYI是索引文件,记录存储地址,MYD是数据文件。索引是非聚集型索引。不支持事务。 使用索引注意事项: 1>.不要在DML频繁的表上加索引(一百万条数据维护B+树耗性能)。 2>.不要在数据较少的表上加索引。3>.尽量不要在索引列上加函数计算。 4>.不要select *查询,索引会失效。5>