关于MySQL的日志及慢查询的日志(排查未使用索引的查询)
MySQL的日志主要有以下6种:1.错误日志(errorlog):mysql启停时错误信息。2.查询日志(generallog):客户端连接和执行的语句。3.二进制日志(binlog):所有更改数据的语句,可用于数据复制。4.慢查询日志(slowlog):所有执行时间超过long_query_time的查询。5.中继日志(relaylog):主从复制时使用的日志。6.事务日志(redolog和undolog):innodb事务日志。 关于日志滚动:日志滚动实际就是不再在旧的日志文件上记录,而在新的一个日志文件上进行记录日志。比如二进制日志在单日志文件达到设置上...[>>…]
MYSQL中的decimal数据类型字段及如何去除多余的0
MYSQL中虽然有float浮点数据类型,但是其却不能精确存储数值,这对稍重要的应用而言可用性都大打折扣,精度不够导致数据错误,另外在进行Where查询时总会给你惊奇的结果。这时就需要使用decimal(同numeric,NUMERIC实现为DECIMAL)数据类型了,decimal可用于精确存储数值。 decimal数据类型包括小数点两边的数字最多可存储38个数,且所有数字都能够放到小数点的右边。decimal数据类型存储了一个准确(精确)的数字表达法,而不是存储值近似值。decimal类型的定义需要...[>>…]
关于MySQL基于语句和基于事务的复制
小站里有多遍关于MySQL主从复制的一些笔记,之前默认情况下主丛都使用的是行记录方式来实现的,今天的MySQL主从笔记主要是了解MySQL主从复制的一些实现方法, MySQL的复制可以分为两大类,一类是基于二进制日志(BINLOG)的复制;一类是基于事务(GTID)的复制。而基于二进制日志的复制方式,又可分为基于行(ROW)的二进制日志复制方式、基于语句(STATEMENT)的二进制日志和行和语句混合(MiXED)三种复制方式。这些复制方式的关系区别如下:一、基于二进制日志的复制...[>>…]
关于InnoDB存储引擎中的LSN(Log Sequence Number)
LSN称为日志的逻辑序列号(logsequencenumber),在innodb存储引擎中,lsn占用8个字节。LSN的值会随着日志的写入而逐渐增大。InnoDB存储引擎是通过LSN(LogSequenceNumber)来标记版本的。LSN是8字节的数字,每个页有LSN,重做日志中也有LSN,Checkpoint也有LSN。可以通过命令SHOWENGINEINNODBSTATUS来观察: mysql>showengineinnodbstatus; --- LOG --- Logsequencenumber121455128987 Logflushedupto121455128969 Pagesflushedupto121454813805 Lastcheckpointat121454813805 0pendinglog...[>>…]
Mysql日志刷到磁盘的规则以及检查点checkpoint
Mysql中,在logbuffer中但未刷到磁盘的日志称为脏日志(dirtylog)。默认情况下进行事务处理的时候每次提交事务都会刷事务日志到磁盘中,这是因为变量innodb_flush_log_at_trx_commit的值为1。innodb在有commit动作后刷日志到磁盘只是innodb存储引擎刷日志的规则之一。Mysql日志什么时候还会刷到磁盘呢?有以下规则:1.发出commit动作。commit发出后是否刷日志由变量innodb_flush_log_at_trx_commit控制。2.几秒刷一次。这个刷日志的频率由变量innodb_flush_log_at_timeout值决定,默认是1秒。...[>>…]
关于mysql中的innodb_flush_log_at_trx_commit配置
MySQL的事务日志中,为了性能和效率,可以配置每次事务提交后是否将日志缓冲刷到logfile以进行数据持久化,这就是变量innodb_flush_log_at_trx_commit的作用。innodb_flush_log_at_trx_commit有3种值:0、1、2,默认为1。但注意,这个变量只是控制commit动作是否刷新logbuffer到磁盘,而没有其它的数值意义。当设置为1的时候:事务每次提交都会将logbuffer中的日志写入osbuffer并调用fsync()刷到logfileondisk中。这种方式即使系统崩溃也不会丢失任何数据,但是因为每次提交都写入磁盘,IO的...[>>…]
关于MySQL中Innodb的事务日志(redo log和undo log)
事务的实现是基于数据库的存储引擎,mysql中支持事务的存储引擎有innoDB和NDB。innoDB是mysql默认的和主要应用的存储引擎,默认的隔离级别是RR,并且通过多版本并发控制(MVCC,MultiversionConcurrencyControl )解决不可重复读问题。因此innoDB的RR隔离级别是一个在串行和并发性能中间的一个折衷方案。 事务在进行操作的时候可以提交成功,也可以进行回滚,这是怎么实现的呢?这里就需要说一下事务日志了,事务是通过事务日志来实现的,innodb事务日志包括red...[>>…]
mysql-proxy的配置意义及配置示例
mysql-proxy下载下来之后,在share/doc/mysql-proxy目录中存放了各种lua文件代码示例,包括读写分享的rw-splitting.lua文件。而在另一个目录lib/mysql-proxy/plugins下存放着一些插件,比如admin,proxy插件。进入到mysql-proxy目录,执行bin/mysql-proxy--help-all可查看所有的设置选项。 root@h127:/opt/mysql-proxy$bin/mysql-proxy--help-all Usage: mysql-proxy[OPTION...]-MySQLProxy HelpOptions: -?,--helpShowhelpoptions --help-allShowallhelpoptions --help-proxyShowoptionsfort...[>>…]
使用mysql-proxy代理服务器上的mysql.sock连接
线上的mysql服务器只能使用本地的mysql.sock进行连接,非常不方便,于是想找一个中间代理来操作,之前使用过haproxy这种中间proxy,很好用。但haproxy上没有试过使用mysql.sock连接,当然mysql-proxy上的socker连接我也没有试过,但mysql-proxy毕竟是专门的mysqlproxy,我想应该会支持吧。也正好没出我所料,mysql-proxy可以支持后端直接mysql.sock文件连接。 MySQL-Proxy是一个在client端和MySQLServer间的中间层代理,它可以监测、分析或改变它们的通信。它使用灵...[>>…]
mysql运行数据监控的快速命令集合
对正在运行的mysql进行监控排查,其中一个方式就是查看mysql运行状态。mysql状态查看QPS/TPS/缓存命中率的一些快速方法,转自:https://blog.csdn.net/caoxiaohong1005/article/details/68483289保存一下。(1)QPS(每秒Query量)QPS=Questions(orQueries)/secondsmysql>show global statuslike'Question%'; (2)TPS(每秒事务量)TPS=(Com_commit+Com_rollback)/secondsmysql>showglobalstatuslike'Com_commit';mysql>showglobalstatuslike'Com_rollback'; (3)keyBu...[>>…]