mysql 记录日志的引擎_MySQL日志及引擎

MySQL日志文件

错误日志(error log):记录mysql服务器mysqld在启动/关闭或运行过程中遇到的错误信息。

查询日志(query log):

普通查询日志(general query log):记录客户端连接信息和执行的sql语句信息。

慢查询日志(slow query log):记录执行时间超出指定值(long_query_time)的sql语句。

二进制日志(binary log):记录数据被修改的相关信息。

在配置文件中进行配置各日志路径

log-output=file

slow_query_log= 1long_query_time= 1slow_query_log_file= /data/mysql/mysql_3306/log/slow.log

log-error = /data/mysql/mysql_3306/log/error.log

binlog_format=mixed

log-bin = /data/mysql/mysql_3306/log/mysql3306_bin

查看log相关及测试

mysql> show variables like '%_log%';

开启普通查询日志

mysql> set global general_log=ON;

Query OK,0 rows affected (0.07 sec)

测试查看效果

mysql> select user,host from mysql.user;

[root@localhost data]#cat localhost.log

mysqld, Version: 5.6.22-log (MySQL Community Server (GPL)). started with:

Tcp port:3306 Unix socket: /tmp/mysql_3306.sock

Time Id Command Argument181204 12:20:03 2 Query show variables like '%_log%'181204 12:21:40 2Query select user,host from mysql.user

[root@localhost data]#

慢查询日志

#慢查询参数

long_query_time=1 #多长时间记录

log-slow-queries=/data/slow.log

log_queries_not_using_indexes

二进制日志

log-bin

sql-log-bin

binlog日志三种模式

1  Statement Level 模式

每一条修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。

优点:不需要记录每一行数据的变化,较少bin-log日志量,节约IO,提高性能。

2  Row Level 模式

日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据行修改

优点:bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅需要记录那一条记录被修改了。

缺点:产生大量的日志内容。

3  Mixed 模式

前两种模式的结合。

模式调整

查看

mysql> show variables like '%binlog_format%';+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | MIXED |

+---------------+-------+

1 row in set (0.00 sec)

在线修改生效

运行时在线修改

set session binlog_format='ATATEMENT';set session binlog_format='ROW';set session binlog_format='MIXED';

全局生效

set global binlog_format='STATEMENT';set global binlog_format='ROW';set global binlog_format='MIXED';

MySQL服务引擎

对于用户和应用程序同样一张表,无论什么引擎来存储,用户看到的数据都是一样的,不同的存储引擎存取,引擎功能,占用空间大小,读取性能都有区别。

MySQL最常用存储引擎:MyISAM和InnoDB。

MyISAM引擎

每一个MyISAM表都对应硬盘上的三个文件,这三个文件都有一样的文件名,有不同的扩展名。.frm文件保存表的定义,这个文件不是MyISAM引擎的一部分,而是服务的一部分;.myd保存表的数据;.myi是表的索引文件。

[root@localhost mysql]#file user.frm

user.frm: MySQL table definition file Version 9[root@localhost mysql]#file user.MYD

user.MYD: Hitachi SH big-endian COFF executable, not stripped

[root@localhost mysql]#file user.MYI

user.MYI: MySQL MISAM compressed data file Version 1

MyISAM引擎特点

1  不支持事务(事务时逻辑上的以组操作,组成这操作的各个单元,要么全成功,要么全失败。

事务的四大特性(ACID)

1.原子性(Atomicity),事务是一个不可分割的单位,事务中的所有sql等操作要么都发生,要么都不发生。

2.一致性(Consistercy),事务发生前和发生后,数据的完整性必须保持一致。

3.隔离性(Isolation),并发访问数据时,一个事务在执行完毕前,对于其它的会话不可见,多个并发事务之间的数据是相互隔离的。

4.持久性(Durability),一个事务一旦提交,对数据库中的数据改变时永久性的,出了错误,事务也不允许撤销,只能通过”补偿性事务“。

2  表级锁定(锁整个表)降低了并发性能。

3  读写互相阻塞,在写入的时候阻塞读取,在读取的时候阻塞写入,读本身不会阻塞另外的读。

4  只会缓存索引,可以通过key_buffer_size缓存索引,提高访问性能,减少磁盘IO,只会缓存索引,不缓存数据。

5  读取表快,占用资源少

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

生产业务场景

1  不需要事务支持的业务,一般为读数据比较多的网站业务。

2  并发相对较低的业务。

3  数据修改相对较少的业务。

4  以读为主的业务。

5  对数据一致性要求不是很高的业务。

6  中小站网站部分业务。

总结:单一对数据库的操作都可以用,单一就是尽量纯读或纯写。

引擎调优

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

2  调整读写优先级,根据实际需求确保重要操作更优先执行。

3  启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。

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

5  分解大的操作,降低单个操作的阻塞时间。

6  降低并发数,某些高并发场景通过应用进行排队队列机制。

7  对于相对静态的数据库,利用query Cache或memcached缓存服务提高访问效率。

8  MyISAM的count只有在全表扫描的时候高效,带有其它条件的要进行实际的数据访问。

9  把主从同步的主库用InnoDB,从库用MyISAM引擎。

InnoDB引擎

InnoDB引擎包含在二进制安装包里,和其它的引擎相比,兼容ACID事务,以及参数的完整性。

InnoDB引擎特点

1  支持事务:支持4个事务隔离级别,支持多版本读。

2  行级锁定(更新时一般时锁当前行),通过索引实现,全表扫描仍然时表锁。

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

4  具有非常高效的缓存特性,能缓存索引,也能缓存数据。

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

6  所有Secondary Index都会保存主键信息。

7  支持分区、表空间。

8  支持外键约束。

InnoDB业务场景

1  需要事务支持(具有较好的事务特性)。

2  行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。

3  数据更新较为频繁的场景。

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

5  硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘IO。

InnoDB引擎调优

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

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

3  尽可能缓存所有的索引和数据,提高相应速度,减少磁盘IO。

4  咋大批量小插入的时候,尽量自己控制事务不使用autocommit自动提交。

5  合适使用innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。

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

MySQL引擎

1  查看有那些引擎可用

mysql>show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

9 rows in set (0.00sec)

MySQL引擎更改

1  MySQL命令语句修改

alter table talbe_name engine=InnoDB;

修改示例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

mysql> show create tablet1;+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| t1 | CREATE TABLE`t1` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`name`varchar(20) DEFAULT NULL,PRIMARY KEY(`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

mysql> alter table t1 engine=MyISAM;

Query OK,4 rows affected (0.10sec)

Records:4 Duplicates: 0 Warnings: 0mysql> show create tablet1;+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| t1 | CREATE TABLE`t1` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`name`varchar(20) DEFAULT NULL,PRIMARY KEY(`id`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

mysql>

View Code

2  用sed对备份内容进行引擎更换。

3  mysql_convert_table_format命令修改。

mysql_convert_table_format --user=username --password=passwd --socket=sockpath --ENGINE=MyISAM dbname tbnama

4  创建表时指定引擎

mysql> create tablet(-> id int,-> name varchar(10))ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK,0 rows affected (2.02sec)

mysql> show create tablet;+-------+------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+------------------------------------------------------------------------------------------------------------------------+

| t | CREATE TABLE`t` (

`id`int(11) DEFAULT NULL,

`name`varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

问题:

1.MySQL有哪些存储引擎,各自有什么特点和区别?

2.生产场景如何选用MySQL的引擎?

你可能感兴趣的:(mysql,记录日志的引擎)