
mysql
文章平均质量分 68
叶落千尘
这个作者很懒,什么都没留下…
展开
-
Orchestrator核心之失败探测
前言上篇文章中:《orchestrator的discover模块》主要讲述的是在client发出discover这个命令后,orchestrator服务端所采取的动作,那么,后续的持续discover,是如何实现,并且如何探测到失败实例的呢,今天这篇文章就来讲述这方面的内容。持续发现入口函数在:logic/orchestrator.go文件:ContinuousDiscovery()函数调用handleDiscoveryRequests(),handleDiscoveryRequests()该函数就原创 2022-03-08 15:09:04 · 540 阅读 · 0 评论 -
Orchestrator核心之失败类型判定
Orchestra失败类型我们可以从官网上了解到,orchestrator有很多中失败类型,如DeadMaster、DeadMasterAndReplicas、DeadMasterAndSomeReplicas等等。那么,它是如何来判断这些类型的呢,今天一起走进orchestrator的内心世界。orchestrator数据采集过程要知道orchestrator如何判定失败类型,那么首先要知悉orchestrator的探测或检测过程,这部分的内容,会在单独的一篇文章中写,这篇文章主要讨论的是失败类型的原创 2022-03-02 17:18:46 · 882 阅读 · 0 评论 -
orchestrator的discover模块
orchestrator的discover原理当我们发出命令:orchestrator-client -c discover -i hostname:port首先,orchestrator会发现给定的实例,即命令中的hostname:port这个实例,然后进而通过该实例来发现整个拓补结构。具体如何进行发现:1、使用MySQLHostnameResolveMethod和HostnameResolveMethod两个参数来发现给定实例。2、使用DiscoverByShowSlaveHosts来发现原创 2022-01-13 11:10:50 · 870 阅读 · 6 评论 -
Orchestrator手动优雅切换源码切换逻辑部分解读
Orchestrator解读第一部分最近在二次开发Orchestrator,所以研读了一下优雅切换部分的代码。入口首先,通过orchestrator-client来做为客户端请求入口来说明:代码位于:orchestrator/resources/bin/orchestrator-clientmain:function main { check_requirements detect_leader_api instance_hostport=$(to_hostport $ins原创 2021-08-21 17:22:32 · 970 阅读 · 2 评论 -
orchestraror使用下篇
概述在之前,比较笼统的讲述了Orchestrator的大概部署与用法,本篇则详细描述Orchestrator的Hook、API命令的使用。还有其他部署过程中需要注意的点。如果对Orchestrator还不太了解,可以参考:《 MySQL中间件:Orchestrator上篇》配置细化在说明Hook之前,要先了解Orchestrator是如何做故障检测的,以及是如何进行故障恢复的。需要的配置Orchestrator配置文件中的配置有一项:{ “ FailureDetectionPerio原创 2021-01-20 22:46:23 · 1661 阅读 · 2 评论 -
innodb MVCC
undo log回滚段是记录MVCC历史的一个空间,如果开启了独立表空间,会在独立表空间中创建一个回滚表空间,undo表空间有128个段,其中:1~32段存放于临时表的系统表空间中33~127段存放于独立undo表空间中为了事物并发,每个undo段又分为1024个slot理论上来说,innodb可支持96*1024个事物并发RR和RCRR隔离级别(除了Gap锁之外)和RC隔离级别的差...原创 2020-01-16 17:56:33 · 218 阅读 · 0 评论 -
mysql XA 空事物锁
今天开发过来和我说有一个旧账号总是登录不上,一直卡在登录界面不跳转,后台程序那边排查之后,反应说数据库有锁。查找information_schema库下的INNODB_LOCK_WAITS和INNODB_TRX表,查找到当时正在锁定的事物:SELECT * FROM information_schema,INNODB_TRX发现这些事物的trx_mysql_thread_id都为0,而...原创 2019-05-27 10:33:27 · 458 阅读 · 2 评论 -
mysql内存使用
mysql内存使用统计:MySQL分配缓冲区和缓存以提高数据库操作的性能。默认配置是大约512MB RAM的虚拟机上启动。可以通过增加某些缓存和缓冲区相关系统变量的值来提高MySQL性能。还可以修改默认配置以在内存有限的系统上运行MySQL。以下列举了MySQL的内存使用方法:1、缓冲池InnoDB缓冲池是保持缓存的InnoDB表,索引,及其它辅助缓冲中的数据。为了提高大容量读取操作的效率...原创 2019-05-23 11:21:32 · 1524 阅读 · 0 评论 -
mysql python数据库管理工具:MySQL Utilities
前提:1、安装MySQL Utilities工具2、复制my_print_defaults命令至/usr/bin下或写入环境变量。卸载方式:python ./setup.py clean --all 即可全部卸载1、mysqlrplsync工具。用来检查主从复制的数据一致性的工具。需要开启GTID模式mysqlrplsync--master=check:pas...原创 2019-05-30 11:06:01 · 1025 阅读 · 0 评论 -
mysql--EXPLAIN输出分析
前提explain提供 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句的解析。explain输出格式 Column JSON Name Meaning id select_id ...翻译 2019-05-23 15:22:57 · 210 阅读 · 0 评论 -
MySQL数据类型详解
MySQL数据类型预览: 整型类型: 具体类型 长度(byte) 范围 说明 tinyint 1 -128~127 0~255(unsigned) &n...翻译 2019-06-13 15:18:08 · 172 阅读 · 0 评论 -
proxysql 链式规则详解
链式规则理解在mysql_query_rules表中,有两个特殊字段"flagIN"和"flagOUT",它们分别用来定义规则的入口和出口,从而实现链式规则。链式规则实现方法:1、proxysql查找到flagIN=0的字段的规则,开始进入链式规则模式,该字段默认为02、当语句规则完全匹配match_pattern字段时,记下当前规则的flagOUT值,如果flagOUT值非空,那么为该语...原创 2019-06-14 18:07:36 · 670 阅读 · 0 评论 -
mysql group by date_format( stat_time, '%Y/%m/%d' ) 优化
mysql从5.7开始支持Generated Column操作,可以看做继承于目标列,但是可以使用函数进行转换。Generated Column有两种类型:stored和virtual。stored即存储实际数据的,而virtual则是在任何BEFORE触发器之后立即读取行时计算列值 ,不占用存储空间。示例:CREATE TABLE triangle (sidea DOUBLE...原创 2019-06-17 11:24:29 · 7397 阅读 · 1 评论 -
rpmbuild打包成rpm包(mysql示例)
编译和二进制安装mysql的时间有点长,所以考虑了一下,还是利用rpmbuild打包成rpm包更快的安装,还可以自己定义配置文件和脚本等,打包一个属于自己的rpm包。这里使用的源码包是:mysql-boost-5.7.26.tar因为这个包自带boost库,就不需要自己另外下载了1、开始安装:安装rpmbuild工具包:yum install rpmbuild rpmdevt...原创 2019-07-24 14:54:23 · 1979 阅读 · 0 评论 -
mysql使用large_pages来提升性能
在Linux系统当中默认值的内存页通常为4KB。实际实现取决于底层硬件和操作系统。执行大量内存访问的应用程序可能会因为减少了转换后备缓冲区(TLB)丢失而使用大页面来提高性能。通过增大页面大小来减少 TLB 条目数。hugepages相关概念:Page Table: page table是一种用于物理地址到虚拟之间的映射。对于内存的访问,先是访问Page Table,然后根据Page Ta...原创 2019-05-22 11:07:55 · 1594 阅读 · 0 评论 -
mysql使用jemalloc来优化innodb缓冲池
jemalloc是一个malloc()碎片避免和可扩展的并发支持的实现。它旨在用作系统提供的内存分配器,如FreeBSD的libc库,以及链接到C / C ++应用程序。jemalloc提供了许多超出标准分配器功能的内省,内存管理和调优功能。作为一个极端的例子,arenas可以用作池分配器;即arenas可用于通用分配,然后整个arenas作为单一操作被销毁。jemalloc首次分配小...原创 2019-05-20 17:10:55 · 2209 阅读 · 0 评论 -
mysql去重,3亿多数据量
差不多3亿6千万数据,需要去重。因为数据量太大,所以:将数据load data infile到大表里,不进行任何去重操作,没有任何约束。然后将数据分成几十个小表,用这几十个小表去对比大表去重。得到去重后的小表。去重以后的小表,根据字段进行hash算出后两位数字,重新建好新表,将去重后小表的数据,插入到带有hash数字新表中。存储过程如下(去重):DELIMITER ///*tbln...原创 2018-05-18 14:23:40 · 2825 阅读 · 0 评论 -
mysql增加从库
1、将主库前一天备份的数据传输到从库机上。主库备份语句加上--master-data=2,记录其change master to信息。2、在从库上导入主库备份数据。mysql -uroot -ppasswd < bak_20180411.sql3、查看从库上的备份数据:bak_20180411.sql,找到其中的CHANGE MASTER TO字段,记录position。 cat ba...原创 2018-05-18 14:24:46 · 931 阅读 · 0 评论 -
mysql主主及并行复制的搭建
两台机器互为主从。机器1:192.168.1.160机器2:192.168.1.164修改两台机器的my.cnf文件,server-id,log-bin,auto-increment-increment,auto-increment-offset 后面两个参数为防止主键冲突而设置。主主配置有两个要点:1、复制账号2、定位master信息。所以,在两台机器上分别执行:...原创 2018-05-18 14:26:01 · 155 阅读 · 0 评论 -
mysql inner join连接算法
INNER JOIN有两种算法:1、Nested-Loop Join Algorithm2、Block Nested-Loop Join Algorithm 第一种算法: 一个简单的嵌套循环连接(NLJ)算法一次一个循环从第一个表中读取行,然后将每一行传递给一个嵌套循环,循环处理连接中的下一个表。这个过程重复多次筛选数据。 嵌套循环连接算法的程序:...原创 2018-11-13 15:21:14 · 517 阅读 · 0 评论 -
ALTER TABLE语句引发的事故
今天开发那边过来和我说他那边数据库无法提交数据,一直卡住我查看了一下进程show processlist,发现有几条delete语句和insert语句,已经执行了6000多秒了,都是非常简单的语句在RR模式下:有几条语句:alter table tbname drop primary key; 执行了6000多秒。其他delete,insert操作也一直卡在哪里。 ...原创 2018-11-08 15:21:56 · 1017 阅读 · 0 评论 -
mysql MGR安装
MGR基本要求:1、InnoDB存储引擎2、主键,每个表必须具有已定义的主键或等效的主键,其中等效项是非null唯一键3、IPv4网络4、网络性能5、开启二进制日志并开启GTID模式6、mysql版本在5.7.17以上MGR限制:1、组复制不支持mysiam引擎2、不支持binlog的checksum校验3、并发DDL与DML操作。 使用多主模式时,不支持...原创 2018-11-08 16:28:02 · 1196 阅读 · 0 评论 -
binlog2sql mysql数据库闪回工具
binlog2sql工具比mysqlbinlog+sed恢复更快捷。1、安装:从github上下载:https://github.com/danfengcao/binlog2sqlshell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sqlshell> pip...转载 2018-11-12 11:29:58 · 284 阅读 · 0 评论 -
mysql innodb恢复过程
总体来说,innodb恢复过程包含以下几个步骤:一、查找表空间: 这里的查找表空间,主要是查找重做日志来实现的。 如果innodb发现到上一次检查点之后写入的重做日志,那么必须将重做日志应用于受影响的表空间。在恢复期间标记受影响的表空间。 通过将重做日志从最后一个检查点扫描到日志末尾来执行查找表空间,以查找在 MLOG_FILE_NA...原创 2018-11-21 10:29:21 · 1546 阅读 · 0 评论 -
mysql迁移数据目录
系统:centos7 mysql版本:5.7.22一、检查mysql进程状态:ps -ef | grep mysql二、确认数据库目录所在:ps -ef | grep mysql 看datadir所在的地方三、确认新数据库目录的权限及硬盘空间:df -h 查看硬盘空间ll -lih 查看目录权限,要指定mysql用户四、确定要修改的配置文件/etc...原创 2018-11-17 13:40:44 · 732 阅读 · 0 评论 -
innodb redolog理解
1、在干净关闭mysql时,重做日志应该逻辑上为空。意思是在检查点LSN之后没有要恢复的记录。但是,日志文件仍可能包含一些旧数据(在恢复过程中不使用)。2、对数据页面内容的每次更改都必须通过mtr完成,该事物由mtr_commit()函数提交完成。3、在提交mtr前,在mtr的内部缓冲区内收集更改日志。它包含多个日志记录,提交mtr时,所有日志记录都将写入一组日志记录中的日志缓冲区。包括:...原创 2018-11-29 15:51:18 · 372 阅读 · 0 评论 -
死锁及日志写入分析
今天线上环境查看状态时,发现一个死锁:分析:事务1:2018-07-15 07:15:39 7efc9e815700*** (1) TRANSACTION:TRANSACTION 39968365183, ACTIVE 0 sec insertingmysql tables in use 3, locked 3LOCK WAIT 6 lock struct(s), hea...原创 2018-12-05 14:47:00 · 500 阅读 · 0 评论 -
mysql innodb LRU算法理解
innodb的LRU链表是有新旧两个队列,所以和LRU算法的Twoqueues有些类似当数据要缓存如LRU链表时,先把数据移动到历史访问队列的链表里如果数据停留时间超过1S,那么就从历史访问队列里移动到热区域的LRU链表里,如果数据停留时间小于1S,那么就不会移动移动时间是由innodb_old_blocks_time参数控制,innodb_old_blocks_pct参数负责控制旧...原创 2019-04-12 14:59:56 · 3945 阅读 · 0 评论 -
MySQLdump备份原理
mysql常用备份工具:1、MySQLdump、MySQLpump(逻辑备份)2、xtrbackup(热备份)MySQLdump解析:1、打开general_log:show variables like 'general_log';setgeneral_log = 1;2、执行一次全备份:mysqldump -uroot -p -A -R -E --tri...原创 2019-04-22 15:55:49 · 929 阅读 · 0 评论 -
xtrabackup备份原理解析
对于数据量大的数据库来说,xtrabackup是作为mysql最好的热备份工具。xtrabackup内容解析:首先做一次全量备份:xtrabackup -uroot -p123456 --backup -S /usr/local/mysql/mysql.sock第一部分(对于innodb表的备份):190422 16:14:28 version_check Connecte...原创 2019-04-22 16:37:28 · 5157 阅读 · 0 评论 -
MySQL高可用管理工具:orchestrator
orchestrator是一个MySQL高可用复制拓补的管理和可视化工具,同时也是GitHub官方在使用的一个复制拓补管理工具,它允许:1)发现:orchestrator主动发现拓补结构并读取基本的MySQL信息,如复制状态和配置。2)重构:可以将一个不可用的服务器从拓补结构中剔除,并把数据副本移动到另一个从库下面3)恢复:在不可用时,可以选择一个适合的从库提升为主库...原创 2019-04-19 14:14:31 · 4183 阅读 · 17 评论 -
mysql监控系统:PMM部署与使用
环境:系统: centos7.3PMM是percona公司出品的一款mysql、mariadb,percona server、postgresql的监控软件,可以对引擎,事物,日志,系统等项目进行全面的监控。PMM是C/S架构。部署PMM前提需要docker环境。安装:安装yum扩展源:yum -y install epel-release安装dock...原创 2019-05-06 09:51:27 · 948 阅读 · 0 评论 -
自动定时备份删除脚本
任务:定时备份数据库所有数据。 定时删除7天以前的数据脚本如下:#!bin/bashdat=`date +%Y%m%d` mysqldump -uroot -p123456 -A -R -E --triggers > /home/back.data/all_bak_${dat}.sqlrm -rf /home/back.data/`date -d...原创 2017-06-28 16:35:12 · 885 阅读 · 0 评论