mysql XID和trx_id小结
xid是mysql server层维护的,通过一个全局变量global_query_id来生成,trx_id是innodb内部维护的,InnoDB 内部维护了一个 max_trx_id 全局变量,每次需要申请一个新的 trx_id 时,就获得 max_trx_id 的当前值,然后并将 max_trx_id 加 1,如果当前语句是这个事务执行的第一条语句,那么 MySQL 还会同时把 Query_i
load语句在binlog中的记录方式
关于mysql load语句在binlog中的记录方式:整理自 实战45讲+自己的一些理解一:binlog_format=statement这个 load 语句记录到 binlog 里以后,怎么在备库重放呢?由于 /server_tmp/t.csv 文件只保存在主库所在的主机上,如果只是把这条语句原文写到 binlog 中,在备库执行的时候,备库的本地机器上没有这个文件,就会导致主备同步停止。所以
mysql 5.7并行复制
关于mysql 5.7的并行复制策略,mysql 5.7.22开始支持的 基于writeset的并行复制策略;mysql多线程复制,需要遵循两个基本原则:1.不能造成更新覆盖,这就要求更新同一行的两个事务,必须被分发到同一个worker中,2.同一个事务不能被拆开,必须放到同一worker中!一:5.7.22之前的COMMIT_ORDER并行复制方式,借助mysql的
mysql gtid和事务id的区别
GTID 的全称是 Global Transaction Identifier,也就是全局事务 ID,是一个事务在提交的时候生成的,是这个事务的唯一标识。它由两部分组成,格式是:GTID=server_uuid:gno其中:server_uuid 是一个实例第一次启动时自动生成的,是一个全局唯一的值;gno 是一个整数,初始值是 1,每次提交事务的时候分配给这个事务,并加 1。这里我需要和你说明一
如何避免pxc集群全局锁
首先我们知道pxc集群为了获得全局一致性gtid,当你执行ddl操作的时候,他会上全局锁,会阻塞后面整个实例所有的dml或者ddl操作;然后不产生全局gtid,是不是就不会上全局锁了呢?一.查看pxc集群当前节点最新提交的事务号;他是最新的galera GTID的后半部分,前半部分是状态变量wsrep_local_state_uuid的值,每次事务提交、ddl完成或apply完成之后都会更新这个值
mysql load 相关实验
一:load 的过程相当于是:先start transaction,然后再insert数据,最后commitmysql 区别于oracle sqlldr,没有后者的rows的参数来控制每次提交的数据行但是mysql 是自己通过估算出一个值,来批量读取 ,他不是 一条一条的 insert的二:load 如果数据存在(主键或者唯一键),默认是跳过的,可以选择replace存在就替换!三:load 没有
避免pxc集群全局锁
首先我们知道pxc集群为了获得全局一致性gtid,当你执行ddl操作的时候,他会上全局锁,会阻塞后面整个实例所有的dml或者ddl操作;然后不产生全局gtid,是不是就不会上全局锁了呢?一.查看pxc集群当前节点最新提交的事务号;他是最新的galera GTID的后半部分,前半部分是状态变量wsrep_local_state_uuid的值,每次事务提交、ddl完成或apply完成之后都会更新这个值
mysql多版本控制原理
mysql RR隔离级别下事务特性小结:通过学习了林晓斌的实战45讲的一些理解:我们知道如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view(其实就是一批trx_id号),之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是,我在上一篇文章中,和你分享行锁
mysql 基于组提交的并发复制小结
一:MySQL 5.7并行复制初理解我们知道MySQL 5.7并行复制引入了两个值last_committed和sequence_number。last_committed表示事务提交的时候,上次事务提交的编号,在主库上同时提交的事务设置成相同的last_committed。如果事务具有相同的last_committed,表示这些事务都在一组内,可以进行并行的回放。查看组提交的事务个数,其中989
mysql change buffer小结
首先:正常insert的时候,也是首先要判断哪个物理页(包括数据页和索引页)可以insert,然后把这个物理块读取到buffer pool,然后再在内存执行insert 操作,然后再刷新到磁盘;接下来介绍下我对change buffer的认识,知识来自于网络文章+innodb 存储引擎书籍+官方文档0)Change Buffer为何提高性能它缓存的是一个索引页的 dml的操作,而不是具体的数据页,
pxc 三个节点全部异常和正常关闭的启动顺序
mysql 5.7.27 pxc 三个节点全部异常和正常关闭的启动顺序:1、正常关闭所有节点的时候因为不能生成gvwstate.dat,所以一定要保证第一个启动的是包含最新数据的节点!mysqld_safe --defaults-file=/etc/my.cnf --wsrep-recover来查看最新的节点!2、Server version: 5.7.27-30-57-log 这个
mysqldump同步数据到生产注意事项
1.如果需要从一个实例把数据倒进另一个生产的实例,那么需要注意:使用一下语句dump出来!mysqldump -uroot -p -t --single-transaction=true --skip-disable-keys=false --add-locks=false --set-gtid-purged=off &nb
mysql innobackupex备份原理总结
xtrabackup的官方下载地址为 http://www.percona.com/software/percona-xtrabackup。 xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:1 xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表; 2 innobackupe
mysql load 相关实验记录
一:load 的过程相当于是:先start transaction,然后再insert数据,最后commit我猜测mysql 区别于oracle sqlldr,没有后者的rows的参数来控制每次提交的数据行但是我感觉 mysql 是自己通过估算出一个值,来批量读取 ,我觉得他不是 一条一条的 insert的二:load 如果数据存在(主键或者唯一键),默认是跳过的,可以选择replace存在就替换
从库转换成PXC集群的节点
环境介绍:mysql 5.7版本PXC集群两个节点:10.9.21.17910.9.21.178从节点:10.9.21.115(普通主从,数据库软件为普通版本,非集群版本)现在的目的是要把10.9.21.115转换成PXC集群的节点,采用IST增量同步的方式来减小对PXC主库的影响;疑问:1.PXC 物理备份,可以直接使用普通的数据库软件加载打开吗?可以,我从PXC使用innobackex备份,然
innobackupex 部分表备份和恢复
Percona XtraBackup的功能之一“部分备份(partial backups)”,即让用户可以备份指定的表或数据库。要注意的是:你希望备份的表必须是在独立的表空间中,即该表在创建以前,你的MySQL开启了innodb_file_per_table设置。还一点要注意的是:不要将prepared backup备份的东西拷贝回去。部分备份使用的是导入表(importing the table
MySQL binlog和redo的组提交
整体概述:组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5.6官方版本同时支持redo log 和binlog组提交。组提交的实现大大提高了mysql的事务处理性能mysql5.6官方版本之前:5.6之前只支持red...
mysqldump原理分析
今天学习了下mysqldump原理,具体的结论如下:1、mysqldump在不加任何参数进行备份的时候:如果单独备份一个表会对备份表上读锁,直到备份结束unlock,如果备份的整个库,那么会同时lock 这个库下的所有的表,最后在unlock tables,如果备份的是整个实例(加参数--all-databases 或者-A会备份除了performance_sch...
MySQL的后台进程介绍
介绍MySQL innodb引擎的后台进程,首先看如下这张图(5.6的版本默认情况):后台清理工作:脏页刷盘、undo回收page cleaner thread:刷新脏页purge thread:清空undo页、清理“deleted”page一、innodb_page_cleaners page cleaner线程从buffer pool中刷脏页的线程数量。1、5.7新特性...
MySQL innodb引擎的事务执行过程
通过这篇文章可以了解到下面几个问题问题1:MySQL innodb引擎的update的流程;问题2:以及写redo,undo,binlog的顺序,然后刷盘的顺序又是什么呢?问题3:以及刷新redo和脏数据的相关进程;总结以上的三个问题,其实就是关于MySQL innodb事务的流程;那么接下来,我将详细总结下一一一:MySQL innodb的事...