![](https://img-blog.csdnimg.cn/8d5381f59801499e814767d2ea2dc7dd.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MYSQL
文章平均质量分 74
MYSQL
liuzhilongDBA
好好学习,天天向上
展开
-
数据库面试题总结——DBA面试battle指南
作者总结历年dba面试的问题和解答。并不是全方位覆盖所有知识点,仅汇总较常见的dba面试问题原创 2023-03-07 23:01:12 · 1549 阅读 · 0 评论 -
count(1),count(col1),count(*)的区别
1.count(1)=count(*),计算的是表的真实行数,无论行是否为空2.count(col1)计算的是col1列不为空的行数3.在mysql中,count(1),count(col1),count(*)均访问二级索引4.在oracle中,仅count(col1)访问索引,count(1)和count(*)均访问主键或表5.访问方式的区别是因为mysql索引存储了null值,oracle索引没有存储null值。oracle必须访问主键或表才可以count出表的真实行数,mysql则访问原创 2021-06-03 15:18:42 · 564 阅读 · 1 评论 -
innodb锁详解
如果是索引唯一扫描或主键唯一扫描,innodb只会上行锁锁住一行数据。如果是索引范围扫描或主键范围扫描,innodb会上临键锁。唯一索引同样会有索引范围扫描,仅在等值条件下扫描唯一索引(或主键)才会触发唯一扫描。临键锁会锁住“小于范围的最大存在值和大于范围的最小存在值”,如果没有实际存在值,innodb会给临键锁“超大值”或“超小值”去锁一个大范围。所以在某些情况下,一个update可以锁住整张表。原创 2021-05-24 17:33:19 · 1271 阅读 · 0 评论 -
rr模式下的快照读--更新操作仍然会导致事务前后数据不一致
rr快照读只会读取当前事务下数据的“历史态”,但当更新(dml)时,事务会去查看“当前态”某些数据行,验证数据的可执行性(如主键冲突、唯一性约束冲突等等)。一但有“当前态”的行数据被更新,这个行就会和当前”历史态“数据合并成新的”历史态“,此后该事务的快照读均是读取的新”历史态“快照。原创 2021-05-19 16:17:57 · 698 阅读 · 1 评论 -
关于组合索引的第二列为in时是否可用走索引的问题
组合索引的第二列为in时是否可用走索引?当时面试直接把我问蒙了。一般来说in会等价改写成or,然后走索引。比如where a in (1,2)等价于where a=1 or a=2在oracle中肯定会这样去改写,所以该走索引的还是会走索引。但是这个条件放在组合索引的第二列呢?首先等价改写同样成立,比如where a in (1,2) and b=0等价于where (a=1 or a=2)and b=0优化器是否会这样做呢?这只有测试了才知道oracle..原创 2021-05-11 09:46:36 · 4012 阅读 · 0 评论 -
show engine innodb status和innodb锁监控
innodb monitor是innodb内置的监控模块,用show engine innodb status就可以查看。innodb monitor output可以输出在错误日志中查看更细粒度的innodb锁信息,需要打开innodb_status_output_locks原创 2021-05-10 17:45:58 · 1809 阅读 · 0 评论 -
mysql内存溢出分析办法
mysql内存监控大体归为一下3步1.os角度查看mysql进程内存使用2.mysql服务角度查看mysql内存池使用3.开启performance_schema及内存监控1.从OS进程使用情况出发,查看mysql进程的内存使用情况因为mysql是单进程的,可以通过ps -aux或者top -H -p查看进程的内存使用情况#ps -aux|grep 3306root 40761 0.0 0.0 9696 1632 ? S Mar22 ...原创 2021-05-08 18:03:08 · 2442 阅读 · 0 评论 -
关于不等于是否可以走索引的问题
以前在学oracle的时候,不等于不能走索引似乎是一条铁律SQL> select a,count(*) from unequal_oracle group by a; A COUNT(*)---------- ---------- 1 2048 2 1create index idx_unequal on unequal_oracle(a);--a=2时,索引的过滤性是比较好的,这里我们取a<&原创 2021-04-26 17:50:42 · 7663 阅读 · 0 评论 -
mysql分区表优化案例一则——分区扫描和分区索引扫描
测试mysql扫描分区和分区索引先做一些测试,指定分区字段,查看执行计划。测试环境数据库版本为mysql5.7创建分区表CREATE TABLE employes ( id INT NOT NULL , fname VARCHAR (30), lname VARCHAR (30), hired DATE NOT NULL DEFAULT '1970-01-01' , separated DATE NOT NULL DEFAULT '9999-原创 2021-04-16 17:57:35 · 1113 阅读 · 0 评论 -
mysql text字段的优化
mysql text字段比较特殊,text用来存储较多字符的字符串,因为text一般比较大,普通索引效率很低,不可以直接在text字段上创建普通索引。在text字段上可以创建2种索引:全文索引(fulltext index)和前缀索引(column prefix index)(实际上全文索引可以在char,varchar,text上创建)mysql全文索引mysql的全文索引跟Oracle的全文索引是类似的,全文索引将字段中的词汇进行索引,获取方式跟parser相关,所以也存在...原创 2021-03-26 17:20:59 · 2955 阅读 · 0 评论 -
performance_schema的配置
开启performance_schema修改performance_schema参数需要重启mysql[mysqld]performance_schema=ONSELECT * FROM INFORMATION_SCHEMA.ENGINES;或者 show engines;可以看出mysql把PERFORMANCE_SCHEMA看成一种存储引擎+--------------------+---------+------------------------------------------原创 2021-03-26 10:23:49 · 853 阅读 · 0 评论 -
mysql truncate命令
truncate命令结果跟delete很像,但是他们的执行原理完全不一样。truncate本质还是ddl语句1.truncate先使用create命令创建表,然后drop源表,最后rename新表。2drop只是删除元数据,所以比delete快很多,特别是大表3 truncate本质是ddl,需要ddl权限。ddl本身是自提交的,所以truncate也不能rollback回滚4 因为是truncate是重建表,所以truncate是可以整理表碎片的(delete不可以)5 trunca.原创 2021-03-19 09:40:49 · 6204 阅读 · 0 评论 -
xtrabackup的flush table with read lock
xtrabackup是percona开发的mysql第三方工具,跟oracle的rman类似,都是物理备份。oracle的rman可以热备,xtrabackup是有锁的。rman和xtrabackup的热备差异可以看看我以前的文章(https://blog.csdn.net/qq_40687433/article/details/107367562?ops_request_misc=%257B%2522request%255Fid%2522%253A%252216157790741678026406原创 2021-03-15 11:35:21 · 510 阅读 · 0 评论 -
mysql IO控制
mysql IO控制不仅与flush method有关,还需要深入了解linux内核IO调度机制。同步IO、异步IO、直接IO、缓存IO,他们又与fsync、O_DIRECT有什么关系?本篇为您详细讲述mysql IO调度机制原创 2021-03-11 16:28:34 · 1061 阅读 · 1 评论 -
记一次mysql内存泄露
监控告警某mysql实例内存使用率85%,而且在一点点的往上长实例分配内存130G登陆数据库show engine innodb status\Gbuffer pool使用约98G,占总内存的73%作业,还有10几%未知----------------------BUFFER POOL AND MEMORY----------------------Total large memory allocated 105545465856 --98GDictionary mem...原创 2021-03-05 17:47:51 · 451 阅读 · 0 评论 -
为什么组合索引的范围查找不能过滤非前导列?
组合索引的规则例如组合索引(a,b)过滤条件为a=1 and b=2时,可以走组合索引过滤a和b过滤条件为a=1时,可以走组合索引过滤a过滤条件为b=2时,不可以走组合索引过滤(因为字段b不是先导列,组合索引过滤必须包含先导列)过滤条件为a<=1 and b<=2时,可以走组合索引过滤a<=1,但是不能过滤b<=2(范围过滤只能走先导列)过滤条件为a<=1时,可以走组合索引过滤a<=1过滤条件为b<=2时,不可以走组合索引过滤本.原创 2021-03-05 14:52:53 · 464 阅读 · 2 评论 -
mysql的事务隔离级别
可重复读是在一个事务中第一次select时建立的快照读。也就是说在同一个事务中同样的select不会有其他不一样的结果,也就不会有幻读和不可重复读原创 2021-03-03 09:16:03 · 941 阅读 · 2 评论 -
在线ddl与innodb-online-alter-log-max-size
innodb-online-alter-log-max-size参数官方文档解释:https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_online_alter_log_max_sizeCommand-Line Format --innodb-online-alter-log-max-size=# System Variable innodb_online_alter_log_max_原创 2021-02-09 10:35:50 · 1056 阅读 · 0 评论 -
记一次删除索引的sql优化
某系统mysql实例,IOPS较高,有明显陡增波峰首先看的是慢sql。但是还是那句话,慢sql不一定会抓取到关键sql,执行时间不超过1s,但是执行次数较高,执行计划不够优秀的sql,同样需要优化因为平台有抓取所有sql,查看了在波峰期间次数较高的sql有2个,一个delete一个insert。delete from tablzl where lzl_uid = :1 and uuid = :2 and snapshot_idx != :3 insert int...原创 2021-02-06 15:57:01 · 234 阅读 · 0 评论 -
没有慢sql但CPU使用率较高的分析办法
cpu使用率高的解决办法:1.首先应该查看主机、容器是否能登陆,如果不能登录(hang死)需要通知应用方等,共同决议是否需要重启主机或容器2.如果可以登陆主机或容器,查看主机状态,cpu使用率,哪些进程占用cpu较高。一般有2种情况,非mysql进程占用和mysql进程占用,如果是非mysql进程占用,如果是主机进程,需要联系主机工程师进一步分析,如果是不相关进程直接kill如果是mysql进程占用,需要进一步分析。3.因为mysql是单进程多线程数据库,任何消耗cpu较...原创 2021-01-27 16:47:11 · 1721 阅读 · 0 评论 -
mysql安装简易版
1.安装mysql软件tar -xvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /usr/local/cd /usr/localmvmysql-5.7.20-linux-glibc2.12-x86_64mysqlmkdir -p /data/mysqlgroupadd mysqluseradd -g mysql mysqlchown -R mysql.mysql /usr/local/mysqlchown -R mysql.原创 2020-07-14 15:39:04 · 336 阅读 · 0 评论 -
mysql rpm安装
1.安装groupadd my57useradd my57 -g my57mkdir -p /u01/soft/mysqlchown -R my57:my57 /u01/soft/mysqlcd /u01/soft/mysqltar -xvf mysql-5.7.24-1.el6.x86_64.rpm-bundle.tarrpm -ivh mysql-community-comm...原创 2019-03-08 15:54:42 · 775 阅读 · 0 评论 -
主流数据库主从复制差异——oracle、mysql、mongo、redis、oceanbase
oracleDG:ORACLE主备就是DATAGUARD,也就是DG。主库叫primary,备库叫standbyORACLE的只读库:ADG,ACTIVE DATAGUARD。oracle 11g开始支持,可以将备库打开为readonly状态,可以分摊IO读的业务压力。也就是说备库没有打开为readonly称为DG,打开为readonly称为ADG。ADG架构:oracle的同步方式:物理备库和逻辑备库。物理备库:将redo直接应用到备库上,将block块进行覆盖,...原创 2020-12-22 17:33:26 · 5353 阅读 · 5 评论 -
mysql备库报错:exceeds of slave_pending_jobs_size_max
备库show slave status\G信息如下:*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 1.1.1.1 Master_User: replicator Ma...原创 2020-09-16 17:58:24 · 231 阅读 · 0 评论 -
mysql学习——GTID的理解
mysql主从复制原理1 master的dump线程从二进制日志中读取事件,发送给IO线程2slave的IO线程接受到事件,写入relaylog3 slave的SQL线程从relay log中读取事件并执行GTID是mysql5.6的新功能UUID(服务器ID)+GTID(全局事物ID),可以唯一标识一个事务事务从master复制到slave时,二进制pos位置可能会发生变化,由于slave配置可能与master不同,这个位置差别可能很大。但是GTI...原创 2020-08-06 19:25:16 · 237 阅读 · 0 评论 -
mysql主从搭建--简易版
当前我有一个mysql实例3306[root@lzl ~]# service mysqld statusMySQL running (1782) [ OK ][root@lzl ~]# ps -ef|grep mysqlroot 1603 1 0 Jul22 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/...原创 2020-08-05 18:51:23 · 248 阅读 · 0 评论 -
-D指定db登陆失败ERROR 1044 (42000): Access denied for user ‘lzldb‘@‘%‘ to database ‘lzldb‘
-D指定db登陆失败#mysql -ulzl -p123456 -Dlzldb --socket=/my3456/mysql.sock Warning: Using a password on the command line interface can be insecure.ERROR 1044 (42000): Access denied for user 'lzldb'@'%' to database 'lzldb'困扰了很久,查了user没有问题。原创 2020-09-03 11:54:28 · 261 阅读 · 0 评论 -
使用xtrabackup搭建mysql主从
在用xtrabackup搭建主从前,先理解几个xtrabackup的参数--prepare (非常重要!) prepare a backup for starting mysql server on the backup 一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。 --prepare的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于...原创 2020-08-14 15:24:13 · 1110 阅读 · 0 评论 -
xtrabackup无法连接socket和xtrabackup版本与mysql版本支持问题
安装了 xtrabackup 8.0后备份数据库报错[root@lzl ~]# xtrabackup -uroot -poracle --backup -S=/tmp/mysql.sock -P3306 --target-dir=/data/backupxtrabackup: recognized server arguments: --datadir=/data/mysqlxtrabackup: recognized client arguments: --user=root --passw...原创 2020-07-21 16:39:52 · 2149 阅读 · 0 评论 -
xtrabackup的安装
xtrabackup安装。在percona官网直接下载开源的xtrabackup工具下载地址:https://www.percona.com/doc/percona-xtrabackup/8.0/installation/yum_repo.html[root@lzl soft]# yum install -y percona-xtrabackup-80-8.0.13-1.el6.x86_64.rpmLoaded plugins: product-id, refresh-packagekit.原创 2020-07-21 09:57:05 · 1032 阅读 · 0 评论 -
mysql xtrabackup热备和oracle rman热备的区别
mysql xtrabackup和oracle rman都是物理备份,xtrabackup也比较像rman。oracle在rman热备时怎么保证数据一致性?在oracle中rman在线备份数据库,在备份过程中数据一直在改变,每一次变更都会更新数据块中的scn号,(scn单调递增,每一次事务都会增加scn的值,就是数据库完全没有事务,scn仍然会增加),只要在备份开始时的redo日志(归档)存在,那么在恢复时oracle可以找到那些在备份过程中变更的数据块,通过redo块去进行更新,这就是追归档.原创 2020-07-15 18:20:43 · 487 阅读 · 0 评论 -
mysql read only
1.设置read_only使mysql实例为只读。slave库设置read_only后可用当做查询库使用,但是这个只读不影响slave库应用binlog2.read_only只限制普通用户修改数据,不会限制super权限的用户。如果要现在super用户,需要设置super_read_only3.all privilege包含了super权限测试有read_only时,root用户修改数据mysql> create table lzl;ERROR 1113 (42000): A.原创 2021-01-21 11:02:10 · 2472 阅读 · 0 评论 -
一次binlog暴涨的分析
某库最近binlog暴涨,撑到备份磁盘告警。几分钟就生成了500m,但是data文件不怎么涨-rw-rw---- 1 mysql mysql 525780067 Jan 14 09:27 mysql-bin.002058-rw-rw---- 1 mysql mysql 525172203 Jan 14 09:32 mysql-bin.002059-rw-rw---- 1 mysql mysql 524929124 Jan 14 09:38 mysql-bin.002060-rw-rw---- 1原创 2021-01-14 17:23:16 · 628 阅读 · 1 评论 -
Error ‘Table ‘./mysql/proc‘ is marked as crashed and should be repaired‘ on query
因为内存问题,几个备库都挂了,重搭也解决不了。mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 14.0.0.231 Master_User: r...原创 2021-01-14 09:48:34 · 450 阅读 · 0 评论 -
mysql刷盘机制详解
mysql刷脏数据在写redo之后,逻辑跟oracle一致,checkpoint/commit->内存中的redo到redolog文件->内存中的脏数据到数据盘。但是mysql多一个环节,就是把binlog从binlogcache写入到binlog文件中。binlogcache不是共享内存,是为每个client分配的私有内存,是mysqlserver管理的。而logbuffer是共享内存,由innodb管理,属于innodb存储引擎内存。————————————————版权声明:本文为CSD原创 2021-01-12 17:44:42 · 8132 阅读 · 2 评论 -
change buffer的概念与相关配置
什么是change buffer?写缓冲区缓存那些不在bufferpool中但是变更了的二级索引页(还是说二级索引变更在changebuffer中,bufferpool存储select使用到的二级索引),这些变更来自DML语句。当有读操作时,相关页会合并并转移到bufferpool中。二级索引不像聚簇索引有唯一键,插入二级索引的动作一般都是随机插入的。当有读操作时,合并二级索引到bufferpool可以减少随机IO的发生,也减少了从磁盘读二级索引的概率。在系统空闲或slow...原创 2020-12-31 15:36:47 · 1104 阅读 · 0 评论 -
buffer pool内存结构、LRU、刷脏页机制详解
innodb内存结构和物理磁盘结构其中innodb内存结构包括3个大块:1.buffer pool2.change buffer(实际上是bufferpool的一部分)3.log buffer。日志缓冲(这只是innodb端的内存,如查询缓存、binlogcache、readbuffer、sortbuffer、joinbuffer、keybuffer、tmp_table_size等等不在列)(自适应索引是一个功能,在bufferpool中自动生成hash索引)...原创 2020-12-30 17:31:28 · 1715 阅读 · 0 评论 -
mysql查询缓存
查询缓存的定义qeury cache是一个内存池,用于缓存select语句的sql文本和结果集,当后面有相同的sql语句时(且表的数据未发生改变),mysql仅做语法和权限验证,然后会跳过解析、优化器、接口调用、innodb执行的阶段,直接到查询缓存中把对应的结果集返回给会话。相同sql是指sql文本完全一样,且没有变量和类似now()这样的函数。只要表有变动,qc就会被flush。qc也不支持分区表qc的前提1.查询缓存在对一些不经常变动的表2.qc对sql的大小写敏感,select.原创 2020-12-25 17:52:17 · 227 阅读 · 0 评论 -
mysql隐藏主键和local分区表
mysql> create table test111(a int,b varchar(4)) PARTITION BY RANGE (a) -> (PARTITION P01 VALUES LESS THAN (10) ENGINE = InnoDB, -> PARTITION P02 VALUES LESS THAN (20) ENGINE = InnoDB, -> PARTITION P03 VALUES LESS THAN (30) ENGINE = ...原创 2020-12-17 09:29:04 · 950 阅读 · 0 评论 -
PG与mysql的区别
1.mysql支持多种存储引擎,存储引擎选择较为灵活,实际上一般都在用innodb。ddl放在server端,ddl语句的事物性支持较差,可能出现server级数据库丢失。pg的server稳定性更好2 mysql数据存储结构为聚簇索引,通过主键查询效率较高,但是有很多局限性,比如插入只能顺序插入。不太适合超大数据非主键查询,访问二级索引需要回表。pg采用堆表存储数据,能够支持更大的数据量3 pg不支持分区表,通过继承表的形式达到分区表的目的,在分区较多成千上万时,pg的继承表效率较差4 mys原创 2020-12-02 09:32:34 · 8682 阅读 · 0 评论