SegmentFault 技术周刊 Vol.42 - MySQL:从删库到跑路

SegmentFault思否

图片描述

对于手握数据库的开发人员来说,没有误删过库的人生是不完整的。不过删库以后不用急着跑,说不定可以恢复呢?

MySQL 入门

21分钟MySQL基础入门

我下面所有的SQL语句是基于MySQL 5.6+运行。

  • 开始使用
  • 增删改查
  • WHERE
  • AND 和 OR
  • ORDER BY
  • IN
  • NOT
  • UNION
  • AS
  • JOIN
  • SQL 函数
  • 触发器
  • 添加索引
  • 创建后表的修改

MySQL入门教程学习笔记

从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者。

MySQL高性能学习笔记

  • 一、Ubuntu 安装mysql
  • 二、sysbench基准测试
  • 三、服务器性能剖析
  • 四、慢查询
  • 五、Alter Table操作性能提升

MySQL索引专题一 认识索引

认识索引是什么东西非常关键,一个非常恰当的比喻就是书的目录页与书的正文内容之间的关系,为了方便查找书中的内容,通过对内容建立索引形成目录。因此,首先你要明白的一点就是,索引它也是一个文件,它是要占据物理空间的。

Mysql 配置的工作原理

可能有时候我们会问,“我的服务器有50 GB内存,12核CPU,怎样配置最好?” 很遗憾,问题没这么简单,MySQL 服务器的配置应该符合它的工作负载,数据,以及应用需求,并不仅仅看硬件的情况。通常只需要把基本的项配置正确,应该将更多的时间花费在 schema 的优化,索引,以及查询设计上。

MySQL 进阶

MySQL多列索引的应用

我们经常听到一些人说"把WHERE条件里的列都加上索引",其实这个建议非常错误。在多个列上建立单独的索引大部分情况下并不能提高MySQL的查询性能。MySQL在5.0之后引入了一种叫“索引合并”(index merge)的策略,一定程度上可以使用表上的多个单列索引来定位指定的行。但是当服务器对多个索引做联合操作时,通常需要耗费大量CPU和内存资源在算法的缓存、排序和合并操作上,特别是当其中有些索引的选择性不高,需要合并扫描大量的数据的时候。

这个时候,我们需要一个多列索引。

MySql之主从复制

mysql的主从复制不但可以作为数据库备份,也能实现数据库的读写分离,为以后处理高并发打下基础。

分布式数据库分为主数据库(master)和从数据库(slaves)

主从复制的基本流程:

  1. 在master上更新的内容以二进制日志(Binary Log)的方式存在本地
  2. slaves开启IO线程拿到master服务器上的二进制流文件,并存入中继日志(Relay Log)。这个工作叫做:binlog dump process
  3. slaves再开启一个SQL线程来读取反序列化后的中继日志,执行其中的sql语句,达到备份数据库的效果

【踩坑记录】记一次MySQL主从复制延迟的坑

最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误。

数据同步——otter

Ottter是由阿里巴巴开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)。

mysql数据库实现读写分离

在项目中使用mysql数据库,所有的增删改查操作都在主库处理,随着查询访问量的增加,单库处理的压力骤增,为了防止主库故障,使用一主多从的方式,通过读写分离,把所有的查询处理都放到从服务器上,减少单点故障导致整个服务挂掉的情况。

MySQL中字段类型与合理的选择字段类型;int(11)最大长度是多少?,varchar最大长度是多少

MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。

许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。

【MySQL】Mysql锁机制简介

锁是数据库系统区别于文件系统的一个关键特性。

锁机制用于管理对共享资源的并发访问,提供数据的完整性和一致性。

InnoDB存储引擎不仅会在行级别上对表数据上锁,还会在数据库内部其他多个地方使用锁,从而允许对多种不同资源提供并发访问。如:操作缓冲池中LRU列表,删除、添加、移动LRU列表中的元素,为了保证数据的完整性,必须有锁的介入。

Mysql 事务及数据的一致性处理

在工作中,我们经常会遇到这样的问题,需要更新库存,当我们查询到可用的库存准备修改时,这时,其他的用户可能已经对这个库存数据进行修改了,导致,我们查询到的数据会有问题,下面我们就来看解决方法。

用nginx访问日志记录mysql数据库中的用户id

nginx有很强大的日志功能,但是在缺省状态下,它只能记录用户的IP地址以及浏览器信息。如果我们有用户登录注册系统,在用户已登录的情况下,想记录访问某一个网页的到底是哪一个用户,怎么办呢?因为我们不只想知道到底是哪一个IP地址访问了哪一个网页,并且还想知道到底是哪一个登录用户访问了哪一个网页,这对于我们日后有针对性地向他/她推荐信息甚至推送广告都是非常有用的。

mysql(InnoDB)事务隔离级别(READ UNCOMMITTED) 与 锁

MySQL 性能调优

mysql 配置优化

优化 sql 语句的一般步骤

  • 一、通过 show status 命令了解各种 sql 的执行频率
  • 二、定义执行效率较低的 sql 语句
  • 三、通过 explain 分析低效 sql 的执行计划
  • 四、通过 performance_schema 分析 sql 性能
  • 五、通过 trace 分析优化器如何选择执行计划。
  • 六、 确定问题并采取相应的优化措施

mysql查询与索引优化优化

  1. 性能下降SQL慢的原因
  2. 常见通用的join查询
  3. 索引
  4. 索引的使用

项目中常用的19条MySQL优化

声明一下:下面的优化方案都是基于 “ Mysql-索引-BTree类型 ” 的。

MySQL 【去重留一】一条sql语句完成 思路总结

前几天在做一个需求的时候,需要清理mysql中重复的记录,当时的想法是通过代码遍历写出来,然后觉得太复杂,心里想着应该可以通过一个sql语句来解决问题的。查了资料,请教了大佬之后得出了一个很便利的sql语句,这里分享下这段sql语句和思路。

Mysql性能调优与测试

我们的Mysql服务运行一段时间后,不知什么原因就变慢了,怎么查找原因呢?

  • 一、关键性指标
  • 二、TPCC测试关键性指标
  • 三、数据库参数配置优化
  • 四、MySQL系统状态

MySQL性能优化方案总结

对MySQL进行优化主要可以从以下几个方面进行:

效果: SQL语句和索引 > 数据库对象:表结构、字段类型、存储引擎 > 配置 > 硬件

但成本从低到高。

MySQL 性能优化神器 Explain 使用分析

MySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,并输出 SELECT 执行的详细信息,以供开发人员针对性优化。

而EXPLAIN 命令用法十分简单,在 SELECT 语句前加上 Explain 就可以了。

MySQL-InnoDB-MVCC多版本并发控制

MySQL的大多数事务型存储引擎实现的其实都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。不仅是MySQL,包括Oracle,PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准。

可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。

MySQL高并发事务问题及解决方案

事务 可以理解为一个独立的工作单元,在这个独立的工作单元中,有一组操作;放在事务(独立工作单元)中的多个操作,要么全部执行成功,要么全部执行失败。

MySQL大表优化方案

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:

  • 单表优化
  • 读写分离
  • 缓存
  • 表分区
  • 垂直拆分
  • 水平拆分
  • 兼容MySQL且可水平扩展的数据库
  • NoSQL

我必须得告诉大家的MySQL优化原理

说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视。

MySQL的优点:

  • 使用简单
  • 开源免费
  • 扩展性“好”,在一定阶段扩展性好
  • 社区活跃
  • 性能可以满足互联网存储和性能需求,离不开硬件支持

上面这几个因素也是大多数公司选择考虑MySQL的原因。不过MySQL本身存在的问题和限制也很多,有些问题点也经常被其他数据库吐槽或鄙视。

肖鹏:微博数据库那些事儿

肖鹏,微博研发中心技术经理,主要负责微博数据库(MySQL/Reids/HBase/Memcached)相关的业务保障、性能优化、架构设计,以及周边的自动化系统建设。经历了微博数据库各个阶段的架构改造,包括服务保障及SLA体系建设、微博多机房部署、微博平台化改造等项目。10年互联网数据库架构和管理经验,专注于数据库的高性能和高科用技术保障方向。

MySQL 备份与恢复

MySQL 备份和恢复机制

  • 一、 备份恢复策略
  • 二、 逻辑备份和恢复
  • 三、物理备份和恢复
  • 四、 表的导入导出

自动备份MySQL数据库并发送邮件的SHELL脚本

自己平常用的一个shell脚本,起自动备份mysql中所有数据库作用,在任务执行完成后,会记录日志和自动发送邮件到邮箱。

配合crontab可以实现每天自动备份。

linux数据库定期备份

目标: 每隔1分钟,导出.sql,压缩,并按日期存储在/data 下,每分钟后删除.sql文件,每隔2分钟删除.tar.gz文件

知识: 定时任务 crontab , mysqldump 导出 , tar 打包压缩, 按日期创建文件 date

Linux定时备份数据库到指定邮箱

这里使用的是网易邮箱126邮箱的STMP服务,服务器是smtp.126.com。如果你使用其它第三方邮箱,在帐号设置那里一般都有说明SMTP服务器地址。

Linux MySQL定时备份并上传到git仓库

对于备份的数据文件我们可能会存放在服务器目录,备份周期的话当然是按照数据量来说的,这里我们一般都是每天的凌晨备份一次。

备份后的文件存放在我们的服务器的目录下面,但是万一有一天服务器也崩溃了,那么备份的文件也就没了。

所以我们设想一个好的方案就是数据库每天备份,每次备份自动提交到远程仓库,这里我以码云为例。

使用xtrabackup对MySQL innodb表热备份,增量备份

对于数据库的备份重要性不必多言,为了防止数据以各种方式丢失,损坏,必须对数据库进行定期备份。

首先考虑备份的时候对数据库业务的影响。

再者如果定期进行备份,如果每次都进行全量备份,显然一部分数据是重复,浪费大量磁盘空间。

shell脚本实现mysql数据备份

今天遇到一个很傻逼的问题,有人登上开发服务器,不知是有意还是无心;把mysql里面的库全部删除了。。。那个人结果如何,我们就不作讨论了。。。没办法我只能写个shell脚本,用crontab跑下定时;做些简单的数据备份了,顺便写个笔记。

其实很简单:

  • 写一个shell脚本通过mysql的mysqldump,将数据导出成对应的sql文件;
  • 使用linux的crontab定时运行对应脚本,将sql,文件保存到对应的目录下;
  • 可想而知,随着数据量的增加和备份的频率都会导致备份服务器的硬盘资源使用率也会直线攀升;为了解决这个问题,我们就需要,定时清理备份内容;而我还是简单的使用了个shell脚本,通过crontab定时去清理;

MySQL误操作后如何快速恢复数据

基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表都没了。假如这还是线上环境核心业务数据,那这事就闹大了。误操作后,能快速回滚数据是非常重要的。

mysqldump - 给 DBA 的 25 个小技巧

本期完
:)


欢迎关注 SegmentFault 讲堂服务号 :)

图片描述

阅读 14.2k

SegmentFault 社区周刊
主题技术周刊,每周分享新鲜有趣的技术干货。
avatar
SegmentFault思否
SegmentFault 社区管理员

SegmentFault 社区管理媛 - 思否小姐姐

8.4k 声望
129.8k 粉丝
0 条评论
你知道吗?

avatar
SegmentFault思否
SegmentFault 社区管理员

SegmentFault 社区管理媛 - 思否小姐姐

8.4k 声望
129.8k 粉丝
宣传栏