InnoDB

模式4的mycat分布式升级

走远了吗. 提交于 2020-10-31 09:48:36
1.在目前的基础上,需要将 my.conf 及另四个/alidata/server/mysql/conf/*.conf进行增加innodb_file_per_table=1,解决mycat进行修改大表时遇到的表名大小写问题;然后再执行 mycat.offline.bin 的4. 2. mycat/conf/rule.xml schema.xml需要手动增加rule,及schema,又不能像mycattype=2那样直接替换,rule里的最先的规则,与最新的分库规则,及日期都不同;schema.xml里的ip也都不一样。 3.遇到的很多漏掉的update要自己补上去。 large upate也是。修改一轮后,在187上测试后,应该没有问题了。 4.普通的mycattype=1,2可以直接升级。但1可能要做; 但仙居的4模式,却是要前面1,2,3这种顺序处理。 来源: oschina 链接: https://my.oschina.net/u/4353702/blog/4696837

浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

余生长醉 提交于 2020-10-30 04:22:03
Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景 一、相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁(抽象性,不真实存在这个锁) |--乐观锁(抽象性,不真实存在这个锁) 二、InnoDB与MyISAM Mysql 在5.5之前默认使用 MyISAM 存储引擎,之后使用 InnoDB 。查看当前存储引擎: show variables like '%storage_engine%'; MyISAM 操作数据都是使用的表锁,你更新一条记录就要锁整个表,导致性能较低,并发不高。当然同时它也不会存在死锁问题。 而 InnoDB 与 MyISAM 的最大不同有两点:一是 InnoDB 支持事务;二是 InnoDB 采用了行级锁。也就是你需要修改哪行,就可以只锁定哪行。 在 Mysql 中,行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql 语句操作了主键索引,Mysql 就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。 InnoDB 行锁是通过给索引项加锁实现的,如果没有索引,InnoDB 会通过隐藏的聚簇索引来对记录加锁。也就是说

HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?

夙愿已清 提交于 2020-10-29 17:18:23
LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 参考资料【4】 这么牛X的名单,你不想了解下LSM Tree吗?装X之前,我们先来了解一些基本概念。 设计数据存储系统可能需要考虑的一些问题有:ACID,RUM(Read,Write,Memory)。 ACID ACID 相信小伙伴都被面试官问过,我想简单讨论的一点是:如何 持久化数据 才能保证数据写入的 事务性 和 读写性能? 事务性可简单理解为:1.数据必须持久化。2.一次数据的写入返回给用户 写入成功就一定成功,失败就一定失败。 读写性能可简单理解为:一次读 或 一次写 需要的IO次数,因为访问速率:CPU>>内存>>SSD/磁盘。 对于单机存储,最简单的方式当然是:写一条就持久化一条,读一条就遍历一遍所有数据,然后返回。当然没人这么干,在内存中我们都还知道用个HashMap呢。 拿Mysql InnoDB举例子: 读性能体现在数据的索引在磁盘上主要用B+树来保证。 写性能体现在运用 WAL机制 来避免每次写都去更新B+树上的全量索引和数据内容,而是通过redo log记录下来每次写的增量内容,顺序将redo log写入磁盘。同时在内存中记录下来本次写入应该在B+树上更新的脏页数据,然后在一定条件下触发脏页的刷盘。

MYSQL外键约束

假如想象 提交于 2020-10-29 04:58:29
主键约束(PRIMARY KEY): 约束在当前表中,指定列的值非空且唯一. 外键约束(FOREIGN KEY): A表中的外键列的值必须引用于于B表中的某主键列. 为了保证数据的合理性,我们需要建立外键约束关系. 规定: employee表中的deptno列的值,应该来源于department表中的主键列deptno, 我们就把employee表中的deptno列称之为外键列. ------------------------------------------------------------------------------------------------------------ 注意:在MySQL中,InnoDB支持事务和外键. 修改表的存储引擎为InnDB: ALTER TABLE 表名 ENGINE='InnoDB';    一般的,我们在定义外键的时候,习惯这样来起名: 引用表名(缩写)_引用列名. product /productdir表: 外键列:dir_id ----------------------------------------------------------------------------- 在开放中,我们有时候为了提高性能会故意删除外键约束,此时我们可以通过Java代码来控制数据的合理性. InnoDB存储引擎,支持外键又支持事务.

MySQL行锁、表锁、间隙锁,你都了解吗

江枫思渺然 提交于 2020-10-28 20:03:20
前言 我们前几篇讲了索引是什么,如何使用 explain 分析索引使用情况,如何去优化索引,以及 show profiles 分析 SQL 语句执行资源消耗的学习。今天我们来讲讲 MySQL 的各种锁,这里存储引擎我们使用 InnoDB 准备工作 创建表 tb_innodb_lock drop table if exists test_innodb_lock; CREATE TABLE test_innodb_lock ( a INT ( 11 ), b VARCHAR ( 20 ) ) ENGINE INNODB DEFAULT charset = utf8; insert into test_innodb_lock values ( 1 , 'a' ); insert into test_innodb_lock values ( 2 , 'b' ); insert into test_innodb_lock values ( 3 , 'c' ); insert into test_innodb_lock values ( 4 , 'd' ); insert into test_innodb_lock values ( 5 , 'e' ); 创建索引 create index idx_lock_a on test_innodb_lock(a); create index idx

Python访问MySQL

为君一笑 提交于 2020-10-28 17:29:42
Python高级 Python DB-API Python中用于访问关系型数据可的一个技术标准,通过它可以统一地访问所有主流数据库,代码几乎是完全一样的,DB-API定义了访问数据库必须的一些类(比如Connection, Cursor, 各种异常类等)和操作的方式,具体的实现由第三方库完成 API:Application Programming Interface,应用程序编程接口,就是一些实现了某个功能的类、函数、web接口等 Python 访问MySQL 步骤: 1.下载安装第三方库PyMySQL 2.连接数据库 (通过Connection对象实现); 3.执行SQL语句(通过Cursor对象实现); 4.关闭数据库连接 (通过Connection对象实现); 扩展 1.MIS类型项目:Management Information System,管理信息系统,内部所有功能本质就是对数据库进行CRUD操作,代码层面很简单,但往往业务逻辑很复杂 2.三层架构:Client,APP Server,DBMS 客户端建议不要亲自访问数据库,建议先让客户端访问服务器,再让服务器把数据存到数据库中,这种称为三层架构,能让数据库更加安全 3.密码单项加密后存放 对于无需任何人知道,只需客户本人知道的,可以进行单项加密算法 4.条码枪就是一个特殊的输入设备,可以理解为一个特殊键盘 5

面试命中率90%的点 —— MySQL锁

不问归期 提交于 2020-10-28 15:43:35
一、对MySQL的锁的了解 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。 二、隔离级别与锁的关系 在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁。 在Repeatable Read级别下,读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁。 SERIALIZABLE 是限制性最强的隔离级别,因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。 三、按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法 在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。 行级锁,表级锁和页级锁对比

深入了解MySQL的索引

我的梦境 提交于 2020-10-28 12:22:25
(一)关于存储引擎 创建合适的索引是SQL性能调优中最重要的技术之一。在学习创建索引之前,要先了解MySql的架构细节,包括在硬盘上面如何组织的,索引和内存用法和操作方式,以及存储引擎的差异如何影响到索引的选择。 MySQL有很多种衍生版本,这些衍生版本支持更多不同种类的存储引擎。本文主要讨论三种MySQL引擎。 MyISAM 一种非事务性的存储引擎,是MySQL 5.5之前版本默认的存储引擎。 InnoDB 最流行的事务性存储引擎,从5.5版开始成为MySQL默认的引擎。 Memory 基于内存的,非事务性的以及非持久性的存储引擎。 注意: 从5.5版本开始,MySQL表的默认存储引擎从MyISAM换成InnoDB,将会使用户安装那些依赖默认设置或者专门为MyISAM编写的软件包时带来很大的影响。 (二)MySQL索引类型 MySQL支持在所有关系数据库表中创建主键、唯一键、不唯一的非主码索引等多种类型的索引。此外MySQL还支持纯文本和空间索引类型。 MySQL内置的存储引擎对各种索引技术有不同的实现方式,包括:B-树,B+树,R-树以及散列类型。 索引数据结构理论: 1.B-树 B-树中有两种节点类型:索引节点和叶子节点。叶子节点是用来存储数据的,而索引节点则用来告诉用户存储在叶子节点中的数据顺序,并帮助用户找到相应的数据。 B-树的搜索,从根节点开始

SQL基础

早过忘川 提交于 2020-10-28 11:46:13
1 前言 数据库(DB)是按照数据结构存储数据的仓库,数据库管理系统(DBMS)是操纵和管理数据库的一套软件,可分为关系型的数据库管理系统和非关系型的数据库管理系统。数据库管理系统采用结构化查询语言(SQL)来管理数据库。结构化查询语言按照功能分类,可分为数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)、事务控制语言(TCL)、数据控制语言(DCL)。 SQL语句不区分大小写,语句最后的分号(;)代表运行结束。 2 SQL语言 2.1 DDL(数据定义语言) 创建数据库、表(create) create database if not exists testDB; --创建数据库 --创建表 create table testtable( sid int ( 4 ) DEFAULT NULL COMMENT '学生ID' , sex bit ( 1 ) DEFAULT NULL COMMENT '性别' , name varchar ( 10 ) DEFAULT NULL COMMENT '姓名' , birthday date DEFAULT NULL COMMENT '生日' )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT= '学生清单' create table testtable1 select *

Mysql索引(简单了解)

拈花ヽ惹草 提交于 2020-10-28 11:43:42
Mysql的存储引擎,可以针对不同的表使用不同的存储引擎   MyISAM:插入,查血速度快,但是不支持事物,所以适用于数据仓库,Web等   InnoDB:支持事物,所以适合于事物型数据库   Memory:是将数据存到内存中   Archive:事物不安全,所以可以用来保存日志什么的 每个引擎细致的还有许多特点,有空可以看看 ----------------------------------------------------------------------------------   索引   Mysql存储引擎有两种 B树和Hash   索引的优点:可以针对指定的一个列或者多个列建立索引,加快查询速度         可以减少分组或者排序子句的执行时间   索引的缺点:多占内存         对表进行修改增加删除的时候,相应的索引也需要更改   索引的分类:单列索引和组合索引           单列索引指的就是一个索引只有一个列,但是一个表可以有多个单列索引           组合索引指的就是在表的多个字段上创建的索引   全文索引:支持值的全部查找,允许重复和null   创建索引:在建立表的时候创建   简单的对某个列创建索引 查看索引是否创建成功   select_type指的是select的类型 比如简单查询,子查询,联合查询 table 查询的表名