InnoDB

打通MySQL架构和业务的任督二脉

匆匆过客 提交于 2020-11-30 03:22:45
目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式。从数据库的业务需求、架构设计、运营维护、再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解决一定的业务问题。 DBA作为数据库架构的设计、实施、维护人员,不仅要对各种MySQL架构非常熟悉,还要了解业务,对于不同的业务有一定的划分和认识,并根据业务特点和架构特点,合理选择和使用MySQL,满足业务需求。 本文从MySQL常见架构、业务环境分类、业务与架构结合使用原则三个方面对MySQL数据库和业务场景进行探讨和说明,让大家先分别对MySQL的架构和业务分类有所了解,然后再将两者贯通起来,使得能够在进行业务与MySQL架构设计时纲举目张,让用户可以用合适的技术解决支撑业务需求。 一、MySQL数据库常见架构 为了对MySQL数据库常见架构,能够有进行比较清晰的认识,下面先从MySQL三种通用基础架构、五种特殊需求架构、架构组合与综合使用三个方面进行说明。 1、 MySQL三种常见基础架构 (1)MySQL单实例架构 MySQL单实例,就是在服务器上部署一个MySQL实例来对外提供服务,这是最开始接触MySQL数据库会使用的方式,也是常见学习、研究MySQL数据库的使用方式。 MySQL单实例的使用方式,是MySQL数据库使用的第一阶段,通常这种情况下

10 mysql选错索引

泄露秘密 提交于 2020-11-29 16:01:10
10 mysql 选错索引 在 mysql 表中可以支持多个索引,有的 sql 不指定使用哪个索引,由 mysql 自己来决定,但是有时候 mysql 选错了索引,导致执行很慢。 例子 CREATE TABLE `t10` ( `id` int ( 11 ) NOT NULL , `a` int ( 11 ) DEFAULT NULL , `b` int ( 11 ) DEFAULT NULL , PRIMARY KEY (`id`), KEY `a` (`a`), KEY `b` (`b`) ) ENGINE = InnoDB; 往表中插入 10w 记录 过程 delimiter ;; create procedure idata_t11() begin declare i int ; set i = 1 ; while (i <= 100000 )do insert into t10 values (i, i, i); set i = i + 1 ; end while ; end ;; delimiter ; call idata_t11(); 分析 sql 语句 mysql> select * from t where a between 10000 and 20000; SESSION A SESSION B start transaction with

my33_内存满导致mysqld被kill

我的梦境 提交于 2020-11-28 09:30:31
监控报警发现MGR的一个节点故障,查看时发现LVS已经发生切换,LVS切到了MGR新的写节点上了,排查原因 /var/log/message Mar 27 16 : 51 : 05 db10 kernel: crond invoked oom-killer: gfp_mask= 0x3000d0 , order= 2 , oom_score_adj= 0 Mar 27 16 : 51 : 05 db10 kernel: crond cpuset=/ mems_allowed= 0 - 1 Mar 27 16 : 51 : 05 db10 kernel: CPU: 35 PID: 12090 Comm: crond Tainted: G OE ------------ 3.10 . 0 - 693.21 . 1 .el7.x86_64 # 1 Mar 27 16 : 51 : 05 db10 kernel: Hardware name: Inspur SA5212M4/YZMB- 00370 - 109 , BIOS 4.1 . 16 06 / 21 / 2018 Mar 27 16 : 51 : 05 db10 kernel: Call Trace: Mar 27 16 : 51 : 05 db10 kernel: [<ffffffff816ae7c8>] dump_stack+

MySQL基础学习——第一篇

让人想犯罪 __ 提交于 2020-11-28 00:56:25
目录 MySQL定义 MySQL的安装 MySQL打开 MySQL常用数据类型 一,数值类型 二,日期和时间类型 三,字符串类型 MySQL基础命令 一,关于库的内容 1,怎创建数据库 2,删除数据库 3,查看所有数据库 二,关于表的内容 首先需要进入某个数据库 1,怎样创建一个数据表 2,删除数据表 3,查看数据库中的所有数据表 1,查看数据表的内容详细定义 2,查看数据表中数据 3,往表中添加数据 4,删除表中数据 5,修改表中数据 三,mysql建表约束 1,主键约束 2,联合主键 3,唯一约束 4,自增约束 ​ 5,外键 MySQL定义 MySQL 是一种 开放源代码 的关系型 数据库管理 系统(RDBMS),使用最常用的数据库管理语言-- 结构化查询语言 (SQL)进行数据库管理。 MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的 需要 对其进行修改。 MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要 事务 化处理的情况下,MySQL是管理内容最好的选择。 MySQL的安装 这里使用的是HeidiSQL,一款用于简单化迷你的 MySQL 服务器和数据库管理的图形化界面。 下载链接: 链接:https://pan.baidu.com/s/1lnm4IrDremAnhvKAO4qVDQ

看了 5种分布式事务方案,我司最终选择了 Seata,真香!

不问归期 提交于 2020-11-27 12:26:14
好长时间没发文了,最近着实是有点忙,当爹的第 43 天,身心疲惫。这又赶上年底,公司冲 KPI 强制技术部加班到十点,晚上孩子隔两三个小时一醒,基本没睡囫囵觉的机会,天天处于迷糊的状态,孩子还时不时起一些奇奇怪怪的疹子,总让人担惊受怕的。 本就不多的写文章时间又被无限分割,哎~ 打工人真是太难了。 本来不知道写点啥,正好手头有个新项目试着用阿里的 Seata 中间件做分布式事务,那就做一个实践分享吧! 介绍 Seata 之前在简单回顾一下分布式事务的基本概念。 分布式事务的产生 我们先看看百度上对于分布式事务的定义:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 额~ 有点抽象,简单的画个图好理解一下,拿下单减库存、扣余额来说举例: 当系统的体量很小时,单体架构完全可以满足现有业务需求,所有的业务共用一个数据库,整个下单流程或许只用在一个方法里同一个事务下操作数据库即可。此时做到所有操作要么全部提交 或 要么全部回滚很容易。 分库分表、SOA 可随着业务量的不断增长,单体架构渐渐扛不住巨大的流量,此时就需要对数据库、表做 分库分表 处理,将应用 SOA 服务化拆分。也就产生了订单中心、用户中心、库存中心等,由此带来的问题就是业务间相互隔离,每个业务都维护着自己的数据库,数据的交换只能进行 RPC 调用。

【还有五天】开学季当当计算机图书大促

久未见 提交于 2020-11-27 07:32:02
开学季 当当网计算机图书大促 >> 每满100减50 << 满200减100 满300减150 满400减200 不止如此!秉持绝不让大家多花一分钱的精神 机械工业出版社华章公司 联合 实时流式计算 特别送出一批优惠码 “实付满200减40” 可以和满减活动 叠加 使用 优惠码使用后相当于 花160买400的书! 超低门槛!超大力度!快快上车! 选书太纠结?推荐几本必买的好书新书 助你囤的疯狂、读的畅快,绝不后悔! 推荐书单 01 《MySQL技术内幕:InnoDB存储引擎 第2版》 推荐语:国内外数据库专家联袂推荐,基于MySQL5.6,从存储引擎内核角度对InnoDB的核心实现和工作机制进行深入剖析。 02 《Redis设计与实现》 推荐语 :系统而全面地描述了 Redis 内部运行机制,图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备。 03 《HBase原理与实践》 推荐语:HBasePMC成员与网易资深工程师倾力打造,多位技术专家联袂推荐。本书系统介绍HBase基本原理与运行机制,融入了作者多年的开发经验与实践技巧。 04 《ClickHouse原理解析与应用实战》 推荐 语:这是一本可帮助读者深度理解并全面掌握ClickHouse运行原理并进行实践开发的工具书,涵盖了ClickHouse的时代背景、发展历程、核心概念、基础功能、运行原理

Linux运维精华面试题

夙愿已清 提交于 2020-11-27 02:25:57
1、什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术 运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等 2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维 开发运维:是给应用运维开发运维工具和运维平台的 应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查 系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等 总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑 开发运维、应用运维和系统运维他们的工作是环环相扣的 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的? 游戏运营要做的一个事情除了协调工作以外 还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划 3、现在给你三百台服务器,你怎么对他们进行管理? 管理3百台服务器的方式: 1)设定跳板机,使用统一账号登录,便于安全与登录的考量。 2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。 3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录

MySQL 复制表结构和表数据

为君一笑 提交于 2020-11-26 16:30:53
1、前言   在功能开发完毕,在本地或者测试环境进行测试时,经常会遇到这种情况:有专门的测试数据,测试过程会涉及到修改表中的数据,经常不能一次测试成功,所以,每次执行测试后,原来表中的数据其实已经被修改了,下一次测试,就需要将数据恢复。   我一般的做法是:先创建一个副本表,比如测试使用的user表,我在测试前创建副本表user_bak,每次测试后,将user表清空,然后将副本表user_bak的数据导入到user表中。   上面的操作是对一个table做备份,如果涉及到的table太多,可以创建database的副本。   接下来我将对此处的表结构复制以及表数据复制进行阐述, 并非数据库的复制原理 !!!!   下面是staff表的表结构 create table staff ( id int not null auto_increment comment '自增id', name char(20) not null comment '用户姓名', dep char(20) not null comment '所属部门', gender tinyint not null default 1 comment '性别:1男; 2女', addr char(30) not null comment '地址', primary key(id), index idx_1 (name,

MySQL中,21个写SQL的好习惯

妖精的绣舞 提交于 2020-11-26 13:58:45
前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age 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中,21个写SQL的好习惯

瘦欲@ 提交于 2020-11-26 13:14:50
前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age 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加了索引