
mysql
文章平均质量分 68
祈雨v
这个作者很懒,什么都没留下…
展开
-
The user specified as a definer does not exist
描述mysql管理员给调用方创建了一个名为test的用户,并授权了指定host,效果如下:mysql> select user,host from mysql.user where user = 'test';+------+------------+| user | host |+------+------------+| test | 172.17.0.2 || test | 172.17.0.3 |+------+------------+2 rows in set原创 2021-03-27 15:02:46 · 2072 阅读 · 1 评论 -
记一次mysql执行DDL导致锁表
背景线上某数据库意外发现缺少索引,并且该表的数据量很少,只有几万条记录而已,因此很随意地尝试给该表添加索引。原本预期该表的记录很少,添加索引的耗时应该很短,结果却直接导致该表被锁,所有该表的增删改查操作全部阻塞,继而影响到了线上业务。发现锁表后,执行show processlist发现大量线程阻塞,状态显示Waiting for table metadata lock。通过命令终止了DDL线程,该表恢复正常。mysql从5.6版本起支持Online DDL,理论上执行DDL语句不会阻塞诸如INSERT、原创 2020-06-28 10:17:19 · 5596 阅读 · 2 评论 -
mysql磁盘占用查看
磁盘占用分析在没有权限查看mysql所在磁盘时,当监控发现磁盘空间不足时,如何通过mysql的命令查看当前mysql实例的磁盘占用情况。binlogmysql默认不清理binlog日志,当运行一段时间后可能会累计大量的binlog文件。通过如下命令查看当前binlog占用情况,文件大小单位为字节:mysql> show binary logs;+------------------+-----------+| Log_name | File_size |+-------原创 2020-06-28 10:15:16 · 5054 阅读 · 1 评论 -
mysql对text字段update致磁盘增长
描述公司有一张表占用的磁盘空间很大,占用磁盘的主要是该表的一个text类型字段。于是我们打算通过洗数据的方式,先将该表的text值更新成一个长度很短的值,预期更新完后该表的磁盘占用不会变,但是表的数据页会有大量的碎片空间,然后再通过例如命令OPTIMIZE TABLE来回收释放未使用的磁盘空间,最终实现减小该表的磁盘空间占用。但实际操作时,当我们将该表的text值的字段批量更新成更短的值时,通过监控发现该表的磁盘空间迅速增长,与我们预期不符。此时才意识到遇到了mysql的行溢出的场景。复现创建两个带原创 2020-06-28 10:13:47 · 1395 阅读 · 1 评论 -
mysql延时关联
描述mysql有种sql优化方式,叫延时关联,即通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据,尤其在大分页查询的场景下,可以提高查询效率。例如下面两行SQL查询语句,在使用覆盖索引的大分页查询场景下,第二条的执行速度要远远快于第一条SQL。select * from table where xxx limit a,b;select * from table wher...原创 2020-04-04 20:49:34 · 5225 阅读 · 0 评论 -
MySQL表字符集不同导致关联查询索引失效
概述mysql在多表之间做关联查询时,需要注意各个表的字符集是否一致。如果在字符集不一致的场景下做关联查询,会出现关联字段即使有索引,但却索引失效的问题。复现建表语句,创建两个字符集不同的表,如下:CREATE TABLE `school` ( `id` int(11) NOT NULL AUTO_INCREMENT, `school_code` varchar(255) DEFA...原创 2020-03-19 15:21:55 · 1433 阅读 · 0 评论 -
mysql空间索引
空间索引示例CREATE TABLE `shop_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `shop_name` varchar(64) NOT NULL COMMENT '门店名称', `geom_point` geometry NOT NULL COMMENT '经纬度', PRIMARY KEY ...原创 2019-12-07 11:04:48 · 2417 阅读 · 2 评论 -
Using temporary与Using filesort
通过explain查看sql的执行计划时,Extra字段的值往往会看到Using where; Using index; Using temporary; Using filesort,其中此次重点关注Using temporary; Using filesort。Using temporaryUsing temporary表示由于排序没有走索引、使用union、子查询连接查询、使用某些视图等...原创 2019-06-13 23:35:26 · 50372 阅读 · 3 评论 -
mysql回表致索引失效
简介mysql的innodb引擎查询记录时在无法使用索引覆盖的场景下,需要做回表操作获取记录的所需字段。mysql执行sql前会执行sql优化、索引选择等操作,mysql会预估各个索引所需要的查询代价以及不走索引所需要的查询代价,从中选择一个mysql认为代价最小的方式进行sql查询操作。而在回表数据量比较大时,经常会出现mysql对回表操作查询代价预估代价过大而导致索引使用错误的情况。案例...原创 2019-06-14 19:18:17 · 3708 阅读 · 0 评论 -
mysql数据页结构
数据页结构mysql默认每个数据页为16KB,InnoDB引擎的Compact行记录结构由以下字段组成:变长字段长度列表null值列表记录头信息列数据1列数据N不定长不定长5字节变长字段长度列表对于非固定长度的字段类型,例如varchar、text、blob、多字节编码的char等,通过变长字段长度列表记录当前行记录的对应字段值的长度(列顺序倒序存放)...原创 2019-07-01 20:43:25 · 1208 阅读 · 0 评论 -
mysql索引原理
页分裂每个数据页的开头记录了当前页的编号以及该数据页的上一页和下一页的编号,如图:1-4字节为当前数据页数据的校验和;5-8字节为当前数据页的编号;9-12字节为上一个数据页的编号;13-16字节为下一个数据页的编号;即数据页以一个双向链表维持着顺序,每个数据页中以单向链表的格式对记录的RowID进行逻辑排序,并且每个数据页之间的记录进行物理排序(页编码大的数据页中的记录RowI...原创 2019-07-20 14:54:04 · 181 阅读 · 0 评论 -
初探InnoDB MVCC源码实现
转载自博客园本文链接地址: 初探InnoDB MVCC源码实现1. 背景本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。2. 基本概念2.1 隐藏字段在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了InnoDB implements MVCC by storing with each row tw...转载 2019-08-03 15:12:49 · 187 阅读 · 0 评论 -
mysql字符集utf8mb4失效踩坑
现象mysql数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用命令行插入该4字节的emoji表情时却成功了。示例如下:CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(11) NOT NULL, `age`...原创 2019-08-17 17:39:13 · 18205 阅读 · 2 评论 -
mysql IS NULL 使用索引
简介mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!=这些判断条件导致索引失效而全表扫描。mysql官方文档也已经明确说明is null并不会影响索引的使用。MySQL can perform the same optimization on col_name IS ...原创 2019-08-28 18:58:51 · 11078 阅读 · 4 评论 -
sql执行过程分析optimizer tracing
介绍mysql从5.6的版本开始提供optimizer tracing功能,开发者可以通过该功能查看mysql的sql解释器的整个执行过程。快速使用# Turn tracing on (it's off by default):SET optimizer_trace="enabled=on";SELECT ...; # your query hereSELECT * FROM INFO...原创 2019-04-27 14:38:47 · 487 阅读 · 0 评论 -
explain分析sql语句字段的解释
转载自腾讯云本文链接地址: explain 分析sql语句字段的解释+----+-------------+-------+------------+------+---------------+-----+---------+------+------+----------+-------+| id | select_type | table | partitions | type | po...转载 2019-01-26 14:20:00 · 318 阅读 · 0 评论 -
SQL语法(一)
此笔记为听网易云课堂李兴华老师的课程后整理的笔记,感谢李兴华老师,讲的很详细很系统。格式化指令:|- SET LINESIZE 300; //设置每行显示的数据长度,需右击命令框-属性-布局-两个宽度设置为120|- SET PAGESIZE 30; //设置表格数据每页显示的最大长度|- COL列标题 FOR A参数;原创 2016-12-24 21:26:11 · 483 阅读 · 0 评论 -
Mysql安装步骤(3)注意事项
方式一费时长,且需要Linux环境安装了cmake;方式二速度快不依赖cmake,但是本地连接时必须加上参数”-h127.0.0.1”,否则自定义sock路径的情况下会报以下错误:error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'Check that mysqld is run原创 2017-09-29 20:16:21 · 258 阅读 · 0 评论 -
Mysql安装步骤(1)源码编译
一、准备文件mysql-5.6.31.tar.gz下载链接 二、编译0、依赖yum install -y glibc.i686yum install -y gcc gcc-c++yum install -y cmakeyum install -y ncurses-develyum install -y bisonyum install -y perl pe...原创 2017-09-29 19:55:05 · 263 阅读 · 0 评论 -
Mysql安装步骤(4)双机互为主从同步数据
一、准备编号MySQL路径IP:端口1号MySQL/home/sun_zeming/mysql/mysql-1192.168.100.6:33012号MySQL/home/sun_zeming/mysql/mysql-2192.168.100.6:3302二、编辑配置文件编辑1号MySQL配置文原创 2017-09-30 20:47:56 · 499 阅读 · 0 评论 -
Mysql安装步骤(2)直接安装
一、准备文件mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz官网下载链接二、解压$ tar mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz三、MySQL安装1、进入mysql的安装路径$ cd mysql-5.6.36-linux-glibc2.5-x86_64/$ mkdir原创 2017-09-29 20:07:01 · 245 阅读 · 0 评论 -
MySQL日志记录(1)慢查询
1、默认值MySQL默认关闭慢查询:mysql> show variables like 'slow_query_log';MySQL默认查询时间大于10秒的SQL语句为慢查询:mysql> show variables like 'long_query_time';2、打开慢查询启动慢查询日志:mysql> set global slow_query_log=on;修改慢查询的时间阀值为3秒:my原创 2017-11-05 11:40:02 · 361 阅读 · 0 评论 -
MySQL日志记录(2)SQL执行记录
1、默认值MySQL默认关闭全局SQL记录:mysql> show variables like 'general_log';2、开启SQL记录启动全局SQL日志记录功能:mysql> set global general_log=on;3、效果4、测试全局日志记录默认为mysql/datadir/localhost.log原创 2017-11-05 11:43:23 · 295 阅读 · 0 评论 -
MySQL日志记录(3)在MySQL表中显示日志
1、默认值MySQL日志默认存在文件中mysql> show variables like 'log_output';2、修改mysql> set global log_output='table';3、效果慢查询的MySQL表:mysql.slow_logSQL记录的MySQL表:mysql.general_log原创 2017-11-05 11:44:57 · 1134 阅读 · 0 评论 -
Mysql5.7安装步骤
1、准备文件boost_1_59_0.tar.gzmysql-5.7.20.tar.gz2、编译2.1、解压mysqltar -zxvf mysql-5.7.20.tar.gz2.2、添加boostmysql5.7依赖boost,编译mysql时需要指定boost所在文件夹。mkdir mysql-5.7.20/boostcp boost_1_5...原创 2018-03-15 20:21:01 · 312 阅读 · 0 评论 -
canal安装
介绍canal基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。可以通过canal实现基于日志增量订阅&消费支持的业务:数据库镜像数据库实时备份多级索引 (卖家和买家各自分库索引)search build业务cache刷新价格变化等重要业务消息下载githubcanal.deployer-1.1.2.tar.gz配置详解MySQL...原创 2018-12-01 14:57:59 · 750 阅读 · 0 评论 -
基于canal的实时数据同步
适用场景使用canal做数据备份而不用mysql自带的主从备份的场景主要为:跨数据库的数据备份,例如mysql => oracle数据异构,即对同一份数据做不同的分库分表查询。例如卖家和买家各自分库索引maven<dependency> <groupId>com.alibaba.otter</groupId> <arti...原创 2018-12-01 14:59:12 · 7387 阅读 · 1 评论 -
SQL语法(二)
数据更新: |- CREATETABLE 新建表名 ASSELECT *|[列名1,列名2,...] FROM 被复制表名; //复制表数据,Oracle专用。 |- INSERTINTO 表名称 [(列名称1,列名称2,...)] VALUES (值1,值2,...);//增加数据,建议写完整格式,即添加上值对应的列名原创 2016-12-24 21:33:12 · 391 阅读 · 0 评论