MYSQL
aoerqileng
这个作者很懒,什么都没留下…
展开
-
个人的一些项目
go mysql客户端https://github.com/baixiaoyu/gocligo 解析系统表空间https://github.com/baixiaoyu/gibdgo id生成器https://github.com/baixiaoyu/idgeneratorpython 一些脚本https://github.com/baixiaoyu/dbascriptsgo mysql数据对比https://github.com/baixiaoyu/mydiff...原创 2022-04-28 12:34:56 · 1180 阅读 · 0 评论 -
dbagent
最近用go把数据库的自动化运维重构了一遍,之前都是些一些分散的脚本,没有成体系,现在把所有的功能都集成到了agent中,agent中封装的有些命令,会执行一些条件检查,避免手工执行的一些问题,比如建库,库名重复,等等,agent不曝漏密码,可以对执行的所有命令进行记录,审计,agent定时收集数据上传,并提供接口给server端,server端可以通过接口调用agent,操作mysql。server端使用raft,执行统计,以及调用agent接口操作mysql。agent支持的命令如下:The comm原创 2022-03-06 12:25:30 · 1490 阅读 · 0 评论 -
mysql showprocesslist 故障定位
在进行mysql 故障问题处理的时候,我们一般第一个先看 show processlist,对结果进行分析,有的时候,人工分析需要时间,本脚本能自动分析原因,给出相关建议。https://github.com/baixiaoyu/dbascripts/blob/main/myanalyzer.py如果阻塞的线程比较多,输入的结果也会比较多,另外如果sql比较长,那么输出结果展示也不一定很好。有问题可以反馈给我进行修改。...原创 2021-12-11 20:57:09 · 702 阅读 · 0 评论 -
MySQL半同步 vs raft
MySQL的after_sync半同步与raft 保证一致性的方式有些类似。after_sync是master在sync binlog后等待从库把事务写到relay log后的ack,拿到ack后,在commit,然后在返回给客户端提交成功的信息。raft中的日志有commit和applied 两个列表,commited 代表日志写入了文件,applied代表日志应用到了状态机。raft也是leader先写日志,然后在等待大部分的节点信息都写入了日志,提交了,然后leader在提交,提交日志后,lea原创 2021-09-16 14:54:27 · 365 阅读 · 0 评论 -
MySQL 数据对比
MySQL数据对比是常见的日常任务,使用pt-checksum 只能对比主从复制的数据,并且效率和使用上也不太方便。因此写了一个对比的工具,经过测试对比50张500万的表,能在30s内完成。要求,mysql 表必须有自增主键,对比期间不会加锁。对于不是非常非常高并发的主从复制,也可以进行数据的对比。可以非常方便的加入到日常的定时任务中。建议使用单独的机器运行对比,并把结果保存在单独的数据库实例中。链接:https://github.com/baixiaoyu/dbascripts/tree/main/c原创 2021-09-02 16:12:57 · 1823 阅读 · 0 评论 -
orchestrator master故障检测切换输出
Aug 29 03:15:52 dba1 orchestrator[8092]: dial tcp 192.168.36.131:3306: connect: connection refusedAug 29 03:15:52 dba1 orchestrator: [mysql] 2021/08/29 03:15:52 packets.go:123: closing bad idle connection: EOFAug 29 03:15:52 dba1 orchestrator: 2021-08-29原创 2021-08-29 15:59:21 · 596 阅读 · 0 评论 -
MySQL BinLog Server
MySQL 常用的几种Binlog Server有mysqlbinlog black hole maxscale.mysqlbinlog只是用来做纯binlog file的接受保存,只是一个命令启动了一个进程不停的接收。black hole是一种存储引擎,因此它是一个数据库实例,可以用来中继复制,maxscale也能用来中继复制,maxscale只适用于gtid复制以及MariaDB servers的复制,black hole 没有这个限制。MaxScale的使用https://mariadb.com/原创 2021-08-26 23:30:48 · 352 阅读 · 0 评论 -
MySQL8 resultset_metadata 对性能的影响
看了姜老师的视频,介绍这个参数对性能的影响,自己实际测试了一下。表结构+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+----------------+| id | int |原创 2021-07-30 10:46:02 · 396 阅读 · 0 评论 -
MySQL 查看指定时间范围内的大事务
代码地址:https://github.com/baixiaoyu/dbascripts/blob/main/bigtrx.py这个脚本能获取指定时间内的大事务信息。分别通过大小,影响行数及执行时间进行排序输出。输出的结果中有获取指定事务的命令,在排查大事务方面比较方便。输出结果实例:------order by rows-------trx 61824725984 start at:2021--06--17 12:23:06 from line: 4104 to line: 4515 has 8原创 2021-07-30 10:33:28 · 576 阅读 · 0 评论 -
MySQL innodb数据文件解析
写了一个程序,解析了MySQL的系统表空间和dump数据字典头,只是用于尝试以及学习,在实际中看不到使用的场景,所以只实现这2部分。gtihub 地址: https://github.com/baixiaoyu/gibd系统表空间解析输出部分日志输出内容如下:...原创 2021-07-24 21:06:09 · 305 阅读 · 0 评论 -
MHA与Orchestrator 对比
从下面几点对比了MHA和Orchestrator原创 2021-07-06 12:22:41 · 1323 阅读 · 0 评论 -
iterm2 的问题
DBA最好不要用iterm2去操作数据库,可能是我没有配置好,在执行命令的时候,库名输入了特殊字符,结果iterm也没有办法显示特殊字符是什么。ascii只显示128位内的。另外在拷贝大量命令的时候有莫名其妙的截断。导致执行到一半报错。还是用secrecrt 吧。...原创 2021-07-02 17:55:17 · 235 阅读 · 0 评论 -
pt-osc ghost 对比
从下面几个方面对比了下pt-osc和ghost原创 2021-07-02 12:04:15 · 661 阅读 · 0 评论 -
MySQL组提交
1. Queue ourselves for flushing. 2. Grab the log lock, which might result is blocking if the mutex is already held by another thread. 3. If we were not committed while waiting for the lock 1. Fetch the queue 2. For each thread in the que原创 2021-06-11 10:26:45 · 399 阅读 · 2 评论 -
MySQL binlog发送
sql_parser.cc 中处理语句 case COM_BINLOG_DUMP_GTID: // TODO: access of protocol_classic should be removed error= com_binlog_dump_gtid(thd, (char *)thd->get_protocol_classic()->get_raw_packet(), thd->get_protocol_classic()原创 2021-06-10 17:50:01 · 386 阅读 · 0 评论 -
semi-sync3
semi sync 相关hook 及处理函数都是在semisync_master_plugin.cc 文件中定义Trans_observer trans_observer = { sizeof(Trans_observer), // len repl_semi_report_before_dml, //before_dml repl_semi_report_before_commit, // before_commit repl_semi_report_before_ro原创 2021-06-10 16:15:51 · 228 阅读 · 0 评论 -
MySQL半同步与sync_relay_log关系1
sync_relay_log 肯定是与relay log相关,所以从rpl_slave.cc处理relay log的代码开始入手extern "C" void *handle_slave_io(void *arg)/* XXX: 'synced' should be updated by queue_event to indicate whether event has been synced to disk */ bool synced= 0; if (que原创 2021-06-04 13:28:13 · 436 阅读 · 0 评论 -
gh-ost的原子rename
在pt-osc的切换时候rename的过程会有短暂的表不存在的情况,应用程序可能会报错。gh-ost 通过先创建一个切换表,一个会话 lock住原表和切换表,然后在另外一个会话执行rename操作导致rename被故意阻塞,然后第一个会话删除掉切换表,在unlock 之前的锁,第二个会话执行成功2021-05-20 22:59:45 INFO Grabbing voluntary lock: gh-ost.99.lock2021-05-20 22:59:45 INFO Setting LOCK tim原创 2021-05-21 12:06:15 · 332 阅读 · 0 评论 -
mysql 中的limit语句在执行计划中rows不准确
https://forums.mysql.com/read.php?24,597352,597431#msg-597431https://www.percona.com/blog/2006/07/24/mysql-explain-limits-and-errors/https://bugs.mysql.com/bug.php?id=50168limit在explain 中会被忽略,在8.0中也没有修复原创 2021-04-16 10:11:46 · 446 阅读 · 0 评论 -
percona mysql与官方版本对比
https://www.percona.com/software/mysql-database/percona-server/feature-comparison原创 2021-04-12 11:52:52 · 548 阅读 · 0 评论 -
mysql xtrabackup工具等待优化
xtrabckup工具的备份优化,添加了下面的参数Options summary–ftwrl-wait-timeout (seconds) - how long to wait for a good moment. Default is 0, not to wait.–ftwrl-wait-query-type - which long queries should be finished before FLUSH TABLES WITH READ LOCK is run. Default is al原创 2020-12-06 18:12:28 · 422 阅读 · 0 评论 -
gap lock记录
gap lock没有sx冲突一说,在主键上的查询如何没有对应的记录,也是next-key lock,不是单纯的行锁原创 2020-12-06 16:29:40 · 287 阅读 · 0 评论 -
mysql 一个update语句事务的执行流程
更新空行不会开启2阶段提交,没有prepare阶段开始执行begin命令#endif case SQLCOM_BEGIN: if (trans_begin(thd, lex->start_transaction_opt)) goto error; my_ok(thd); break; ** Begin a new transaction. @note Beginning a transaction implicitly commits a原创 2020-12-02 10:32:58 · 1388 阅读 · 0 评论 -
mysql限制并行
对一个innodb来说,限制并发线程的主要目的是减少上下文切换导致的性能问题。在有助于最大程度地减少线程之间的上下文切换的情况下,InnoDB可以使用多种技术来限制并发执行的操作系统线程的数量(从而限制在任何时间处理的请求的数量)。当InnoDB从用户会话接收到新请求时,如果同时执行的线程数处于预定义的限制内,则新请求将休眠一小段时间,然后再次尝试。睡眠后无法重新安排的请求被放入先进/先出队列,并最终得到处理。等待锁的线程不计入同时执行的线程数。您可以通过设置配置参数innodb_thread_conc原创 2020-11-25 11:44:15 · 410 阅读 · 0 评论 -
mysql减少全表扫对缓存数据的影响
innodb_old_blocks_timeNon-zero values protect against the buffer pool being filled by data that is referenced only for a brief period, such as during a full table scan. Increasing this value offers m...原创 2019-08-23 15:43:48 · 363 阅读 · 0 评论 -
mysqld初始化没有系统库生成
在debian的系统上进行mysqld 初始化的操作,但是没有看到有系统库生成,导致无法启动,指定了defaults-file依然不行。需要加–no-defaults添加参数–no-defaults,进行初始化。并且,切记要放在参数的首位!http://www.voidcn.com/article/p-zzxrezio-zp.html...原创 2020-11-17 11:51:31 · 410 阅读 · 1 评论 -
mysql修改源码发布及源码中的debug日志查看
修改了mysql的源码后,就能按照,源码编译部署的步骤进行部署,打成一个解压即用的包。mkdir debugcd debugcmake … -DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 -DMYSQL_DATADIR=/user/local/mysql57/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3309 -DMYSQL_USE原创 2020-10-13 17:09:53 · 688 阅读 · 0 评论 -
mysql用xtrabackup 在从库制作新从库
innobackupex --defaults-file=/data/mysql_3320/my3320.cnf --user=mybackup --password=‘qkyo9eGlf0DCGo3x7UHU’ --socket=/tmp/mysql_3320.sock --slave-info --safe-slave-backup --no-timestamp /data/mysql_backup/3320innobackupex --apply-log /data/mysql_b.原创 2020-09-24 17:21:30 · 459 阅读 · 0 评论 -
mysql数据变更捕获用什么
在捕获mysql变更上,有一些组件可以直接使用的,maxwell ,databus,canal,这三个工具上maxwel足够简单支持mysql到kafak,databus比较复杂,需要自己写代码去databus上消费,支持的数据源比较多,canal也支持客户段消费,也能把变更发送到kafka,也支持集群模式,从这个上面来看个人更倾向canalhttps://blog.csdn.net/qq_25073261/article/details/104969148?utm_medium=distribute.p原创 2020-09-17 14:19:09 · 307 阅读 · 0 评论 -
mysql ,oracle不一样的一个例子
oracleSQL> select * from dba_test;ID50session a:SQL> update dba_test set id=id-10;1 row updated.SQL> commit;在commit前执行session bsession b:SQL> update dba_test set id=id-30;–被a阻塞,a提交后,1 row updated.SQL> select * from dba_test;I原创 2020-09-10 14:55:27 · 222 阅读 · 0 评论 -
5.7的一个开发上的bug
https://bugs.mysql.com/bug.php?id=79549Regression: “unknown column” for outer computed values used inside a subquery关联自查询中使用外部的别名,无法识别的问题,开发时候需要注意下原创 2020-08-18 11:40:47 · 262 阅读 · 0 评论 -
mysql Orchestrator使用与mha对比
待填充原创 2020-05-27 14:25:51 · 1098 阅读 · 0 评论 -
mysql读书笔记
mysql的体系结构,可以分为以下的几个模块:1 server初始化模块2 连接管理器3 线程管理器4 连接线程5 用户认证模块6访问控制7解析8命令分发9 查询缓存10 优化器11 表管理12 表定义模块13表维护模块14状态报告模块15抽象存储引擎接口16存储引擎实现17日志记录18 复制master19 复制slave20 客户端服务端api21 低级别的网络io api22 核心api在书中提到,select命令会被传递到优化器上,dml ddl会转发到原创 2020-05-25 17:08:20 · 536 阅读 · 0 评论 -
mysql并行复制设置多少worker合适
开启并行复制后,在日志中会输出下面的一些指标信息 Multi-threaded slave statistics for channel '': seconds elapsed = 192; events assigned = 86017; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 0; waited at clock confli原创 2020-05-19 17:10:25 · 570 阅读 · 0 评论 -
mysql半同步
半同步中如果在主服务器端启用了半同步复制,并且至少有一个半同步从服务器,则在主服务器上执行事务提交的线程将阻塞并等待,直到至少一个半同步从服务器确认已接收到该事务的所有事件为止,或者直到 发生超时。从属仅在将事件写入其中继日志并刷新到磁盘后才确认收到事务的事件如果发生超时而没有任何从属服务器确认该事务,则主服务器将还原为异步复制。 当至少有一个半同步从属服务器赶上时,主服务器将返回到半同步复制必须在主服务器和从服务器上都启用半同步复制。 如果在主服务器上禁用了半同步复制,或者在主服务器上但没有从属服原创 2020-05-14 17:30:52 · 320 阅读 · 0 评论 -
mysql sync_binlog与组提交的关系
组提交参数:binlog_group_commit_sync_delayControls how many microseconds the binary log commit waits before synchronizing the binary log file to disk. By default binlog_group_commit_sync_delay is set to 0, meaning that there is no delay. Sbinlog_group_commit_s原创 2020-05-13 10:37:41 · 1310 阅读 · 0 评论 -
mysql 组复制-简介
组复制提供了了容错能力,只要组中的大多数的成员存活,那么系统就是可用的,组复制有2中形式,多master,所有server都能接受更新和单master自动选主,只有master接受更新,有更新冲突的时候,会采用先提交获胜的策略,回滚掉后提交的,组复制中对于读写的事务的提交并不是有原始的server单独决定的,需要所有的server决定是否提交,在原始server上提交的时候,该server会发送一个广播,包含行改变及行的唯一标识符,然后这个事务有个全局总顺序,确保每个server上接收的是相同顺序的事务,在原创 2020-05-11 16:35:16 · 376 阅读 · 0 评论 -
mysql组复制-流控
group_replication_flow_control_mode这个参数控制着流控的类型,在有大量写延时的情况下需要调整流控的配置组复制确保事务只在组中的大多数成员收到后才提交,并同意所有同时发送的事务之间的相对顺序。如果写入组的总数量不超过组中任何成员的写入容量,则此方法运行良好。 如果是这样,一些成员的写入吞吐量比其他成员少,特别是小于作者成员,那么这些成员就可能开始落后。出现组复制的延时会引起很多的问题,1在别的server上读取的数据是旧的。2别的server需要预留出更多的空间来满足慢原创 2020-05-11 16:34:35 · 577 阅读 · 0 评论 -
mysql关于write set的几个参数
transaction_write_set_extraction:这个参数设置hash算法,用来做组复制的冲突检测处理Defines the algorithm used to generate a hash identifying the writes associated with a transaction. If you are using Group Replication, the hash value is used for distributed conflict detection a原创 2020-05-11 16:13:16 · 1139 阅读 · 0 评论 -
hue显示bigint问题修复
在hue显示bigint的时候超过17位,接口返回的是正确值,但是前端返回的不正确。https://www.zhihu.com/question/34564427修改了后端,让所有的字段都变成string。def rows(self):while self.has_more:yield [str(x) for x in self.next.pop(0)]/home/hue-cdh6.1...原创 2020-04-19 12:38:26 · 335 阅读 · 0 评论