对于手握数据库的开发人员来讲,没有误删过库的人生是不完整的。不过删库之后不用急着跑,说不定能够恢复呢?mysql
21分钟MySQL基础入门linux
我下面全部的SQL语句是基于MySQL 5.6+运行。nginx
- 开始使用
- 增删改查
- WHERE
- AND 和 OR
- ORDER BY
- IN
- NOT
- UNION
- AS
- JOIN
- SQL 函数
- 触发器
- 添加索引
- 建立后表的修改
从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者。
MySQL高性能学习笔记程序员
- 1、Ubuntu 安装mysql
- 2、sysbench基准测试
- 3、服务器性能剖析
- 4、慢查询
- 5、Alter Table操做性能提高
认识索引是什么东西很是关键,一个很是恰当的比喻就是书的目录页与书的正文内容之间的关系,为了方便查找书中的内容,经过对内容创建索引造成目录。所以,首先你要明白的一点就是,索引它也是一个文件,它是要占据物理空间的。
可能有时候咱们会问,“个人服务器有50 GB内存,12核CPU,怎样配置最好?” 很遗憾,问题没这么简单,MySQL 服务器的配置应该符合它的工做负载,数据,以及应用需求,并不只仅看硬件的状况。一般只须要把基本的项配置正确,应该将更多的时间花费在 schema 的优化,索引,以及查询设计上。
MySQL多列索引的应用shell
咱们常常听到一些人说"把WHERE条件里的列都加上索引",其实这个建议很是错误。在多个列上创建单独的索引大部分状况下并不能提升MySQL的查询性能。MySQL在5.0以后引入了一种叫“索引合并”(index merge)的策略,必定程度上可使用表上的多个单列索引来定位指定的行。可是当服务器对多个索引作联合操做时,一般须要耗费大量CPU和内存资源在算法的缓存、排序和合并操做上,特别是当其中有些索引的选择性不高,须要合并扫描大量的数据的时候。这个时候,咱们须要一个多列索引。数据库
MySql之主从复制segmentfault
mysql的主从复制不但能够做为数据库备份,也能实现数据库的读写分离,为之后处理高并发打下基础。
分布式数据库分为主数据库(master)和从数据库(slaves)
主从复制的基本流程:
- 在master上更新的内容以二进制日志(Binary Log)的方式存在本地
- slaves开启IO线程拿到master服务器上的二进制流文件,并存入中继日志(Relay Log)。这个工做叫作:binlog dump process
- slaves再开启一个SQL线程来读取反序列化后的中继日志,执行其中的sql语句,达到备份数据库的效果
最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯一样的错误。
Ottter是由阿里巴巴开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到如今,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)。
在项目中使用mysql数据库,全部的增删改查操做都在主库处理,随着查询访问量的增长,单库处理的压力骤增,为了防止主库故障,使用一主多从的方式,经过读写分离,把全部的查询处理都放到从服务器上,减小单点故障致使整个服务挂掉的状况。
MySQL中字段类型与合理的选择字段类型;int(11)最大长度是多少?,varchar最大长度是多少
MySQL 的数值数据类型能够大体划分为两个类别,一个是整数,另外一个是浮点数或小数。许多不一样的子类型对这些类别中的每个都是可用的,每一个子类型支持不一样大小的数据,而且 MySQL 容许咱们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。
锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问,提供数据的完整性和一致性。
InnoDB存储引擎不只会在行级别上对表数据上锁,还会在数据库内部其余多个地方使用锁,从而容许对多种不一样资源提供并发访问。如:操做缓冲池中LRU列表,删除、添加、移动LRU列表中的元素,为了保证数据的完整性,必须有锁的介入。
在工做中,咱们常常会遇到这样的问题,须要更新库存,当咱们查询到可用的库存准备修改时,这时,其余的用户可能已经对这个库存数据进行修改了,致使,咱们查询到的数据会有问题,下面咱们就来看解决方法。
nginx有很强大的日志功能,可是在缺省状态下,它只能记录用户的IP地址以及浏览器信息。若是咱们有用户登陆注册系统,在用户已登陆的状况下,想记录访问某一个网页的究竟是哪个用户,怎么办呢?由于咱们不仅想知道究竟是哪个IP地址访问了哪个网页,而且还想知道究竟是哪个登陆用户访问了哪个网页,这对于咱们往后有针对性地向他/她推荐信息甚至推送广告都是很是有用的。
mysql(InnoDB)事务隔离级别(READ UNCOMMITTED) 与 锁
- 1、经过 show status 命令了解各类 sql 的执行频率
- 2、定义执行效率较低的 sql 语句
- 3、经过 explain 分析低效 sql 的执行计划
- 4、经过 performance_schema 分析 sql 性能
- 5、经过 trace 分析优化器如何选择执行计划。
- 6、 肯定问题并采起相应的优化措施
- 性能降低SQL慢的缘由
- 常见通用的join查询
- 索引
- 索引的使用
声明一下:下面的优化方案都是基于 “ Mysql-索引-BTree类型 ” 的。
前几天在作一个需求的时候,须要清理mysql中重复的记录,当时的想法是经过代码遍历写出来,而后以为太复杂,内心想着应该能够经过一个sql语句来解决问题的。查了资料,请教了大佬以后得出了一个很便利的sql语句,这里分享下这段sql语句和思路。
咱们的Mysql服务运行一段时间后,不知什么缘由就变慢了,怎么查找缘由呢?
- 1、关键性指标
- 2、TPCC测试关键性指标
- 3、数据库参数配置优化
- 4、MySQL系统状态
对MySQL进行优化主要能够从如下几个方面进行:效果: SQL语句和索引 > 数据库对象:表结构、字段类型、存储引擎 > 配置 > 硬件
但成本从低到高。
MySQL 提供了一个 EXPLAIN 命令,它能够对 SELECT 语句进行分析,并输出 SELECT 执行的详细信息,以供开发人员针对性优化。而EXPLAIN 命令用法十分简单,在 SELECT 语句前加上 Explain 就能够了。
MySQL的大多数事务型存储引擎实现的其实都不是简单的行级锁。基于提高并发性能的考虑,它们通常都同时实现了多版本并发控制(MVCC)。不只是MySQL,包括Oracle,PostgreSQL等其余数据库系统也都实现了MVCC,但各自的实现机制不尽相同,由于MVCC没有一个统一的实现标准。能够认为MVCC是行级锁的一个变种,可是它在不少状况下避免了加锁操做,所以开销更低。虽然实现机制有所不一样,但大都实现了非阻塞的读操做,写操做也只锁定必要的行。
事务 能够理解为一个独立的工做单元,在这个独立的工做单元中,有一组操做;放在事务(独立工做单元)中的多个操做,要么所有执行成功,要么所有执行失败。
当MySQL单表记录数过大时,增删改查性能都会急剧降低,能够参考如下步骤来优化:
- 单表优化
- 读写分离
- 缓存
- 表分区
- 垂直拆分
- 水平拆分
- 兼容MySQL且可水平扩展的数据库
- NoSQL
提及MySQL的查询优化,相信你们收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理建立索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工做原理?在实际场景下性能真有提高吗?我想未必。于是理解这些优化建议背后的原理就尤其重要,但愿本文能让你从新审视这些优化建议,并在实际业务场景下合理的运用。
单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
MySQL数据库你们应该都很熟悉,并且随着前几年的阿里的去IOE,MySQL逐渐引发更多人的重视。
MySQL的优势:
- 使用简单
- 开源免费
- 扩展性“好”,在必定阶段扩展性好
- 社区活跃
- 性能能够知足互联网存储和性能需求,离不开硬件支持
上面这几个因素也是大多数公司选择考虑MySQL的缘由。不过MySQL自己存在的问题和限制也不少,有些问题点也常常被其余数据库吐槽或鄙视。
肖鹏,微博研发中心技术经理,主要负责微博数据库(MySQL/Reids/HBase/Memcached)相关的业务保障、性能优化、架构设计,以及周边的自动化系统建设。经历了微博数据库各个阶段的架构改造,包括服务保障及SLA体系建设、微博多机房部署、微博平台化改造等项目。10年互联网数据库架构和管理经验,专一于数据库的高性能和高科用技术保障方向。
- 1、 备份恢复策略
- 2、 逻辑备份和恢复
- 3、物理备份和恢复
- 4、 表的导入导出
本身日常用的一个shell脚本,起自动备份mysql中全部数据库做用,在任务执行完成后,会记录日志和自动发送邮件到邮箱。配合crontab能够实现天天自动备份。
目标: 每隔1分钟,导出.sql,压缩,并按日期存储在/data 下,每分钟后删除.sql文件,每隔2分钟删除.tar.gz文件知识: 定时任务 crontab , mysqldump 导出 , tar 打包压缩, 按日期建立文件 date
这里使用的是网易邮箱126邮箱的STMP服务,服务器是smtp.126.com。若是你使用其它第三方邮箱,在账号设置那里通常都有说明SMTP服务器地址。
对于备份的数据文件咱们可能会存放在服务器目录,备份周期的话固然是按照数据量来讲的,这里咱们通常都是天天的凌晨备份一次。备份后的文件存放在咱们的服务器的目录下面,可是万一有一天服务器也崩溃了,那么备份的文件也就没了。
因此咱们设想一个好的方案就是数据库天天备份,每次备份自动提交到远程仓库,这里我以码云为例。
使用xtrabackup对MySQL innodb表热备份,增量备份
对于数据库的备份重要性没必要多言,为了防止数据以各类方式丢失,损坏,必须对数据库进行按期备份。首先考虑备份的时候对数据库业务的影响。
再者若是按期进行备份,若是每次都进行全量备份,显然一部分数据是重复,浪费大量磁盘空间。
今天遇到一个很傻逼的问题,有人登上开发服务器,不知是有意仍是无意;把mysql里面的库所有删除了。。。那我的结果如何,咱们就不做讨论了。。。没办法我只能写个shell脚本,用crontab跑下定时;作些简单的数据备份了,顺便写个笔记。
其实很简单:
- 写一个shell脚本经过mysql的mysqldump,将数据导出成对应的sql文件;
- 使用linux的crontab定时运行对应脚本,将sql,文件保存到对应的目录下;
- 可想而知,随着数据量的增长和备份的频率都会致使备份服务器的硬盘资源使用率也会直线攀升;为了解决这个问题,咱们就须要,定时清理备分内容;而我仍是简单的使用了个shell脚本,经过crontab定时去清理;
基本上每一个跟数据库打交道的程序员(固然也多是你同事)都会碰一个问题,MySQL误操做后如何快速回滚?好比,delete一张表,忘加限制条件,整张表都没了。假如这仍是线上环境核心业务数据,那这事就闹大了。误操做后,能快速回滚数据是很是重要的。
本期完
:)
欢迎关注 SegmentFault 讲堂服务号 :)