MySQL
文章平均质量分 50
_梓杰_
保持热爱,奔赴山海
展开
-
MySQL与PostgreSQL对比
MySQLPostgreSQL数据类型支持支持JSON,但不如PostgreSQL多有一些扩从性,但不如PostgreSQL支持更多的数据类型,如数组、hstore、JSON、JSONB、范围类型等扩展性有一些扩展性,但不如PostgreSQL支持自定义数据类型、函数、操作符,具有强大的扩展性SQL兼容性遵循SQL标准,但有一些自定义扩展更接近ANSISOL标准,支持窗口函数、公共表表达式等性能优化对简单查询进行了优化,特别是读密集型摸作有一个复杂的查原创 2023-09-20 01:40:46 · 621 阅读 · 1 评论 -
golang使用TiDB的SQL Parse对SQL指纹化
【代码】使用TiDB的SQL Parse对SQL指纹化。原创 2023-08-18 22:51:30 · 1400 阅读 · 0 评论 -
通过performance分析mysql内存占用
在 MySQL 使用过程中,偶尔会出现OOM、内存异常突增等异常现象。为了排查内存异常,我们需要分析内存占用情况,找出内存占用的具体事件。我们可以从以下几张performance下的表分析内存,每张表对应不同的维度,有用户维度、主机维度、进程维度。为了打开 performance_schema 功能,我们需要在 MySQL 配置中设置 performance_schema = ON。原创 2023-07-30 21:53:36 · 921 阅读 · 0 评论 -
MySQL基于复制线程实现MTS并行恢复binlog
通过SQL_Thread的方式可以使用主从本身并行复制的能力,在binlog越多且并行度越好的场景上表现越好。可以断点恢复,人为控制进度,比如stop slave或者遇到错误时,可以断点恢复可以利用多线程复制来加快增量速度,时恢复更快要关闭mysqld手动执行过程较mysqlbinlog方式更为复杂。原创 2023-07-30 21:34:04 · 477 阅读 · 0 评论 -
MySQL新增唯一索引造成数据丢失问题
【代码】MySQL新增唯一索引造成数据丢失问题。原创 2023-05-27 00:51:44 · 1156 阅读 · 0 评论 -
半同步复制下MySQL关闭的优雅方式
在生产环境中一般我们都是通过 kill -15 来关闭,这在单实例模式下是没有问题的,但在半同步复制模式下反而会导致 Master 节点不等待 Slave 节点是否收到二进制日志的 ACK 回包,直接完成事务,然后停止数据库服务,从而可能导致主从数据不一致。同样的场景,假设主库发送 binlog 到从库时,从库 io 线程故障,此时主库等待从库 ack,这时候主库被 kill -9 关闭了,对于客户端来说会收到返回失败信息,此时如果把从库提升为主库是可行的,从库也没有收到事务。原创 2023-05-26 00:05:47 · 329 阅读 · 0 评论 -
MySQL更新语句执行过程
并把操作的物理数据页修改记录到redo log buffer里,由于update这个事务会涉及到多个页面的修改,所以redo log buffer里会记录多条页面的修改信息。8、然后涉及到的老数据通过快照的方式存储到innodb_buffer_pool里的undo page里,并且记录undo log修改的redo(如果data page里有就直接载入到undo page里,如果没有,则需要去磁盘里取出相应page的数据,载入到undo page里)这里讨论commit的情况,并且双1。原创 2023-05-24 00:18:52 · 475 阅读 · 0 评论 -
MySQL的半一执行读
MySQL的半一致性读原创 2023-03-14 00:31:36 · 601 阅读 · 0 评论 -
使用packetbeat对MySQL进行网络抓包
使用packetbeat对MySQL进行网络抓包原创 2023-02-18 22:16:12 · 1374 阅读 · 0 评论 -
MySQL B+树结构解析以及深度计算
MySQL B+树以及深度计算原创 2023-02-15 00:19:42 · 1283 阅读 · 1 评论 -
ELK采集MySQL慢日志实现
使用ELK采集mysql慢日志进行统计分析原创 2023-02-14 23:38:29 · 3333 阅读 · 0 评论 -
四款官方MySQL Operator
MySQL Operator原创 2022-10-07 17:43:57 · 922 阅读 · 0 评论 -
slave-pending-jobs-size-max导致主从延迟
2022-05-11T20:30:50.601521+08:00 118 [Note] Multi-threaded slave: Coordinator has waited 57731 times hitting slave_pending_jobs_size_max; current event size = 8192. 在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet原创 2022-05-11 20:39:52 · 671 阅读 · 0 评论 -
orchestrator常用命令
orchestrator-client是客户端命令(/usr/local/orchestrator/resources/bin)orchestrator是服务端命令(/usr/local/orchestrator)orchestrator#discover用于发现实例以及该实例的主、从库信息,将获取到的信息写入后台数据库database_instance等相关表/usr/local/orchestrator/orchestrator --config=/usr/local/orchestrat.原创 2022-05-04 20:56:20 · 775 阅读 · 0 评论 -
MHA 传统复制和GTID复制的区别
指标传统GTID是否补全数据只要主节点服务器没挂,默认会将所有数据补全需在配置文件将master/binlog server配置到[binlog],才能补全Dead Master上的差异log,否则只应用到Latest Slave补全数据的方式新Master/其他Slave拉取Latest Slave的relay-log新master拉取Latest Slave的binlog补全数据的方式所有的新Master/其他Slave生成与Latest Slave之间差异的...原创 2022-04-25 20:14:22 · 587 阅读 · 0 评论 -
使用trace分析mysql性能问题
文章目录一、perf二、strace三、pstack一、perf perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。通过perf,应用程序可以利用PMU、tracepoint和内核中的计数器来进行性能统计。它不但可以分析制定应用程序的性能问题(per thread),也可以用来分析内核的性能问题。序原创 2022-03-06 23:55:06 · 392 阅读 · 0 评论 -
MySQL在K8S部署实践
文章目录一、创建mysql 服务二、创建持久卷三、创建持久卷声明四、部署MySQL一、创建mysql 服务cat << EOF > mysql-service.yamlapiVersion: v1kind: Servicemetadata: name: mysqlspec: selector: app: mysql ports: - port: 3306EOF#kubectl create -f mysql-service.yamlservi原创 2022-02-03 16:40:04 · 358 阅读 · 0 评论 -
数据库抓包工具go-sniffer
文章目录 go-sniffer支持mysql,redis,mongodb,http等go-sniffer --help==================================================================================[Usage] go-sniffer [device] [plug] [plug's params(optional)] [exp] go-sniffer en0 redis原创 2022-01-16 22:31:59 · 1096 阅读 · 0 评论 -
MySQL数据恢复“天花板“
文章目录一、背景二、DML导致数据丢失2.1 binlog闪回三、DDL导致数据丢失/数据文件损坏3.1 全备+binlog3.2 延迟从库[不常用,性价比不高]3.3 fd恢复3.4 三方工具恢复3.4.1 extundelete(ext4)3.4.2 undrop-for-innodb五、总结一、背景 在我们使用数据库时,难免会碰到数据被误删的情况,可能是业务错误操作、代码bug;也有可能是运维操作失误等等;但是我们可以将所有操作分为以下几类:DML导致数据丢失DDL导致数据丢失数据文件损原创 2022-01-02 22:46:50 · 800 阅读 · 0 评论 -
orchestrator的failover
文章目录一、自动切换二、手动切换2.1 recover2.2 force-master-failover2.3 force-master-takeover2.4 graceful-master-takeover一、自动切换orchestrator自动切换需要满足以下条件:主库是downtime的集群不进行故障切换。如果希望忽略集群故障,可以设置downtime。处于故障活跃期的集群不进行故障切换(即in_active_period=1)只对配置项RecoverMasterClusterFilte原创 2021-12-26 21:46:09 · 433 阅读 · 0 评论 -
Orchstrator集群拓扑发现
文章目录这里涉及到两个参数:HostnameResolveMethod、MySQLHostnameResolveMethodHostnameResolveMethod有三个选项:"cname"、"default"、"none"cname:通过CNAME做域名解析(resolve hostname)default:不做特别的解析, no special resolving via net protocolsnone:do nothingMySQLHostnameResolveMethod有三个原创 2021-12-26 02:01:28 · 397 阅读 · 0 评论 -
MySQL巡检SQL
#数据库对象select db,name,lower(type) from mysql.proc where db not in ('sys','information_schema','performance_schema','mysql') union all SELECT table_schema,table_name,'view' from information_schema.views where table_schema not in ('sys','information_schema',原创 2021-12-25 00:16:46 · 453 阅读 · 0 评论 -
MySQL高可用工具Orchestrator raft模式部署
orchestrator原创 2021-12-19 23:39:46 · 1578 阅读 · 0 评论 -
MySQL高可用架构Orchestrator配置文件详解
{#是否开启debug模式 "Debug": true,#是否记录到系统日志 "EnableSyslog": false,#web 端口 "ListenAddress": ":3000",#被管理数据库用户 "MySQLTopologyUser": "orc_client_user",#被管理数据库密码 "MySQLTopologyPassword": "orc_client_password",#被管理的MySQL的用户密码配置文件 "MySQLTopologyCred原创 2021-12-16 01:01:18 · 2890 阅读 · 0 评论 -
AliSQL特性
文章目录一、实用性SQL Statement OutlineSequence EnginePerformance Agent&Performance InsightSQL Audit LogReturning StatementFaster DDL二、稳定性Concurrent ControlLarge File PurgeThread Pool三、安全性TDE & SM4 & Data ProtectRecycle BinNative FlashbackXA Crash Safe四原创 2021-11-13 13:51:54 · 1086 阅读 · 0 评论 -
基于小米SAOR实现SQL自助优化接口
#!/usr/bin/python3# -*- coding: UTF-8 -*-import pymysqlimport osimport jsonimport timeimport loggingimport subprocessfrom connect_db_forbatch import connect_mysqlfrom flask_cors import *os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'fro原创 2021-10-24 14:48:31 · 234 阅读 · 0 评论 -
MySQL RR和RC隔离级别区别
RR 支持 gap lock(next-key lock),而RC则没有gap lock。因为MySQL的RR需要gap lock来解决幻读问题。而RC隔离级别则是允许存在不可重复读和幻读的。所以RC的并发一般要好于RR;RC 隔离级别,通过 where 条件走非索引列过滤之后,不符合条件的记录上的行锁,会释放掉(虽然这里破坏了“两阶段加锁原则”);但是RR隔离级别,通过 where 条件走非索引列过滤之后,即使不符合where条件的记录,也是会加行锁。所以从锁方面来看,RC的并发应该要好于RR;可以减少原创 2021-10-24 14:31:23 · 1548 阅读 · 0 评论 -
MySQL online DDL的两个坑
在外键关联中的表上的在线 DDL 操作不会等待在外键关联中的另一个表上执行的事务提交或回滚。事务在它正在更新的表上持有独占元数据锁,并在外键相关表上共享元数据锁(外键检查需要)。当需要独占元数据锁来更新表定义时,共享元数据锁允许在线 DDL 操作继续进行,但会在其最后阶段阻止操作。这种情况可能会导致死锁,因为其他事务等待在线 DDL 操作完成。运行DDL操作时,运行ALTER TABLE语句的线程会应用在同一表上并发运行的 DML 操作的在线日志,这些操作来自其他连接线程。应用 DML 操作时,可..原创 2021-10-24 14:30:04 · 301 阅读 · 0 评论 -
docker使用mysql自定义镜像启动
文章目录一、准备MySQL官方dockerfile二、准备官方包三、修改dockerfile四、构建镜像五、导出镜像一、准备MySQL官方dockerfilegit clone https://github.com/mysql/mysql-docker.git二、准备官方包wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-el7-x86_64.tartar xf mysql-8.0.26-el7-x86_64.tar原创 2021-10-03 23:40:55 · 325 阅读 · 0 评论 -
使用tcpkill工具kill mysql连接
## 按照IP查看连接数前10的应用服务器netstat -ano | grep 3306 | \awk '{print $5}'|awk -F':' '{print $1}'| \awk '{a[$1]++}END{for (j in a) print j":"a[j]}' | \sort -n -r -t ":" -k 2 |head -n 10## kill与3306端口建立的所有连接tcpkill -i eth0 port 3306## kill与服务器xxx和xxx建立的所有连接t原创 2021-09-21 21:29:38 · 213 阅读 · 0 评论 -
GDB修改mysql变量
有时候我们会碰到mysql连接数打满报错ERROR 1040 (HY000): Too many connections或者一些其他需要修改变量但又无法在线修改的场景;可以尝试通过GDB实现,生产慎用gdb -p ${pidof mysqld} -ex "set max_connections=512" -batch...原创 2021-09-21 21:33:59 · 188 阅读 · 0 评论 -
mysql实用客户端—mycli
mycli 是一款MySQL及支持MySQL协议的命令行界面,具有自动完成和语法突出显示功能。配置文件位于~/.myclirc。语法提示语法高亮提示高危操作二次确认日志记录~/.mycli-history、~/.mycli.logSQL报错多行模式大型结果集翻页查询...原创 2021-09-12 22:48:20 · 242 阅读 · 0 评论 -
relay_log_purge参数一则
MySQL数据库主从复制在缺省情况下从库的relay logs会在SQL线程执行完毕后被自动删除,(默认relay_log_purge=1)但是对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能以及定期清理的办法,从而避免对于清理过多过大的relay log需要注意引起的复制延迟资源开销等。MHA可通过purge_relay_logs脚本及配合cronjob来完成此项任务,具体描述如下:1、purge_relay_logs的功能a、为relay日志创建硬原创 2021-09-11 01:04:31 · 2620 阅读 · 0 评论 -
mysql 各类锁查看方法
-- 查看当前所有事务select * from information_schema.innodb_trx;-- 查看正在锁的事务select * from information_schema.innodb_locks;-- 查看等待锁的事务select * from information_schema.innodb_lock_waits;-- 查看表锁show open tables where In_use>0;--查看死锁show engine innodb status原创 2021-09-09 01:23:23 · 5671 阅读 · 0 评论 -
MySQL MGR数据一致性关键参数group_replication_consistency
group_replication_consistency是MySQL 8.0.14为解决MGR中一致性读提供的参数,可以在全局或单个事务中进行配置。分为以下5种可选值:EVENTUAL: RO和RW事务执行前不会等待先序事务的回放完成,也不会影响后序事务等待该事务回放完成,只需要在超过半数节点冲突检测通过以后即可提交;RW事务不等待其他成员完成应用事务,意味着事务可以在其他成员完成之前外部化。这就可能在在主库发生故障转移的情况下,新主数据库可以在先前的主要事务完成全部应用之前就开始接受新的RO原创 2021-09-08 01:15:14 · 1297 阅读 · 6 评论 -
goinception执行逻辑
一、审核阶段 goInception在收到sql语句后,先会解析注释中的远程数据库配置,并建立连接如果开启了备份功能,则会检查binlog日志是否开启判断语法开始位置,必须以 inception_magic_start 语法开始开始逐行解析,并进行语法树解析,失败时返回解析到use dbtest,会通过show databases判断数据库是否存在解析到create table table1…,接下来进行建表的校验判断库、表是否存在表名、列名长度校验,关键字校验存储引擎校验,表/列的字符原创 2021-08-29 21:22:20 · 487 阅读 · 0 评论 -
MHA binlogserver
从MYSQL 5.6开始提供了 BINLOG SEVER 的概念,通过BINLOG SERVER 来备份BINLOG 日志,并且这样的备份的BINLOG 日志基本上是实时的。 相应的MHA在binlog部分,可以定义mysqlbinlog server。MHA 0.56 添加了 master_binlog_dir 这个参数,这个参数是防止MYSQL 死机后无法获得BINLOG 的具体的位置而设定的。(当然如果LINUX 系统同死机了,那这个设置也是无效的)。当MHA执行基于GTID的故障转移时,M原创 2021-07-18 20:46:16 · 488 阅读 · 0 评论 -
MySQL大表drop/truncate操作流程
1、创建新表create table t1_new like t1;2、重命名表rename table t1 to t1_deleted,t1_new to t1;3、创建硬链接cd /data/mysql_data/sbtest/ln t1_deleted.ibd t1_deleted.ibd.hdlk4、删除表drop table t1_deleted;5、truncate 物理文件truncate 清理#!/usr/bin/bashfor i in `seq 740原创 2021-07-08 20:41:52 · 511 阅读 · 0 评论 -
使用python并发导出mysql全量离线数据
#!/usr/bin/python3import argparseimport sysimport subprocessimport loggingimport timefrom multiprocessing import Poolfrom connect_db_forbatch import connect_mysqldef db_log(): logger = logging.getLogger() logger.setLevel(logging.DEBUG)原创 2021-07-02 21:58:46 · 282 阅读 · 3 评论 -
pt-osc/gh-ost原理
pt-osc1、相关环境参数检查show、select、set2、创建新表进行变更SHOW CREATE TABLE `sbtest`.`t1`CREATE TABLE `sbtest`.`_t1_new`ALTER TABLE `sbtest`.`_t1_new` 3、创建触发器CREATE TRIGGER `pt_osc_sbtest_t1_del` AFTER DELETE ON `subtest`.`t1` FOR EACH ROW DELETE IGNORE FROM `sbt原创 2021-06-27 21:16:53 · 575 阅读 · 0 评论