centos 6 的默认是myisam
centos7 默认innodb
mysql存储引擎是插件式的
聚簇索引,
数据缓存
外键
全文索引,比如在一个文章里搜一个字符串
锁的级别
、
锁级别
myisam是表级锁, 带来的 就是并发用户访问受到很大的影响
innodb是行级锁,就可以一个改10行, 一个用户改1行,不冲突
粒度越小,越精细,myisam比较粗
**mVCC
很重要,可以支持多个用户同时去修改数据,并且不会造成影响,可以让你并发访问数据库,不会因为加锁损失并发性。
**
mvcc内部机制是,同时有多个事务操作数据库,后面补了每条数据有创建日期和删除日期,数字越大越后创建,越小越早创建
删除,就是删除的时候记录的时间
假如更新数据了,c改为d,相当于把这个记录删了再重建
假如在30这个时间点查,123是看不到的,这条i语句是有持续时间的,30到200结点结束,那就是比较你创建操作的30这个时间点小的时候
是在删除前看到的,所以看到
myisam不支持事务
事务往往是多个语句组成,有ACID特性,A原子性不可分割,要么做完,要么不做,假如中间做了断电了,重启计算机后会rollback回滚,撤销前面做的,恢复没做之前的
建议采用innodb数据库
总结
数据恢复性差,磁盘写文件更新100条记录,执行一半,崩溃,这时候就只更新了前50条,后面的没更新
myisam数据库每个表都有独立的三个文件存放
FRM 格式定义
MYD数据
MYI 索引
mysql数据库中所有表都是基于myisam存储引擎
myisam每个表在磁盘上对应三个文件
innodb
较老版本innodb所有表的数据都放在一个磁盘文件里INNODB是存放两个地方,表的定义是frm
数据是存放在ibddata1的
不加innodb_file_per_table,所有数据表都放在一个文件里,加innodb_file_per_table,每个表在磁盘上都有两个文件
多了ibd文件
这里面放的是各种性能指标,访问情况,性能资源情况
这个存储引擎给特殊的 使用的
用的引擎就是内存
example是范例cluster/NDB是做集群用的
blackhole 黑洞引擎,主从复制使用
读写分离,中间的就可以启用blackhhole,就可以不在磁盘上保存,用缓存了
但是这样从主服务器同步,压力太大,就可以换下面的方式
中间就可以用blackhole把数据都放在内存里提高速度
、
老版本想要设置INNOdb,就需要加配置文件
修改成功
查看表是什么存储引擎
系统自带数据库
存放性能相关的参数,5.5之后才有
加载到内存里的,从mysql数据库加载来的
mysql选项,服务器选项,状态变量
mysqld默认不在path变量mysqld --help --v /verbose 可以查看选项
数据库服务器变量,存放在数据库中一些可以修改值的变量名
https://dev.mysql.com/doc/refman/5.7/en/server-option-variable%20-reference.html
–是选项,_是变量
也有既是选项又是变量
加在这里的,都是mysql服务器的参数选项命令行说明也是个选项
show variables 查看变量
可以是变量也可以是选项
skip-grant-tables **口用到的,不是变量
没有这个变量就查不到
这只是个数据库变量,不是服务器选项
看mariadb的时候还是,innodb_file_per_table,–选项,和变量变量又分两种,全局和会话的
会话就是当前用户登录一次就算一个会话
global是登录所有的 有效
会话的,compression 是状态变量status var,是只读的
global全局,所有登录到这台机器上面的人都有效
session会话,只针对当前你一个人,设置完以后退出就失效了
debug-sync也是session级别的
这项是mysql里的,mariadb不存在
动态就是,修改了,不用重启服务,在线修改,非动态,相当于只读性质的
innodb_encrypt_tables 既是服务器选项也是变量
修改全局需要加global关键字
是session级别的
打开一个新终端就还是utf8,只是基于会话级的修改
没有立即利用在全局
全局的和会话的不一样,而且有些支持动态更改,有些不支持
数据库的服务器变量一般设置用set,数据库服务器的变量一般写到my.cnf的配置文件里,重启服务生效
sql_mode,,本身就是个变量,既是选项又是变量
不能创建口令为空的用户
不允许时间值为空值
select的列一定是分组过或者聚合的,否则认为语法出错
超过长度,把你截断了
会有个提示警报
中间加了命令就看不到了需要马上看,提示有数据被截断了
可以找一个traditional传统模式
设置成传统的,超出范围就报错