译注:cstack在github维护了一个简单的、类似sqlite的数据库实现,通过这个简单的项目,可以很好的理解数据库是如何运行的。本文是第九篇,主要是实现Btree的二叉搜索并解决主键重复问题Part9二叉搜索与主键重复上次注意到我们的B树存储key时仍然是非排序的。现在我们来解决这个问题,并检测和拒绝主键的重复(插入)。现在我们的executeinsert()函数在插入时,选择的位置是在表的结尾处。作为替换,我们需要搜索表(树)中正确...
2023-02-23 15:45:26 186浏览 0点赞 0回复 0收藏
什么是ChatGPT?ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列任务,因此有望成为提高办公、学习效率的工具。以前的人工智能AlphaGo打败了柯洁,但只是在围棋领域,而ChatGPT则已经进入了日常工作领域和生活世界。不少和ChatGPT“聊过天”的网友纷纷感叹,“只有你想不到,没有ChatGPT办不成的”。上线...
2023-02-23 15:44:46 470浏览 0点赞 0回复 0收藏
一、MySQL的sp运行SQL语句两个步骤介绍二、代码跟踪三、知识应用四、总结一、MySQL的sp运行sql语句两个步骤介绍MySQL的sp运行SQL语句需要执行2个步骤:prepare和execute。第一次执行的时候先执行prepare,进行相关语句parse、itemize、fixfields等操作,然后才开始进行execute操作。等第二次再执行该sp的时候就直接运行execute而不需要再次进行重复的prepare操作,这样可以节省sp运行时候重复prepare的开销。但是,对于表操作就...
2023-02-23 15:44:18 155浏览 0点赞 0回复 0收藏
什么是通用查询日志通用查询日志(GeneralQueryLog)用来记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给MySQL数据库服务器的所有SQL指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题。查看当前状态mysql>SHOWVARIABLESLIKE'%general%';+++VariablenameValue+++generallogOFFgenerallogfilevarlibmysqlzhyno1.log+++2rowsinset(0.00s...
2023-02-23 15:43:48 327浏览 0点赞 0回复 0收藏
系统版本:Linuxversion4.18.0348.el8.x8664前言SELinux是什么安全增强型Linux(SELinux)是一种采用安全架构的Linux®系统,它能够让管理员更好地管控哪些人可以访问系统。它最初是作为Linux内核的一系列补丁,由美国国家安全局(NSA)利用Linux安全模块(LSM)开发而成。SELinux工作原理SELinux定义了每个人对系统上的应用、进程和文件的访问控制。利用安全策略(一组告知SELinux哪些能访问,哪些不能访问的规则)来强制执行...
2023-02-23 15:42:43 515浏览 0点赞 0回复 0收藏
前言两表使用nestloop(以下简称NL)方式进行连接,小表驱动大表效率高,这似乎是大家的共识,但事实上这是有条件的,并不总是成立。这主要看大表扫描关联字段索引后返回多少数据量,是否需要回表,如果大表关联后返回大量数据,然后再回表,这个代价就会很高,大表处于被驱动表的位置可能就不是最佳选择了。实验举例使用benchmarksql压测的两个表bmsqlwarehouse与bmsqlorderline来测试,初始化10仓数据。mys...
2023-02-23 15:41:41 221浏览 0点赞 0回复 0收藏
如何快速临时禁止某账户登入角色ROLES管理需要先激活关于授权的其他几点补充如何复制复用账户密码1.快速临时禁止某用户登入有几个方法:修改其密码ALTERUSERxIDENTIFIEDBY'newpasswd',或者将其修改为随机密码ALTERUSERxIDENTIFIEDBYRANDOMPASSWORD;锁定其账户ALTERUSERxACCOUNTLOCK;2.角色ROLES管理把角色ROLES授予某个账号后,记得还要再激活才行:创建ROLEr1并授予用户u1mysql>CREATEROLEr1;mysql...
2023-02-23 15:41:07 147浏览 0点赞 0回复 0收藏
1.概述本文通过XtraBackup备份单个数据库,然后恢复到另一个实例,用于快速迁移大数据量,使用的软件版本为:软件名版本MySQLmysql5.7.39linuxglibc2.12x8664.tar.gzXtraBackupperconaxtrabackup242.4.261.el7.x8664.rpm在2台主机分别安装一个MySQL实例:主机IP地址端口号MySQLA192.168.100.105508MySQLB192.168.100.1155082.在MySQLA初始化数据通过sysbench初始化数据,10张表,每张表10000条记录shell>sysbenchsrcluaoltpread...
2023-02-23 15:40:17 336浏览 0点赞 0回复 0收藏
什么是中继日志(relaylog)中继日志(relaylog)只在主从服务器架构的从服务器上存在。从服务器(slave)为了与主服务器(Master)保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。搭建好主从服务器之后,中继...
2023-02-23 15:38:52 162浏览 0点赞 0回复 0收藏
1.可以同时解析多个binlog吗首先,答案是肯定的。其次,当我们采用这种方式解析binlog时$mysqlbinlogvvvbase64outputdecoderowsstartposition4stopposition2000binlog.000001binlog.000002时,它的工作方式是这样的:指定binlog停止位置的参数,只对最后一个binlog文件生效(指定开始位置则针对第一个文件生效);前面的binlog文件则是全量解析;如果没有匹配的stopposition,则向上取值最接近的position;如果同时多次...
2023-02-23 15:38:20 196浏览 0点赞 0回复 0收藏
Part6游标抽象跟上一节相比,这一节篇幅相对要简短的多。我们只是稍微重构一下,这样就可以让开始实现Btree更简单一些。在代码中新添加一个Cursor对象,它用来代表表中的一个位置(location)。你可能希望对游标执行的操作:在表开头时创建一个游标在表结尾时创建一个游标访问游标指向的行将游标移动到下一行这就是我们将要实现的游标的一些行为。然后,我们还想做到:删除游标指向的一行数据修改游标指向的一行数据使用给定的I...
2023-01-09 15:31:39 398浏览 0点赞 0回复 0收藏
用一个简明、清晰的步骤来解析一下DML操作产生的binlogevent。主要是TABLEMAPEVENT和UPDATEROWSEVENT类型的event。使用语法简单易上手的Golang来编码。数据库使用的是MySQL5.7.34版本,Golang1.15版本。获取binlogevent获取binlog一般是模拟成从库封装通讯package向主库发送binlogdump命令(COMBINLOGDUMP或者COMBINLOGDUMPGTID)来获取binlog。在这篇文章中,是封装的COMBINLOGDUMP向数据库请求的指定位点的event。模拟操作产...
2023-01-09 15:28:10 472浏览 0点赞 0回复 0收藏
Part7BTree简介Btree是SQLite用来表示表和索引的数据结构,所以Btree是非常中心的想法。这个主题主要是介绍Btree数据结构,所以不会有任何的代码。为什么说对于数据库来说,树是非常好的数据结构呢?查找特定的value很快(对数时间花销,logaN)插入一行或者对查询到的数据删除很快(再平衡使用常量时间)遍历一个范围内的value很快(不像hashmap)Btree不同于二叉树(“B”可能代表发明人的名字,但也可以代表“Balanced”)。...
2023-01-09 15:25:17 402浏览 0点赞 0回复 0收藏
介绍从MySQL8.0.4开始,MySQL默认身份验证插件从mysqlnativepassword改为cachingsha2password。相应地,libmysqlclient也使用cachingsha2password作为默认的身份验证机制。起因在这之前MySQL5.65.7使用的默认密码插件是mysqlnativepassword。mysqlnativepassword的特点是不需要加密的连接。该插件验证速度特别快,但是不够安全,因为,mysqlnativepassword...
2023-01-09 15:19:29 847浏览 0点赞 0回复 0收藏
意外发现USER()和CURRENTUSER()的一点不同。某次在用ALTERUSER想要修改账户密码时,发现执行下面的SQL会报语法错误:mysql>ALTERUSERUSER()IDENTIFIEDWITH...ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'withmysqlnativepasswordby'''atline1一开始百思不得其解,如果把USER()手动替换成对应的账户的话,则可以正常执行...
2023-01-09 15:18:41 343浏览 0点赞 0回复 0收藏
什么是错误日志错误日志(ErrorLog)是MySQL中最常用的一种日志,主要记录MySQL服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。错误日志记录了啥错误日志包含mysqld启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行时出现的错误、警告和其他需要注意的信息。例如:如果mysqld检测到某个表需要检查或修复,会写入错误日志。根据错误日志配置,错误消息还可能填充per...
2023-01-09 15:15:23 813浏览 0点赞 0回复 0收藏
1.前言在集群当中离不开的一个词就是是高可用,用本文来简单聊聊keepalived是什么、keepalived如何实现高可用、keepalived的使用场景。首先,假设一个应用场景,内网有一台tomcat服务器,随着业务的增加、流量的增加一台tomcat服务器就变得不够用了,因此需要增加多台tomcat服务器,他们拥有相同的业务处理能力,为了可以统一对这些tomcat的访问同时更好地调度到不同的tomcat完成业务,可以添加一台nginx服务器。它的作用是为内...
2023-01-09 15:14:38 485浏览 0点赞 0回复 0收藏
1.概述本文基于GreatSQL8.0.2516,以下测试均使用此版本。MySQL支持IPV6,创建用户时主机部分可以指定IPv6的地址,可以通过IPv6连接到MySQL服务器,从MySQL8.0.14开始,组复制组成员可以在组内使用IPv6地址进行通信。此次在测试环境中使用IPv6地址进行MGR的部署,分享一下使用IPv6部署MGR时,设置关于MGR参数需注意的地方。2.查看本机IPv6地址执行ipa在输出内容中查找当前使用的网卡的IPv6地址shell>ipa1:lo:<LOOPBACK,...
2023-01-09 15:12:32 586浏览 0点赞 0回复 0收藏
什么是慢查询日志MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过longquerytime值的SQL,则会被记录到慢查询日志中。longquerytime的默认值为10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行...
2023-01-09 15:10:41 775浏览 0点赞 0回复 0收藏
本文目录问题缘起排查思路问题发现问题缘起同事在客户现场利用DTS工具,从A实例将数据迁移到B实例过程中,发现几乎稍大点的表在迁移完成后,目标端表空间大小差不多都是源端的3倍,也就是说表空间膨胀了2倍。排查思路对这篇文章《叶问》第16期有印象的话,应该还能记得,数据迁移(导入导出)过程中,也包括主从复制场景,导致表空间膨胀的原因有几种:MySQL表默认是InnoDB引擎且目前索引只支持B+树索引,在数据的增删...
2023-01-09 15:07:51 432浏览 0点赞 0回复 0收藏