
mysql
MYSQL轻松学
微信公众号:easymysql
展开
-
开源中间件Vitess助力MySQL实现分库分表
关于VitessVitess自2011年以来一直为YouTube的所有数据库流量提供服务,目前已被许多企业采用,以满足其生产需求。Vitess是一个用于部署、扩展和管理大型mysql实例集群的数据库解决方案。它的架构是在公共或私有云架构中高效运行,就像在专用硬件上一样。它结合并扩展了许多重要的mysql特性和nosql数据库的可伸缩性。Vitess可以解决以下问题1. 实现MYSQL的分片,应用只需很少的更改或无需更改2. 部署和管理大型数据库集群实例3. 裸设备到云的迁移Vi原创 2020-11-03 09:37:12 · 728 阅读 · 2 评论 -
MySQL8.0 字典表增强的意义
MySQL中数据字典是数据库重要的组成部分之一,INFORMATION_SCHEMA首次引入于MySQL 5.0,作为一种从正在运行的MySQL服务器检索元数据的标准兼容方式。用于存储数据元数据、统计信息、以及有关MySQL server的访问信息(例如:数据库名或表名,字段的数据类型和访问权限等)。8.0之前:1、元数据来自文件2、采用MEMORY表引擎3、frm文件 存放表结构信息4、opt文件,记录了每个库的一些基本信息,包括库的字符集等信息5、.TRN,.TRG文件用原创 2020-11-03 09:20:48 · 293 阅读 · 0 评论 -
【MySQL】一些知识点(一)
1、统计信息原理我们知道执行计划跟同级信息有关,统计信息多久收集一次,如何收集?如果表太大不可能全部统计一遍,所以统计信息采用采样统计,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计。在 MySQL 中,有两种存储索引统计的方式,可以通过设置参数 innodb_stats_persisten原创 2020-11-03 09:15:10 · 166 阅读 · 0 评论 -
【MySQL】开源数据闪回工具—binlog2sql介绍
一、binlog2sql介绍binlog2sql是国内MySQL大佬danfengcao使用python开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件。根据不同选项,可以得到原始SQL、回滚SQL、去除主键的SQL等。github地址为:https://github.com/danfengcao/binlog2sql该工具主要用于: 数据快速回滚(闪回); 从binlog生成标准SQL; 适用MySQL版本:MySQL5.6 、MySQL5.7原创 2020-11-03 09:11:33 · 3381 阅读 · 1 评论 -
利用mysqlbinlog闪回数据
MySQL利用binlog恢复误操作数据在人工手动进行一些数据库写操作的时候(比方说数据订正),尤其是一些不可控的批量更新或删除,通常都建议备份后操作。不过不怕万一,就怕一万,有备无患总是好的。在线上或者测试环境误操作导致数据被删除或者更新后,想要恢复,一般有两种方法。方法一、利用最近的全量备份+增量binlog备份,恢复到误操作之前的状态,但是随着数据量的增大,bin转载 2017-11-27 13:50:22 · 1529 阅读 · 0 评论 -
防止连接Mysql超时,JDBC探活配置
我们知道Mysql有两个关于连接超时的参数,默认为8小时:MySQL > show global variables like '%timeout%';wait_timeout = 28800 非交互连接等待时间interactive_timeout = 28800交互连接等待时间MySQL > show pro原创 2018-01-16 18:31:50 · 5840 阅读 · 0 评论 -
MYSQL批量建表存储过程
分表比较多的情况,如何批量创建,可通过存储过程实现:创建一个存储过程:红色表结构,蓝色为表名及表数量delimiter //create procedure sp_create_tab()beginset @str = " ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `bak0` va原创 2018-02-08 17:11:54 · 1107 阅读 · 0 评论 -
mysql load data部分字段的正确写法
在日常运维中,会经常遇到将文件中数据导入到数据库中,如果是.sql文件,直接采用source方式即可;如果是.csv、.txt文件,可以采用 load data 方式。这两种方式都十分熟悉,这里说一种特殊情况: 需求很简单,有如下txt文件需要将数据导入库表对应字段中文件已转换到unix,字符类型utf8,跟数据库一致,无乱码Shell> head day.txt 20170601,1420...原创 2018-05-30 18:37:12 · 13205 阅读 · 4 评论 -
MYSQL8.0.11二进制安装
Mysql8.0源码编译安装涉及包较多,推荐现在二进制包安装。 一、创建用户和组groupadd mysqluseradd -g mysql mysqlecho "password" | passwd --stdin mysql 二、创建目录mkdir -p /data/mysql/tmp mkdir -p /data/mysql/datamkdir -p ...原创 2018-07-27 11:06:14 · 1640 阅读 · 0 评论 -
MySQL Index 之 B+Tree数据结构
MySQL中90%的慢Sql都可以通过索引来得到优化,为什么索引可以使Sql变的更快,我们需要先了解下MySQL InnoDB都有哪些索引。按规则分类: Hash索引 Memory引擎默认 USING HASH BTREE索引 InnoDB引擎默认B+Tree USING BT...原创 2019-03-25 18:57:52 · 3209 阅读 · 0 评论 -
MySQL OOM(内存溢出)的排查思路及优化方法
OOM全称"Out Of Memory",即内存溢出。内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。内存溢出产生原因多种多样,当内存严重不足时,内核有两种选择: 直接panic 杀掉部分进程,释放一些内核。 大部分情况下,会杀掉导致OOM的进程,然后系统恢复。...原创 2019-06-26 12:54:23 · 10315 阅读 · 0 评论 -
【mysql】show engine innodb status 解读
InnoDB是MySQL使用最多的存储引擎,通常InnoDB状态可以通过show engine innodb status\G查看。由于MySQL不同版本采用InnoDB引擎版本不同,5.6后对show engine innodb status信息进行了优化,本文环境为5.7。MySQL版本 InnoDB引擎版本 5.1.x 1.0.x版本(官方称为InnoDB P...原创 2019-06-26 13:01:46 · 2880 阅读 · 2 评论 -
MYSQL 必考面试题10道(多选)
1、MySQL偶尔会出现OOM(内存溢出)现象,导致MySQl服务重启,以下哪种方式能有效缓解OOM的情况发生()A.适当调低innodb_buffer_pool_size大小,5.7之前需要重启MySQL服务。B.降低并发,避免查询分组排序和更多table cache。C.开启swap。D.将一个实例下库表拆成多个库表(分库分表)。2、INSERT BUFFER即合并插入缓存,从in...原创 2019-08-05 10:19:40 · 2465 阅读 · 0 评论 -
【转】mysql各版本timestamp默认值
生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时间戳数据类型。时间戳数据存取在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为'1970-01-01 00:00:01' UTC至'2038-01-19 03:14...原创 2019-08-15 18:33:26 · 17003 阅读 · 0 评论 -
MYSQL数据库设计规范
一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释解读:若干年后谁知道这个c1,c2,c3字段是干嘛的 (4)禁止使用存储过程、视图转载 2017-11-20 15:18:59 · 659 阅读 · 0 评论 -
MYSQL常用SQL汇总
1、查看当前应用连接,连接数突增排查select user,SUBSTRING_INDEX(host,':',1) as ip , count(*) as count,db from information_schema.processlist where host not in ('localhost') and user not in ('replicater') group by原创 2017-11-20 15:16:31 · 345 阅读 · 0 评论 -
【mysql】MySQL事务隔离级别详解
MySQL事务隔离级别详解一、定义SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。1、Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。原创 2015-03-03 17:00:50 · 452 阅读 · 0 评论 -
【mysql】update替换某列前几位值
环境:新服没有更改组号id,开服后用户id全为初始化组号 后续问题:可能导致合服时出现重复id 解决:修改组号,因为组号为id前三位,所以只需把前三位替换正确的组号即可 操作:查出都有哪些表有id字段:select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME from information_schema.COLUMNS wh原创 2015-01-10 16:12:01 · 6562 阅读 · 1 评论 -
【mysql】mydumper多线程备份恢复
一、简介使用C语言开发的Mysql备份工具,开发人员主要来自MySQL,Facebook,SkySQL公司。备份速度理论值比mysqldump快10倍,支持多线程备份,mysqldump是单线程备份。这也使它在处理速度要快很多。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。一般有主从结构的情况下,可以在从库进行备份。因为是多线原创 2015-03-03 17:12:22 · 3019 阅读 · 0 评论 -
【mysql】Mysql 5.6新特性MRR
一、什么是MRRMRR全称是Multi-Range Read,是MYSQL5.6优化器的一个新特性,在MariaDB5.5也有这个特性。优化的功能在使用二级索引做范围扫描的过程中减少磁盘随机IO和减少主键索引的访问次数。将随机IO转换为顺序IO二、MRR和没有MRR的区别给出一个简单的例子,在innodb表执行下面的查询:SELECT non_key_column FROM tb...原创 2015-03-03 17:02:44 · 5179 阅读 · 0 评论 -
【mysql】mysql有哪些权限
(以下操作都是以root身份登陆进行grant授权,以root@localhost身份登陆执行各种命令。)MySQL包含哪些权限,共29个。权限 说明 举例 usage 连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。 该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。 ...原创 2016-09-08 17:41:28 · 5413 阅读 · 0 评论 -
【mysql】MySQL binlog日志大小超过限定范围
my.cnf中有两个参数设置: expire_logs_days = 7 #binlog保留时间7天 max_binlog_size = 1G #binlog大小 问题描述:mysql binlog大小限制1G,但是实际却达22G 分析原因: mysqld在每个二进制日志名后面添加一个数字扩展名,每次你启动服务器或刷新日志时...原创 2016-09-08 17:44:17 · 6731 阅读 · 0 评论 -
【mysql】max_binlog_cache_size错误
Multi-statement transaction required more than ‘max_binlog_cache_size’bytes of storage错误: 二进制日志缓冲区(Binlog Buffer):二进制日志缓冲区主要用来缓存由于各种数据变更操做所产生的Binary Log 信息。为了提高系统的性能,MySQL 并不是每次都是将二进制日志直接写原创 2015-01-10 16:28:12 · 2958 阅读 · 0 评论 -
MySQL5.7并发复制演进
MySQL5.5及以前的复制一般主从复制有三个线程且都是单线程:Binlog Dump(主) --> IO Thread(从) --> SQL Thread(从)。1、master节点的Binlog dump Thread,当slave节点与master正常连接的时候,master把更新的binlog内容推送到slave节点。2、slave节点的I原创 2017-08-17 16:33:53 · 1199 阅读 · 0 评论 -
MySQL Innodb MTR源码解析
Mysql innodb源码MTR模块,了解源码能帮助DBA更熟悉数据库运行原理、更容易定位排查问题。那么什么是Mtr?Mtr究竟是用来做什么的?围绕几个问题我们来做一下深入研究。一、什么是MTR?Mtr即Mini-transaction的缩写,字面意思小事物,相对逻辑事物而言,我们把它称作物理事物。属于Innodb存储引擎的底层模块。主要用于锁和日志信息。我们原创 2017-08-17 16:35:47 · 3084 阅读 · 0 评论 -
Mysql8.0&Mysql5.7&Mysql5.6&Mysql5.5特性对比
Mysql5.5 特性,相对于Mysql5.1性能提升 默认InnoDB plugin引擎。具有提交、回滚和crash恢复功能、ACID兼容。 行级锁(一致性的非锁定读 MVCC)。 表与索引存储在表空间、表大小无限制。 支持dynamic(primary key缓存内存 避免主键查询引起的IO )与compressed(支持数据及索引压缩)行格式。 ...原创 2017-08-17 16:36:59 · 69543 阅读 · 5 评论 -
MYSQL面试选择题15道(单选)
1、MySQL数据库四种特性,不包括()A.原子性B.事务性C.一致性D.隔离性2、MySQL报错error 1062 的意思是()A.连接数据库失败,没有连接数据库的权限B.字段值重复,入库失败C.未定义用户对数据表的访问权限D.删除数据库文件失败3、MySQL主从架构如下:主库从库192....原创 2016-10-11 10:48:39 · 18339 阅读 · 12 评论 -
MySQL时间加减的正确打开方式
一、背景介绍业务会有这样的需求:时间字段需要加1或减1秒。研发sql:update table set time = time + 1 where id=1; 看似好像挺对的,但是偶尔会出现不是想要的结果。二、模拟测试新建一个表test1,有3条记录如下,执行+1操作:CREATE TABLE `test1` ( `Id` bigint(20)原创 2017-08-25 17:55:34 · 758 阅读 · 0 评论 -
MYSQL RR隔离级别下MVCC及锁解读
MVCC(Multi-Version Concurrent Control):多版本并发控制,只作用于RC和RR隔离级别,主要是为了避免脏读、非重复读,而非幻读,很多文章说通过MVCC避免幻读,其实这种说法是不完善的,RR隔离级别是通过next-key lock 来避免幻读。 优点:避免了许多需要加锁的情形缺点:需要维护每行记录版本号,造成额外资源消耗事物四种隔离级别:我们...原创 2017-09-22 14:33:40 · 3377 阅读 · 0 评论 -
Mysql test开头的库,所有用户在这库上都有管理员权限
只针对test库和以test_为前缀的库: select * from mysql.userwhere user='xx';host:%user:xxpass:xxxxxxxxxxxxxxxxxx看到只有select_priv:Y其他都是N 但是在一台主机上登陆:mysql -uxx -pxxxxxxxxxxxxxxxxxx -h192.168.100.20...原创 2017-09-04 09:41:42 · 1898 阅读 · 0 评论 -
【mysql】时间日期
#时间转字符串select date_format(now(), '%Y-%m-%d'); #结果:2017-02-27#时间转时间戳select unix_timestamp(now());#结果:1488160428#字符串转时间select str_to_date('2017-02-27', '%Y-%m-%d %H'); #结果:2017-02-27 00:00:...原创 2015-01-10 16:31:33 · 683 阅读 · 0 评论