Category Tech

An interesting question about max function of MySQL

Why can't we use the 'max(point), id' to get the additional columns?

Why think and why not think

Do you like to think or do you have time to think?

An extra Americano

Fresh up?

Why cook eggs with meat

Curious why curious?

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

An interesting question about max function of MySQL

Why can't we use the 'max(point), id' to get the additional columns?

Why think and why not think

Do you like to think or do you have time to think?

An extra Americano

Fresh up?

Why cook eggs with meat

Curious why curious?

New Job and new life

2024, my new job and life.

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

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

北京游玩攻略

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

Category Shuo

An interesting question about max function of MySQL

Why can't we use the 'max(point), id' to get the additional columns?

Why think and why not think

Do you like to think or do you have time to think?

An extra Americano

Fresh up?

Why cook eggs with meat

Curious why curious?

New Job and new life

2024, my new job and life.