MySQL
文章平均质量分 69
翔云123456
这个作者很懒,什么都没留下…
展开
-
关于MySQL 中的全局事务标识符GTID
MySQL 中的全局事务标识符(GTID)确实会随着事务的不断执行而增长,但这并不意味着它会无限增长而导致问题。GTID 的设计和实现考虑到了长期运行的情况,尽管 GTID 值会持续增加,但它的设计允许数据库系统以可管理和高效的方式处理这些值。GTID 的组成。原创 2024-06-10 14:30:40 · 952 阅读 · 0 评论 -
MySQL 半同步复制
MySQL 半同步复制自引入以来,经历了多个版本的迭代和优化,逐步增强了其功能和性能。MySQL 5.5:半同步复制首次引入。这个版本的半同步复制提供了基本的功能,确保了在事务提交并写入到主库的二进制日志(binlog)后,至少有一个从库确认接收到这些变更之后,事务才算完成。这减少了主从切换时数据丢失的风险,但在某些情况下可能会增加事务的延迟。功能增强MySQL 5.6:增加了对多线程从库(Multi-Threaded Slave, MTS)的支持。原创 2024-06-10 14:19:50 · 722 阅读 · 0 评论 -
TiDB分布式关系型数据库简介
本文主要介绍TiDB架构以及使用场景。原创 2024-02-14 11:11:19 · 1341 阅读 · 0 评论 -
Innodb_rows_inserted 陡增
最近遇到一个奇怪的问题,`Innodb_rows_inserted`指标出现增长异常。原创 2024-02-04 10:36:27 · 537 阅读 · 0 评论 -
MySQL中的加密函数
函数在 MySQL 中通常用于创建用户时对密码进行加密。例如,当你想创建一个新的 MySQL 用户时,你可以使用。是用户的原始密码,MySQL 会自动对其进行加密。注意:从 MySQL 5.7.6 开始,本文简单介绍MySQL中的加密函数。可以解密外,其他的都是不可逆的。函数已被废弃,建议使用更安全的。注意:以上加密函数除了。函数来加密用户的密码。会返回加密后的密码。原创 2024-01-20 11:58:00 · 1230 阅读 · 0 评论 -
关于MySQL Cluster
MySQL Cluster是MySQL的一个高可用性,高性能的分布式数据库解决方案。它结合了内存数据库和共享无状态架构的技术,提供了99.999%的可用性,满足严格的高可用性需求。原创 2024-01-01 08:30:00 · 1062 阅读 · 0 评论 -
关于数据库归档
本文主要介绍数据库归档基本概念和目的,以及对于MySQL来说,有哪些归档工具。原创 2023-12-31 23:24:45 · 878 阅读 · 0 评论 -
如何备份和恢复数据库
本文主要介绍如何使用xtrabackup 进行数据库的备份和恢复,并在最后介绍了原理。原创 2023-10-03 20:59:45 · 537 阅读 · 1 评论 -
DTS Data Transfer Service 数据传输服务是什么
例如,阿里云的DTS、AWS 的Database Migration Service、Azure 的Database Migration Service 和 Google Cloud 的 Database Migration Service,一些云服务提供商,如阿里云、AWS、Azure和Google Cloud,都提供了自己的DTS服务,以帮助用户在云环境中进行数据库迁移。DTS通常支持多种源数据库和目标数据库之间的数据迁移,如MySQL、PostgreSQL、Oracle、SQL Server等。原创 2023-09-23 21:32:49 · 500 阅读 · 0 评论 -
业界都有哪些数据库监控工具
这些工具都可以帮助用户实时监控数据库的运行状态、性能指标、系统负载等信息,从而帮助用户更好地管理和维护数据库。不同公司可能会根据自身需求和预算选择合适的监控工具。本文主要介绍下数据库监控工具。原创 2023-08-27 15:59:29 · 1507 阅读 · 0 评论 -
数据库备份工具有哪些
本文主要介绍下数据库备份工具。数据库备份工具有很多种,以下是一些常见的数据库备份工原创 2023-08-27 15:36:49 · 1382 阅读 · 0 评论 -
浅谈数据库分库分表
数据库的分库分表解决方案需要根据实际业务需求和技术栈进行评估,合适才是最重要的。在实施分库分表时,还需要考虑数据迁移、数据一致性、事务处理等问题。原创 2023-07-29 22:48:32 · 1006 阅读 · 0 评论 -
orchestrator 中的 agent
Orchestrator是一个开源的MySQL高可用(High Availability)解决方案,它可以自动化执行MySQL故障转移、主从切换、数据中心迁移等操作,同时提供了一个Web界面和API接口,方便运维人员进行MySQL集群管理和监控。在Orchestrator 常用功能中,很少提及agent,实际上,Orchestrator 也有agent相关功能,并有一个独立的项目。在Orchestrator 中,通过配置项配置agent 相关功能是否开启,主要是http server。原创 2023-06-23 17:10:29 · 586 阅读 · 0 评论 -
MHA(Master High Availability)高可用工具补数据功能
MHA(Master High Availability)是一个用于实现MySQL数据库高可用(High Availability)的工具集。它可以在主从复制架构中实现故障切换和主库切换,以确保数据库服务的稳定运行。原创 2023-05-27 21:13:13 · 1044 阅读 · 0 评论 -
为什么在连接mysql时,设置 SetConnMaxIdleTime 没有作用
在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。这时,经常会使用,设置最大连接有效时间,使用,设置最大空闲连接时间 max idle time。这两个函数的作用听起来差不多,理论上,都能达到相同效果。但是在实际使用中,却有些出人意料。首先看下测试代码,在以下代码中,设置 max idle time 为传入的参数值,设置 max life time 为传入的参数值,设置 max open conn 为1,原创 2023-02-25 22:08:02 · 1595 阅读 · 0 评论 -
MySQL HA(High Availability) 数据库高可用工具Orchestrator 基本原理
`Orchestrator` 是一款开源的MySQL数据库高可用HA工具。它稳定可靠,通过分布式的集群部署模式,自身具备容灾能力。它功能强大,通过周期执行探测SQL,抓取MySQL 实例的基本信息,包括配置信息、复制状态等,可以得到MySQL的拓扑结构topology。并且,可以根据拓扑结构诊断故障analysis failure。本文主要介绍了基本工作原理,相信看完之后,一定会有所收获。原创 2022-12-18 21:28:07 · 1042 阅读 · 0 评论 -
Orchestrator global recovery disable 全局开关
Orchestrator中,在MySQL集群粒度,有故障自动恢复开关,在全局粒度,也有一个全局的开关(global recovery disable)。本文主要介绍全局开关(global recovery disable)的基本实现方式。下面分别从几个层面阐述。原创 2022-10-23 13:11:38 · 447 阅读 · 0 评论 -
Orchestrator中的hooks函数
Orchestrator中有很多hooks函数,用于调用外部服务做一些配置或者准备等工作。原创 2022-09-30 23:10:21 · 673 阅读 · 0 评论 -
stop slave卡住--事务的事件没有复制完整
在文章stop slave卡住,初步介绍了stop slave的问题现象以及一些原因。以及文章stop slave 卡住模拟–大事务场景中,介绍了大事务场景中,stop slave的模拟。本文介绍另外一种情况:一个事务的事件没有完整复制到从库。此时在从库事务已经开始执行,并且在等待事务的其他事件,但由于主库故障,从库上,没有收到这个事务的所有事件。......原创 2022-06-30 23:44:29 · 636 阅读 · 0 评论 -
MySQL中的 空值(null)和空字符(‘‘)
目录文章目录长度和判空ifnull字段定义为not null,查询的时候也可能返回null建议参考空值(null)和空字符(‘’)是两个比较容易混淆的概念。本文对两者的区别做简单梳理。长度和判空长度判断空空值null长度为null,占空间,但具体占用多大空间不确定。判断null用is null或is not null空字符串’’长度为0,不占用空间。判断空字符用=‘‘或者!=’’ifnull对于空值null,可以使用ifnull()函数进行处理。例如,原创 2022-05-01 16:20:13 · 5040 阅读 · 0 评论 -
golang 连接mysql 的时间参数loc, parseTime
在使用golang连接MySQL的时候,经常会用到和。这两个参数的作用是什么呢?先说下不带这两个参数存在的问题:下面看下这两个参数。如果配置了,MySQL中的、等时间类型字段将自动转换为golang中的类型。 类似的 ,会被转为的零值。否则,如果没有配置或配置了, 只会转为 / 。设置转换为 类型时, 使用的时区信息 (当设置parseTime=true)。默认值 ,表示解析为UTC时间。一般设置为,表示使用当地时间。这个设置只表示解析为类型时,使用的配置。原创 2022-04-30 23:05:18 · 6907 阅读 · 0 评论 -
golang 使用go-sqlmock对 insert, update, delete, select做单元测试
上篇文章go 单元测试go-sqlmock 已经介绍了如何使用go-sqlmock进行 sql相关的单元测试。本文着重介绍平时开发过程中常见的例子。目录模拟insert模拟update模拟delete模拟select模拟insert例如以下 insert 代码。package orangeimport ( "database/sql" "fmt")type OrangeProcess struct{ Id int64 Hostname string原创 2022-03-05 23:23:47 · 3033 阅读 · 0 评论 -
MySQL binlog 格式简析
关于 binlog 是什么,以及作用、格式等基本信息,可以查看上一篇文章关于MySQL binlog二进制日志。本文主要介绍增、删、改操作时,具体记录的binlog格式。binlog 格式有三种:statement, row,以及mixed,下文基于row的格式进行说明。目录创建db创建表插入数据更新数据删除数据参考首先,使用flush logs命令,新建binlog 文件。mysql >show master status\G*************************** 1.原创 2022-01-02 22:19:58 · 985 阅读 · 1 评论 -
MySQL 如何批量kill 慢查询
Slow query 慢查询 是指 执行很慢的SQL语句。一般会设置一个阈值,例如,100ms,执行时间超过100ms的都会判定为慢查询。 慢查询是一种危险的信号,MySQL 服务可能很快不可用。当大量出现的时候,应该立即kill。下文主要介绍如何批量kill 慢查询。首先,查看有哪些慢查询的SQL:select * from information_schema.processlist where command='query' and time > 20;其中,限定条件中加了comma原创 2022-01-02 16:05:15 · 2673 阅读 · 0 评论 -
关于GitHub 服务中断 24 小时 11 分钟事故
目录1.背景MySQL集群部署情况Orchestrator部署情况2.事情的经过3.存在的隐患4.参考这起事故虽然发生在2018年,已经过去了很长时间,但其中的问题和带来的启示永不过时,拿来分析,具有很重要的意义。1.背景GitHub主要有东、西海岸两个数据中心,以及其他三个公有云数据中心。本次事故主要涉及东、西海岸两个数据中心。并且,在GitHub,使用的Orchestrator作为MySQL集群拓扑管理和主库高可用工具。GitHub 的MySQL集群和Orchestrator高可用服务部署情况原创 2021-11-28 20:55:01 · 556 阅读 · 0 评论 -
MySQL error 是哪里来的
目录1.MySQL error分类2.测试3.参考在使用MySQL的过程,有时会遇到MySQL 报错信息,例如,权限报错:Error 1045: Access denied for user 'root'@'10.3.18.88' (using password: YES)连接报错:Error 2013: Lost connection to MySQL server during query无法识别的MySQL server报错:Error 2005: Unknown MySQL ser原创 2021-11-28 15:37:31 · 803 阅读 · 0 评论 -
使用mysqldump 导出数据时的常用选项
目录文章目录--single-transaction--set-gtid-purged=OFF不加 --set-gtid-purged=OFF加上 --set-gtid-purged=OFF其他常用选项参考前面两篇博客MySQL导入导出数据库、mysqldump 如何导出表的部分数据已经介绍了mysqldump的基本用法。本文主要介绍在使用mysqldump时常用的选项。–single-transaction该选项保证数据导出的一致性:--single-transaction 这里的原创 2021-10-30 23:01:27 · 1743 阅读 · 0 评论 -
MySQL 批量insert 、单条insert
目录准备数据表单条insert批量insert本文简单介绍在MySQL中insert数据方法。准备数据表CREATE TABLE `test5` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, `age` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:yes, -1:no', PRIMARY KEY (`id`), UNIQUE KEY `name_UN原创 2021-10-30 20:20:28 · 3207 阅读 · 0 评论 -
基准压测工具sysbench
目录1.安装1.1 直接使用二进制安装包1.2 通过源码编译安装2.MySQL压测2.1 准备数据2.2 执行测试2.3 清理数据3.参考什么是sysbench?sysbench是一款基于LuaJIT的多线程基准测试工具,它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂工作负载。主要功能包括:oltp_*.lua: OLTP类数据库压测工具集fileio: 文件系统级基准测试cpu: CPU基准测试memory: 内存访问基准测试threads:线程调度基准测试mu原创 2021-09-12 22:51:47 · 509 阅读 · 0 评论 -
MySQL 高可用 MySQL High Availability 示例代码下载
《MySQL 高可用 MySQL High Availability》 本书使用的示例代码可以 这里下载。博主下载后,上传到CSDN了,方便大家使用。代码目录截图:CSDN 下载地址mysql-replicant-python.zip原创 2021-08-29 17:31:27 · 238 阅读 · 0 评论 -
stop slave后,正在执行的事务是完成了还是回滚了rollback
目录1.关于stop slave后,事务执行结果2.观察事务回滚2.1.设置从库的事务隔离级别2.2.启动SQL thread2.3.停止复制,查看事务执行情况1.关于stop slave后,事务执行结果如果从库上SQL线程正在应用relay log,或者说正在执行一个事务,此时如果stop slave,那么这个事务执行结果会是什么,完成还是未完成?由于事务的原子性,可以这么说,事务要么执行完成,要么回滚。先说结论,事务执行结果有两种:执行完成未执行完成(事务回滚)那什么情况执行完成,什么原创 2021-08-15 22:40:59 · 331 阅读 · 0 评论 -
stop slave 卡住模拟--大事务场景
目录1.主库数据准备2.从库停止复制stop slave,只开启io thread3.在主库上执行大事务4.开启复制start slave sql_thread,等待2s,接着stop slave上一篇文章stop slave卡住,初步介绍了stop slave的问题现象以及一些原因。本文介演示遇到大事务时,从库stop slave会卡住。MySQL测试集群:一主一从。主库、从库执行操作如下。1.主库数据准备首先,新建表CREATE TABLE `apple_test` ( `id` in原创 2021-08-07 23:06:56 · 475 阅读 · 0 评论 -
大事务big or long transaction模拟
目录创建表插入大量数据,模拟大事务所谓大事务,是指执行过程比较长的事务。例如,执行超过5s,10s,1min。。。。一个事务可以有多个event,也可以只有一个event。本文主要介绍如何模拟一个有多个event的大事务。创建表建表sqlCREATE TABLE `apple_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL DEFAULT '0' COMMENT 'a', `b` int(11)原创 2021-08-07 22:12:08 · 462 阅读 · 0 评论 -
Orchestrator中 errant 的判断
在主从复制中,会在主库上写入数据,接着从库复制主库写入的数据。如果直接在从库上写入数据,从库中数据就会与主库不一致,出现 errant。errant 问题,主从数据不一致,需要及时发现和治理。如何判断 是否出现errant 呢?看起来比较简单,就是判断 从库 gtid 是否比主库gtid多,如果是,则判定为errant。但会有一种场景,如果先获取主库gtid,再获取从库gtid,由于这两个操作之间有时间差,从库会从主库复制数据,就会出现 从库的gtid 比主库的gtid多,出现误判。调整获取主库原创 2021-06-13 22:56:04 · 611 阅读 · 0 评论 -
如何阅读MySQL源码
目录1.下载MySQL源码2.IDE的使用2.1 安装 C/C++ 插件。2.2 打开代码为了更加准确的理解MySQL原理,很多时间需要查看文档和阅读源码。如果文档中,描述模糊,就需要查看代码进行确认。本文简单介绍下,在Mac OS 环境下,如何高效的阅读MySQL源码。1.下载MySQL源码在github上找到release列表,选择需要下载的版本。本文这里下载的是5.7.26。下载后,解压缩。2.IDE的使用IDE的使用,可以极大提高阅读效率。网上,有的也推荐用vim等等,需要繁琐的配原创 2021-06-05 15:20:14 · 3309 阅读 · 0 评论 -
模拟磁盘满情况下MySQL表现
目录创建大文件写入数据查看错误日志参考本文主要模拟磁盘满的情况下,MySQL服务的表现。模拟磁盘满的故障,可以通过创建大文件来进行。创建大文件可通过三个进行: truncate、dd、fallocate。本文使用dd命令创建大文件。创建大文件/bin/dd if=/dev/zero of=/tmp/dd_big_file bs=1G count=360/bin/dd: writing `/tmp/dd_big_file': No space left on device186+0 reco原创 2021-03-20 16:59:16 · 340 阅读 · 2 评论 -
mysql insert into, insert ignore into, insert into on duplicate key update
目录insert intoinsert ignore intoinsert into on duplicate update不存在记录时insert ignore into on duplicate update不存在记录时几个sql的执行情况汇总如下表:指令已存在不存在insert报错插入insert ignore忽略插入insert into on duplicate key update更新插入insert ignoreinto on dupli原创 2021-02-28 23:10:25 · 458 阅读 · 0 评论 -
Cannot modify session.sql_log_bin inside a transaction
目录问题解决方案参考问题当主库上数据的某些变更,不希望复制到从库上时,经常会将sql_log_bin关闭,使更新操作不记录bin log。例如,在一个连接会话开始的时候,关闭sql_log_bin,接下来,这个连接上执行的更新操作都不记录bing log。为了保证,关闭sql_log_bin和更新操作,是在同一个连接上,我们会想到使用事务transaction。但在使用事务过程中,遇到如下报错:Error 1694: Cannot modify @@session.sql_log_bin ins原创 2021-02-28 16:23:04 · 1206 阅读 · 0 评论 -
数据库事务transaction
目录1.什么是事务?2.golang中对事务的支持开启事务执行更新操作提交回滚例子3.参考1.什么是事务?数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。–百度百科例如,转账就是一个事务,它由两个操作组成:将款项从第一个账户划出。将款项存入第二个账户。这两个操作要不全部成功,要不全部不成功。如果第一个操作成功了,而第二个操作失败了,原创 2021-02-28 14:47:26 · 729 阅读 · 0 评论 -
关于 MySQL sql_log_bin
当前会话 是否记录 bin log默认值onSET sql_log_bin = {OFF|ON}关闭,主库服务器上的改动不记录bin log,可以不复制到从库全局的sql_log_bin是只读的,不能修改。如果是基于GTID复制,当关闭sql_log_bin后,任何修改,不会有GTID,也不会记录到bin log。下面做下测试:首先查看log file, log pos, 以及 gtid set:>show master status;+------------------+---原创 2021-02-09 19:24:32 · 3916 阅读 · 4 评论