Category Tech

MySQL Group Replication初探

Group Replication为原生MySQL高可用集群架构,shared-nothing结构。

ProxySQL简介

ProxySQL简介,ProxySQL被用作数据库代理,完成读写分离、routing等操作

MySQL Clone Plugin

介绍MySQL clone plugin的用法及使用场景

Linux磁盘监控-diskio_io_time

查看Linux系统的磁盘监控,常常需要关注磁盘的情况,例如:diskio_io_time,能够间接反应磁盘的繁忙情况

MySQL源码-Seconds_Behind_Master的计算

What the Seconds_Behind_Master means? And how to calculate it? MySQL源码-Seconds_Behind_Master的计算

linux-transparent_hugepage

What is transparent_hugepage in Linux and why we should disable it in database instance?

Linux swap 内存溢出

由于磁盘IO较弱的原因,不再在数据库的实例上进行swap的内存溢出,需要进行关闭。

MySQL源码-变量-innodb_flush_log_at_trx_commit

mysq source-code-variables-innodb_flush_log_at_trx_commit

MySQL写入重做日志(redo log files)的顺序

What's the order of writing redo logs in MySQL? 在redo logs中,如果有多个files,那么MySQL会怎么使用这些文件,访问的时间,第一个使用结束再使用第二个依次循环?还是不同的事务访问不同的file?

MySQL Flush Slow Log

慢查较多的时候,慢查日志需要进行定期切换,防止需要分析时,文件过大不便于排查。

MySQL Get Memory Status From Performance_Schema

当MySQL进程mysqld占用了太多内存时,需要定位对应的用户、线程、event等信息,可以使用performance_schema表信息进行查看

Redis Explained

Redis Architecture Notes

MySQL Partition Tables: Split New Partition From Maxvalue Partition

MysQL的分区表中,已经有maxvalue分区时,需要再添加分区,则需要重新进行分配

使用pt-online-schema-change添加唯一索引导致数据丢失

由于pt-osc(pt-online-schema-change)在进行ddl表更时候,步骤中insert的语法为insert ignore,所以会导致在对于表中加唯一索引时候,重复的数据会被丢弃.

Redis集群中slave漂移的问题

在shutdown集群中某一个master的时候,集群中其它master的slave,会自动迁移到新的主上。

Redis ERR Protocol error: too big inline request

Redis ERR Protocol error: too big inline request

Create a ftp-server using Python

在运维过程中,需要传输文件的时候,可以使用python命令,直接开启一个ftp服务的进程,网络通即可直接传输文件。

Tips:MongoDB中的embedded document(嵌套文档)查询注意事项

MongoDB查询嵌套的文档时候,字段顺序需要与存储时候的保持一致,否则会查询不到数据.

手记–InfluxDB使用介绍

介绍InfluxDB的基础操作,包括增删、http操作、retention policy、Continuous Queries;influxDB的文件结构;如何运维InfluxDB等方面。

MySQL手记23 — MySQL运行情况统计小工具mysqltuner

mysqltuner,用以统计MySQL实例运行时候的基本情况,会给出基础的一些建议,DBA可进行参考,优化实例配置。

MySQL手记22 — Tips:不走索引就锁全表数据吗?

在RC隔离级别下,没走索引时,可以更新不同的行;RR级别下,没走索引时,不可以更新不同的行。RC级别只锁定加锁的一行,但是提交之后,再进行查询时,可能会获取到其它事务更新的结果,所以为不可重复读;RR级别通过GAP锁,防止其它的session更新所有的行与间隙,从而得到了一个可重复读取的结果。

MySQL手记21 — MySQL的分库分表

MySQL的分库分表是业内常用的数据库拆分手段,能够解决绝大部分的“核心大表”情况。分库分表后,运维难度增大,所以在初期,就要估计好量,并作出一定冗余。对于分库分表的运维,需要有一套完善的平台进行,降低“人肉运维”出错几率。

MySQL手记20 — MySQL Group Replication(MGR组复制)

MGR(MySQL Group Replication)是MySQL原生的数据库集群架构,底层使用Paxos协议实现多写、选举等过程,MySQL官方也在不断添加相应的内容,使MGR更加可控稳定。可配合Router、ProxySQL进行使用。

MySQL手记19 — MySQL代理工具ProxySQL

本文介绍了ProxySQL这一强大且灵活的MySQL代理,需要按需进行测试,包括对于连接的转发是否均衡、节点宕机是否能够将连接发到其它节点、是否能够承受住非常大量的连接、自身的高可用等。数据库加了一层代理,还需要考虑到代理与实例间的延迟,很灵敏的业务是否使用。对于MySQL的集群,需要稳定、灵活且方便的进行管理,包括之前介绍的MySQL高可用集群拓扑结构管理工具Orchestrator,本篇的ProxySQL等,都是集群运维中的一个部分,需要我们谨慎的完成管理。

MySQL手记18 — MySQL高可用及复制管理工具Orchestrator

Orchestrator是一款提供页面和命令行和MySQL高可用和复制拓扑关系管理工具,Github也使用了Orchestrator进行了MySQL高可用拓扑结构的管理。还能进行主从等切换,只需在页面上进行节点的拖拽,就能完成切换。

MySQL手记17 — MySQL的复制Replication

MySQL的复制replication有许多的使用方式,例如使用多源复制和延迟复制,进行数据的备份,除了能恢复误操作的数据,还能节省成本;lossless半同步复制,能够让我们的高可用环境数据一致性得以更好的保证,降低了数据不一致的风险等等

Tips:升级到MySQL8.0.20后暂不能使用Xtrabackup进行备份

Percona-xtrabackup-8.0.11是基于MySQL 8.0.18进行开发的,所以当前若使用MySQL 8.0.20版本,暂时不要使用Percona Xtrabackup进行备份操作。

MySQL手记15 — 大小写问题

在初始化MySQL实例、建表时候,需要注意到大小写的问题,并与开发人员沟通,若需要表结构大小写敏感,则调整lower_case_table_names;若需要数据的大小写敏感,调整utf8mb4_general_ci/utf8mb4_bin,当然常见的还有utf8_general_ci/utf8_bin。

MySQL手记14 — 数据迁移注意事项

对DBA来说,数据迁移可能是维护工作中最常见的工作,很多场景,都需要进行数据的迁移,需要总结一套迁移的流程,按照既定的流程进行操作。本篇主要是阐述一些MySQL数据迁移过程中的注意事项,在实际环境中,更应该步步都走得“稳重”。

MySQL手记13 — 使用mysqldbcompare对比数据一致性

mysqldbcompare可以说是非常常用的一个数据对比工具,用以检验数据一致性,在我们测试数据同步、数据迁移的时候,经常会用到,用来判断是否会出现数据不一致的情况。

MySQL手记12 — 表结构对比工具mysqldiff

mysqldiff可以用来比较两个指定数据源中的结构差异。

MySQL手记9 — Percona Monitoring Management(PMM监控)

PMM分为两个部分:Client和Server。使用pmm-admin,可以快捷添加和删除MySQL、Mongodb、Redis实例。

MySQL手记8 — adminMongo与Mongo-express对比(结果格式差异)

adminMongo和Mongo-express两者都可以显示数据,就是展示的格式不同。

MySQL手记0 — MySQL安装方式

MySQL的安装,是了解数据库的第一步,安装时的一些内容,可以让我们理解MySQL的文件基本结构。

MySQL手记3 — 关注MySQL版本

为什么要不断关注版本?版本的特性为何?

MySQL手记7 — MySQL Utilities工具包

从安装过程打印的信息来看,MySQL Utilities工具包是使用Python进行开发的,并在安装过程把python脚本复制在/use/bin目录下,新增了多个mysql*开头的可执行文件,这些文件,就是Utilities中的工具。

MySQL手记6 — percona-toolkit工具包

对于经常用到的工具,例如使用pt-archiver进行数据的归档、使用pt-online-schema-change进行表结构的变更、使用pt-table-checksum对比两个表的checksum是否一致等等,都能灵活的进行。

MySQL手记5 — 数据库升级准备

数据迁移是一个很重要的过程,需规划严格的流程,并制定回滚方案。对于数据库系统,若能够满足业务需求,都是尽量不动,我曾看到过uptime为10+年的数据库系统,不得不佩服开发人员和产品对于该产品的把控程度。

MySQL手记4 — Sysbench进行QPS性能测试

加上上篇的MySQL手记2 -- sysbench测试磁盘IO,已经可以使用sysbench测试得到IOPS和QPS/TPS的结果了,这对于业务上线,提供了参考​。压测这一步,也不能马虎​。

MySQL手记2 — sysbench测试磁盘IO

对于基础硬件资源的性能测试,刚工作时,我也是人云亦云,不知道为什么要这么去做。在后面的工作中,逐渐意识到了性能压测,又或称其为基准测试的重要性。

MySQL手记1 — 初识数据库系统

拿服务器的选型来说,磁盘这块的测试,需要知道为什么选择SSD?做RAID的目的是什么?都是前期测试的结果

SpringBootApplication启动排除DataSourceAutoConfiguration不生效???

项目引用了新版本mybatis-spring-boot-starter之后启动不起来,报错Cannot determine embedded database driver class for database type NONE,在网上搜索是需要在排除掉spring自身的org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类就可以,不让其自动配置。 由于项目是采用spring boot框架,所以在@SpringBootApplication中exclude这个类即可: 改之前代码:

踩坑之InputStream.read(byte[])方法

项目之前都是好好的,最近现场那边出现一个问题,报错不是合法的json字符串,这个json字符串是通过http请求访问获得的。 通过直接在浏览器上直接访问http这个请求,发现返回的json也是完全正确的。后来排查代码才发现了原来错误出在从字节流中读取数据这里: 看下之前出错代码:这个方法是处理InputStream,然后返回成一个字符串。

MySQL删除数据死锁案例分析

MySQL删除数据死锁案例分析一

项目重启后, Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException分析

Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException分析

InnoDB锁及MySQL事务隔离级别

InnoDB锁及MySQL事务隔离级别简介。

MySQL数据库信息统计表

MySQL在执行sql时,会使用统计信息进行判断,采用最优(cost花费最低)的执行计划,而这些统计信息是怎么进行的,在用户角度如何去调整或者理解统计信息呢?

Otter的单向回环补救(使用Otter遇到的问题一)

Otter是阿里巴巴公司的开源项目,用以进行多机房数据库同步。对于其数据一致性,开源版解决方案为:单向回环补救。而此种算法,在实际使用过程中,存在中间版本丢失的问题,导致业务查询到错误的结果。

InnoDB Cluster(MGR)中的事务一致性等级配置

InnoDB cluster是基于MySQL Group Replication(MGR)搭建的,本文主要介绍在MySQL-8.0.14中新增的一致性配置参数:group_replication_consistency,用以控制在InnoDB cluster中的事务一致性等级。

InnoDB缓冲池中的内容

缓冲池信息相关的表

MySQL安全删除大表drop table

在删除过大的表时,除了会导致DML和DDL阻塞之外,还会产生大量的IO,造成资源占用严重,影响正常的业务。所以在生产环境中,我们需要将删除的过程影响降到最低。

MySQL手记11 — MySQL归档工具:pt-archiver

线上环境在运行一段时间后,往往有需要进行归档的“冷数据”,或者是不再需要的一些数据,会导致表变得“臃肿”,以至于对表的操作很缓慢。 pt-archiver可以灵活的归档数据,并对归档的过程进行控制。

MySQL版本区分

alpha 暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性

MongoDB升级注意事项

本篇文章介绍的“升级检查”,同样可以适用于其它数据库关于升级前的检查项。

打日志还能出问题?记一次log4j日志导致线上OOM问题案例

最近一个服务突然出现 OutOfMemoryError,两台服务因为这个原因挂掉了,一直在full gc。还因为这个问题我们小组吃了一个线上故障。很是纳闷,一直运行的好好的,怎么突然就不行了呢。。。 配置了一个 -XX:+HeapDumpOnOutOfMemoryError(该参数作用是在第一次发生OOM错误时候会打印dump内存信息),便开始通过dump文件开始查找问题。

MySQL手记10 — pt-online-schema-change使用简介

pt-online-schema-change使用简介(pt-osc)、注意事项及举例:在对大表进行结构变更时,报错退出;变更主键;变更时候的负载控制。

MySQL中MVCC是否也能防止幻读

本文主要描述MVCC和GAP-lock与幻读之间的关系,分别解决了那种情况下的幻读。

Category Fell-in-pit

Redis ERR Protocol error: too big inline request

Redis ERR Protocol error: too big inline request

Tips:升级到MySQL8.0.20后暂不能使用Xtrabackup进行备份

Percona-xtrabackup-8.0.11是基于MySQL 8.0.18进行开发的,所以当前若使用MySQL 8.0.20版本,暂时不要使用Percona Xtrabackup进行备份操作。

MySQL手记8 — adminMongo与Mongo-express对比(结果格式差异)

adminMongo和Mongo-express两者都可以显示数据,就是展示的格式不同。

Tips: MySQL8.0版本DEFAULT_GENERATED的问题

MySQL8.0, DEFAULT_GENERATED for columns that have an expression default value.

Tips: mysqldump8.0导出MySQL5.7版本的数据时报错

MySQL8.0版本中,mysqldump加入了参数 --column-statistics,默认为打开,在导出时,需要在information_schema.column_statistics表中检查导出表的信息。

MySQL刷脏让应用抖了一下?

对于MySQL的刷脏,应当调整数据库的相关配置,使该过程平滑进行,不要影响到业务。在本片文章中,介绍了排查的思路,若在日志中看到刷脏耗时较长,且导致了慢查,可参考本文的思路进行排查。

MySQL8.0迁移到5.7中的正则表达REGEXP坑

MySQL从8.0.4开始支持International Components for Unicode(ICU)包,在此版本之前,用的是Henry Spencer's引擎,所以在不通版本数据库中使用正则表达,可能会出现不通结果。

SpringBootApplication启动排除DataSourceAutoConfiguration不生效???

项目引用了新版本mybatis-spring-boot-starter之后启动不起来,报错Cannot determine embedded database driver class for database type NONE,在网上搜索是需要在排除掉spring自身的org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类就可以,不让其自动配置。 由于项目是采用spring boot框架,所以在@SpringBootApplication中exclude这个类即可: 改之前代码:

踩坑之InputStream.read(byte[])方法

项目之前都是好好的,最近现场那边出现一个问题,报错不是合法的json字符串,这个json字符串是通过http请求访问获得的。 通过直接在浏览器上直接访问http这个请求,发现返回的json也是完全正确的。后来排查代码才发现了原来错误出在从字节流中读取数据这里: 看下之前出错代码:这个方法是处理InputStream,然后返回成一个字符串。

MySQL删除数据死锁案例分析

MySQL删除数据死锁案例分析一

项目重启后, Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException分析

Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException分析

MySQL中加字段设置默认值的问题

在一个MySQL数据库多活的场景里,执行DDL新增字段需要进行更加准确的控制,本文主要介绍在加字段的时候,新字段默认值的问题及控制。

阿里云RDS中MySQL实例TokuDB的BUG

在进行表结构变更时,发现一个存储引擎为TokuDB的表变更字段花费了10个小时。但是对于TokuDB,字段变更应该是秒级完成的。至此向阿里云提交了bug。

怎么查找MySQL中的重复索引和无用索引,并且安全地drop index删除索引?

查找MySQL中的重复索引和无用索引,并且安全地drop index删除索引。

Tips: MySQL数据库使用mysqldump备份恢复时的注意事项

mysqldump作为MySQL数据库逻辑备份的常用工具,对于其备份出来的文件,应该进行确认,防止在恢复时误删数据。MySQL主从和双机为MySQL复制的常见架构,在此类集群中,对于数据的恢复,更需要小心。

MySQL中使用空间位置需注意的问题

使用MySQL空间数据类型时的注意事项。

InnoDB索引在缓存中的情况

innodb的缓存情况

MySQL死锁案例_唯一索引

间隙锁定可以显式禁用:将事务隔离级别更改为READ-COMMITTED或启用innodb_locks_unsafe_for_binlog系统变量。在这种情况下,对于搜索和索引扫描,间隙锁定将被禁用,此时gap锁仅用于外键约束检查和重复键检查。

Category LOL-7788

好剧推荐2 — 外星也难民(Solar Opposites)

外星也难民(Solar Opposites),通过动画的方式,简单直接的反应当下社会的情况:包括科技、成长、偏见、信仰、人性、嘲讽、种族等等,通过动画喜剧的方式,把握得很准确,赞!

北京游玩攻略

本文按照游览顺序,介绍去北京时候游览的景点,作为攻略参考。 注:故宫一定要提前在官网订票,因为每天限制3万人,不预约就游览不了了