![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 73
魏书生的技术空间
关注mysql,redis,python,个人成长,认知提升等领域
展开
-
ERROR 1799 (HY000): Creating index ‘FTS_DOC_ID_INDEX‘ required more than ‘innodb_online_alter_log_ma
1,背景:在进行大表(600G)碎片整理,命令如下:alter table XXX engine=innodb;2,报错:ERROR 1799 (HY000): Creating index 'FTS_DOC_ID_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.信息查看:mysql> select version(原创 2021-05-18 14:12:41 · 785 阅读 · 0 评论 -
MySQL临时表空间设置最大值
1,背景:线上数据库,可能由于一些SQL因使用了临时表,如果是大表,或者产生了笛卡尔积等特殊情况下去,会占用很多临时表空间文件2,举例:mysql> select * from t union select * from t1 ;此时ibtmp1 会持续增大,可能造成数据目录100%。3,解决办法:设置临时表空间最大值[mysqld]innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:15M4,验证:.原创 2021-02-19 15:46:16 · 893 阅读 · 0 评论 -
DBA如何利用strace/pstack/gdb来定位问题
参考:https://database.51cto.com/art/202006/617923.htmstrace简介strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用。Strace是一个简单的跟踪系统调用执行的工具。在其最简单的形式中,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出一行具有系统调用名称,每个系统调用的参数和返回值的文本行。常用选项-T:strace输出显示时间 -t:可以在每行的输出之前添加时间戳,-tt可以精确到..原创 2021-02-18 16:22:49 · 401 阅读 · 0 评论 -
MySQL批量KILL线程
1,使用pt-kill工具[root@localhost ~]# pt-kill --user=root --password=123456 -hlocalhost --no-version-check --match-command Connect --match-state "Waiting in connection_control plugin" --victims all --interval 2 --print --kill# 2021-02-18T09:49:28 KILL 218...原创 2021-02-18 10:16:52 · 1402 阅读 · 0 评论 -
mysql 安全插件-密码复杂度和登录失败处理
1,背景应等保三级安全要求,现需要对生产环境MySQL数据库进行插件安装,以满足密码复杂度和登录失败处理的安全要求(1)设置口令位数至少为8位,至少一位大小写字母,一位数字,一位特殊字符(2)设置当密码错误超过一定次数后(建议3次或5次),自动锁定账户(建议30分钟以上)2,密码复杂度插件(1)安装插件mysql> install plugin validate_password soname 'validate_password.so';Query OK, 0 rows a原创 2021-02-18 10:15:38 · 4435 阅读 · 3 评论 -
MySQL中快速删除大表
1,背景:某些情况下需要清理线上的大表。如果设置了分区表的归档日志表,需要删除指定日期前的数据,直接truncate 或者drop table 可能造成所在服务器的IO吃满,进而影响线上业务。这里我们介绍采用硬链接的方式进行删除大表2,解决方案这里需要利用了linux中硬链接的知识,来进行快速删除。所谓的硬链接,就是不止一个文件名指向node Index,有好几个文件名指向node Index。假设,这会又有一个文件名指向上面的node Index,即这个时候,你做了删除文原创 2021-02-13 18:04:45 · 1419 阅读 · 0 评论 -
GDB方式修改mysql最大连接数
1,背景:可能由于一些原因造成mysql连接数满了比如程序并发连接过多,或者连接异常不断开,造成mysql连接数满了,此时dba本地登录也会受到影响,为了不重启mysql服务,也能够修改最大连接数,这里我们介绍gdb修改mysql参数的方式。[root@localhost ~]# /dbfiles/scripts/mysql_login.shmysql: [Warning] Using a password on the command line interface can be insecur.原创 2021-02-13 17:41:08 · 534 阅读 · 0 评论 -
MySQL5.7源码安装
1,下载软件https://downloads.mysql.com/archives/community/2,开始安装mysqlgroupadd mysqluseradd mysql -g mysql -s /sbin/nologin -M3, 安装软件包yum -y install openssl openssl-devel4,编译安装cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7/ -DMYSQL_DATADIR=原创 2021-02-13 16:49:55 · 252 阅读 · 0 评论 -
书生笔记-DUMP线程查找和过滤GTID的基本算法
《深入理解MySQL主从原理32讲》-学习笔记主库DUMP线程有几步需要比较GTID和GTID SET:1,检查从库的GTID SET是否大于主库的GTID SET2,根据主库的gtid_purged变量检查从库需要的event是否已经被清理3,实际扫描的主库的binary log 检查从库需要的event是否已经被清理4,进行GTID过滤,决定发送哪些事务给从库之前讲的是功能,这一节介绍算法比如从库出现b:1-95:97-100这种GTID SET的时候,如果要在主库查找是否有原创 2020-12-15 14:35:53 · 174 阅读 · 0 评论 -
书生笔记-mysql主库dump线程
每一个mysql的从库slave都会对于一个 dump线程,如上图的 Binlog Dump GTID .原创 2020-12-15 11:20:13 · 872 阅读 · 0 评论 -
书生笔记-并行复制的writeset分析
参考《深入理解MySQL主从原理32讲》一,WriteSet是什么?实际上 Writeset 是一个集合,使用的是 C++ STL 中的 set 容器,在类 Rpl_transaction_write_set_ctx 中包含了如下定义:class Rpl_transaction_write_set_ctx{public:...private: std::vector<uint64> write_set; std::set<uint64> writ.原创 2020-12-07 17:32:11 · 492 阅读 · 0 评论 -
书生笔记-MySQL5.7并行复制实验
一,配置文件master_info_repository=TABLErelay_log_info_repository=TABLEslave_parallel_type = LOGICAL_CLOCKslave_parallel_workers=2slave_preserve_commit_order=1验证:二,日志解析当前模式: COMMIT_ORDER (默认方式)mysql> show variables like '%binlog_transaction.原创 2020-12-02 18:55:30 · 226 阅读 · 0 评论 -
书生笔记-redo log的写入机制
redo log 的写入机制redo log buffer:事务在执行过程中,生成的 redo log 是要先写到 redo log buffer 的。redo log buffer 里面的内容,是不是每次生成后都要直接持久化到磁盘呢?答案是,不需要。如果事务执行期间 MySQL 发生异常重启,那这部分日志就丢了。由于事务并没有提交,所以这时日志丢了也不会有损失。那么,另外一个问题是,事务还没提交的时候,redo log buffer 中的部分日志有没有可能被持久化到磁盘呢?答案是,确.原创 2020-11-17 17:28:31 · 1699 阅读 · 3 评论 -
书生笔记-binlog 的写入机制
其实,binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。 一个事务的 binlog 是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到了 binlog cache 的保存问题。 系统给 binlog cache 分配了一片内存,每个线程一个,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。如果超过了这个参数规...原创 2020-11-17 17:21:42 · 1166 阅读 · 0 评论 -
书生笔记-MySQL 层事务提交流程简析
作者:高鹏文章末尾有他著作的《深入理解MySQL主从原理 32讲》,深入透彻理解MySQL主从,GTID相关技术知识。本文节选自《深入理解MySQL主从原理》第15节本节包含一个笔记如下:https://www.jianshu.com/writer#/notebooks/37013486/notes/50142567本文提要本节将解释 MySQL 层详细的提交流程,但是由于能力有限,这里不可能包含全部的步骤,只是包含了一些重要的、并且我学习过的步骤。我们首先需要来假设参数设置,因为某.原创 2020-11-17 15:50:28 · 293 阅读 · 0 评论 -
书生笔记-Binlog Cache解析
整个事务的Event在commit的时候才会真正的写入到binlog 文件中,在此之前,这些Event 都放在binlog cache中。先来看下几个相关参数的定义binlog_cache_size,binlog_stmt_cache_size。 binlog_cache_size The size of the memory buffer to hold changes to the binary log during a transaction. When binary loggin原创 2020-11-16 17:52:46 · 664 阅读 · 0 评论 -
书生笔记-binlog_row_image参数解析
1,参数定义 For MySQL row-based replication, this variable determines how row images are written to the binary log. 对于基于row模式的复制,binlog_row_image变量决定了images是如何写入到binlog日志文件的。 In MySQL row-based replication, each row change event contains two images, .原创 2020-11-12 19:10:37 · 407 阅读 · 0 评论 -
书生笔记-Binlog Event Type解析
binlog以事件的形式记录数据库变更情况。通过执行show binlog events in "XXX"命令可以查看事件源码中定义的binlog event type事件类型,源码位置:binlog_event.h先来看一个例子:可以看到第一个event type是前面文章我们介绍的第一个event,FORMAT_DESCRIPTION_EVENT,event type 为Format_desc,这里我们还可以看到其他类型,如:Previous_gtids:上一个binlog结束的gt原创 2020-11-11 17:38:33 · 2330 阅读 · 0 评论 -
书生笔记-mysql binlog Event详解-概述
Binlog是一种二进制格式的文件,理解Binlog二进制格式能够帮助我们进一步理解MySQL的主从复制原理。本文将对Binlog文件格式进行分析官方文档:https://dev.mysql.com/doc/internals/en/binlog-event.htmlBinlog文件头Binlog文件,前4个字节固定为一个Magic Number,十六进制值为fe62696e。[root@localhost logs]# hexdump -Cv binlog.000012 0000原创 2020-11-11 11:49:22 · 981 阅读 · 0 评论 -
书生笔记-gtid_mode 参数解析
GTID transactions are identified by a global transaction identifier (GTID) in the form UUID:NUMBER. Every GTID transaction in a log is always preceded by a Gtid_log_event. GTID transactions can be addressed using either the GTID or using the file name and.原创 2020-11-10 17:33:47 · 3182 阅读 · 1 评论 -
书生笔记-mysqldump搭建GTID的主从复制
step1,主库备份:[root@localhost backup]# pwd/data/backup[root@localhost backup]# mysqldump --socket=/data/mysql/mysql3306/mysql.sock --user=root --password=123456 --single-transaction --master-data=2 -R -E --triggers --all-databases >test01.sql原创 2020-11-09 20:00:25 · 318 阅读 · 0 评论 -
书生笔记-GTID如何跳过一个事务?
首先我们要获得从库最后一个执行的GTID值,有以下三种方式:show slave status 中Executed_Gtid_Set Retrieved_Gtid_Set: b11374c3-223c-11eb-9e81-000c2936cc32:11 Executed_Gtid_Set: b11374c3-223c-11eb-9e81-000c2936cc32:1-11 Auto_Position: 1 Replicate_原创 2020-11-09 14:31:06 · 542 阅读 · 0 评论 -
GTID的变更时机
mysql.gtid_executed:GTID的持久化介质,GTID模块初始化时,会读取这个表,作为gtid_executed变量的初始值 gtid_executed变量:表示数据库执行了哪些GTID ,This is the same as the value of the Executed_Gtid_Set column in the output of SHOW MASTER STATUS and SHOW SLAVE STATUS. gtid_purged变量:包含了mysql执行过的且...原创 2020-11-05 16:59:24 · 247 阅读 · 0 评论 -
GTID的格式和存储
GTID的概念:A global transaction identifier (GTID) is a unique identifier created and associated with each transaction committed on the server of origin (the source). This identifier is unique not only to the server on which it originated, but is unique acr原创 2020-11-04 20:08:10 · 279 阅读 · 2 评论 -
GTID 的生命周期
GTID 的生命周期 A transaction is executed and committed on the replication source server. This client transaction is assigned a GTID composed of the source's UUID and the smallest nonzero transaction sequence number not yet used on this server. The GTID is w原创 2020-11-04 11:27:53 · 831 阅读 · 0 评论 -
MySQL auto.cnf 文件
长期关注mysql,redis,python,个人成长,认知提升等,喜欢请添加微信weihaodong0557,或QQ群:979480263一、auto.cnf 是什么?源码解释:/** File 'auto.cnf' resides in the data directory to hold values of options that server evaluates itself and that needs to be durable to sustain the serv..原创 2020-11-03 17:07:10 · 5842 阅读 · 0 评论