mysql系列之9.mysql日志&存储引擎

mysqlbinlog

是什么?

数据目录下的如下文件: mysql-bin.xxxxxx

作用?

记录数据库内部增删改查对mysql数据库有更新的内容的记录

三种模式?

statement level 模式: 缺点是不够细致

row level 模式:

日志会记录每一行数据被修改的形式

(一下子修改多行其实就一条语句, 但是它会记录成多行)

优点: 记录每一行的细节, 可以记录function/trigger/存储过程

mixed level 模式: 混合模式, 自动判断该使用statement还是row level

三种模式的配置?

log-bin=mysql-bin

binlog_format = "MIXED"

在线修改即时生效

mysql> set global binlog_format="MIXED";

mysql日志

错误日志:

[mysqld_safe]

log-error = /usr/local/mysql/data/mysql.err

二进制日志:

log-bin=mysql-bin

查询日志:

普通日志:

gerneral_log = OFF   #一般不开启, 没什么作用, 而且文件会特别大

gerneral_log_file = /usr/local/mysql/data/mysql.log

慢查询日志:

long_query_time = 1

log-slow-queries = /usr/local/mysql/data/slow.log

log_queries_not_using_indexes

存储引擎

体系结构图

事务的四大特性(ACID)

原子性

一致性

隔离性

持久性

start  transaction;

commit;

rollback;

myisam引擎特点

不支持事务

表级锁定

读写互相阻塞

只会缓存索引

读取速度较快, 占用资源较少

不支持外键约束, 但支持全文索引

myisam引擎适合的生产环境

不需要事务支持

一般为读数据比较多写比较多的场合

读写并发访问相对较低的业务(锁机制问题)

数据修改较少的业务(阻塞问题)

以读为主的业务

硬件资源比较差的机器

小结: 适合纯读或纯写的业务

myisam调优

设置合适的索引(缓存机制)

调整读写优先级

启用延迟插入(尽可能多条数据一次写入)

尽量顺序操作, 让insert数据都写入到尾部, 减少阻塞

分解大的操作, 减少单个操作的阻塞时间

降低并发数(要用到队列机制)

对于相对静态的数据, 充分利用query_cache或memcached服务来进行缓存

query_cache_size=2M

query_cache_limit=1M

query_cache_min_res_unit=2K

myisam的count只有在全表扫描的时候才特别高效 (即不能带where条件)

可以把主从同步的主库使用innodb, 从库使用myisam (来回复制数据会很麻烦, 不建议使用!!)

innodb引擎

支持事务

行级锁定 (全表扫描仍然是表锁)

读写阻塞与事务隔离级别相关

有非常高效的缓存特性: 能缓存索引和数据

整个表和主键以cluster方式存储, 组成一颗平衡树

所有 secondary index 都会保存主键信息

支持分区, 表空间

支持外键约束, 5.5版本以后支持全文索引

和myisam相比, innodb对硬件要求比较高

innodb引擎适合的生产环境

需要事务支持的业务

高并发场景(请先确保已经建立了索引)

数据读写都较为频繁的场景

数据一致性要求较高的业务

硬件设备好, 可以利用innodb的缓存能力

innodb调优

主键尽可能小, 避免给secondary index带来过大的空间负担

避免全表扫描, 因为会使用表锁

尽可能缓存所有的索引和数据

在大批量小插入的时候, 尽量自己控制事务

合理设置 innodb_flush_log_at_trx_commit参数(每隔几秒刷新log到磁盘), 不要设置为0, 即不要过度追求安全性

避免主键更新, 因为这会带来大量的数据移动

innodb重要参数

innodb_buffer_pool_size = 2048M #缓存池, 设置为机器总内存的50%--80%

批量更改存储引擎

法1: alter

ALERT TABLE tb1 ENGINE=INNODB;

法2: 使用sed对备份内容进行替换

nohup sed -e ‘/sMyISAM/InnoDB/g‘ tb1.sql > tb1_1.sql

法3: mysql_convert_table_format命令

mysql_convert_table_format --user=root --password=123456 --socket=/data/3306/mysql.sock --engine=MyISAM db1 tb1

;

时间: 2024-10-08 03:00:03

mysql系列之9.mysql日志&存储引擎的相关文章

Linux命令:MySQL系列之十一--MySQL日志管理

MySQL日志管理 SHOW GLOBAL VARIABLES LIKE '%log%':查看关于log的全局变量 一.日志分类 1.错误日志   2.一般查询日志   3.慢查询日志 4.二进制日志  5.中继日志   6.事务日志   7.滚动日志 二.日志详解 1.错误日志 说明:在对应的数据目录中,以主机名+.err命名的文件,错误日志记录的信息类型: 记录了服务器运行中产生的错误信息 记录了服务在启动和停止是所产生的信息 在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录

MySQL详解(2)----------存储引擎

存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据.又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力). 这 些不同的技术以及配套的相关功能在MySQL中被称

Mysql 性能优化3 如何选择存储引擎

Mysql 使用 插件式存储引擎 Mysql 体系结构 mysql服务层 存储引擎层 都属于存储引擎                            MyISAM 存储引擎    frm 是记录结构的, MYD和 MYI 是MyISAM 特有的   例    表级锁,对数据进行修改时需要全表加锁.读取时也是需要家共享锁.对读写操作并发性不是很好,但是只读的话不怎么影响,共享锁不阻塞共享锁 支持全文索引. 支持text,blob,前500个字符的前缀索引. 如果是只读表的话,就是没有修改操作

MySQL性能优化(一)-- 存储引擎和三范式

一.MySQL存储引擎 二.存储引擎如何选择 是否支持事务 检索和添加速度 锁机制 缓存 是否支持全文索引 是否支持外键 三.MyISAM和InnoDB对比 四.什么时候使用MyISAM和InnoDB MyISAM:读事务要求不高,以查询和插入为主,例如各种统计表. InnoDB:对事务要求高,保存的是重要的数据,例如交易数据,支付数据等,对用户重要的数据,建议使用InnoDB. 五.配置和数据文件 1.配置文件默认位置 Linux: /etc/my.cnf Windows: my.ini 2.

MySQL查看和修改表的存储引擎

如何查看MySQL的当前存储引擎? 一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql> show create table 表名; 如何查看Mysql服

MySQL管理之 MyISAM和InnoDB存储引擎简单对比

版权归QQ87006009所有 一.MyISAM引擎: 1.隔离事务界别: 由于myisam的隔离事务级别是串行.采用的是表级锁,不支持事物和全文索引.因此不适用在大并发,重负荷的生产系统上. 2.实例的崩溃恢复: 当系统宕机或者mysql进程崩溃后,MyISAM引擎表很容易受到损坏.不得不用外部命令myisamchk来进行修复. 3.分配内存和使用: myisam引擎内存主要存放索引信息,不存放数据信息,因此在检索表时会先访问索引信息,然后在去磁盘读取数据信息. 4.cpu的使用效率: myi

MySQL查看和修改表的存储引擎(转载+加点东西)

1 查看系统支持的存储引擎 show engines; 2 查看表使用的存储引擎 两种方法: a.show table status from YOUR_DB_NAME where name='YOUR_TABLE_NAME'; b.show create table YOUR_TABLE_NAME; 如果显示的格式不好看,可以用\g代替行尾分号  有人说用第二种方法不准确,我试了下,关闭掉原先默认的Innodb引擎后根本无法执行show create table table_name指令,因为

mysql那些事(5)建表存储引擎的选择

在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写并发性能较好. 实际上,现在大多数的公司里,mysql的规定都是使用InnoDB作为默认存储引擎,除了支持事务和行锁是比较重要的两个原因外,其实MyISAM在实际应用场景中意义也不大,并且一个重要原因是,官方支持力度大.oracle很早就收购了InnoDB,后面又收购了mysql,现在重点发展Inn

MySql性能调优一(存储引擎InnoDB,MyISAM)

区别 MyISAM基于ISAM存储引擎,并对其进行扩展,不支持事务. InnoDB给mysql提供了事物提交.回滚等事物安全的存储引擎. MyISAM采用表级锁.表级锁开销小,加锁快,锁粒度大,冲突概率高,并发度低,不会出现死锁. InnoDB支持表级锁与行级锁,默认为行级锁.行级锁开销大,加锁慢,锁粒度小,冲突概率低,并发度高,会出现死锁. MyISAM读写操作是串行的,如果读写同时操作同一张表,写进程优先获取锁,所以不适合有大量更新与读取操作的项目,适合读操作多的少量数据. InnoDB存储