MySQL内核InnoDB存储引擎详解(4)

如果宕机了则:应用已经持久化好了的日志文件,读取日志文件中没有被持久化到数据文件里面的记录;将这些记录重新持久化到我们的数据文件中

MySQL内核InnoDB存储引擎详解

innodb日志持久化相关参数:

innodb_flush_log_at_trx_commit

0:每秒写入并持久化一次(不安全,性能高,无论mysql或服务器宕机,都会丢数据最多1秒的数据) 
1:每次commit都持久化(安全,性能低, IO负担重) 
2:每次commit都写入内存的内存缓存,每秒再刷新到磁盘(安全,性能折中, mysql宕机数据不会丢失,服务器宕机数据会丢失最多1秒的数据)

innodb_flush_log_at_timeout参数决定最多丢失多少秒的数据,默认是1秒

InooDB 存储引擎配置 启动配置

InnoDB合理的规划方法是在创建数据库实例之前就定义好数据文件,日志文件和数据页大小等相关属性

指定配置文件位置

MySQL实例启动需要依赖my.cnf配置文件, 而配置文件可以存在于多个操作系统目录下my.cnf文件的默认查找路径,从上到下找到的文件先读,但优先级逐级提升

MySQL内核InnoDB存储引擎详解

系统表空间数据文件配置

可以通过innodb_data_file_path和innodb_data_home_dir来配置系统表空间数据文件 
Innodb_data_file_path可以包含一个或多个数据文件,中间用;号分开 
innodb_data_file_path=datafile_spec1[;datafile_spec2]… 
datafile_spec1 = file_name:file_size[:autoextend[:max:max_file_size]]

其中autoextend和max选项只能用作最后的这个数据文件。 Autoextend默认情况下是一次增 
加64MB,如果要修改此值可通过innodb_autoextend_increment参数。 Max用来指定可扩展数据文件的最大容量用来避免数据文件大小超过可用磁盘空间大小。

mysql> show variables like '%innodb_data%';
+-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir | |
+-----------------------+------------------------+
默认是12M

举例如下:

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
表示指定ibdata1和ibdata2两个数据文件,其中ibdata1文件为固定的50M大小,而ibdata2文件初始化为50M并可自动扩展容量
[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend:max:500M
innodb_data_home_dir参数用来显示指定数据文件的存储目录,默认是MySQL安装后的数据文件目录,举例如下:
[mysqld]
innodb_data_home_dir = /path/to/myibdata/
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
当然也可以在innodb_data_file_path中指定绝对路径的数据文件
[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/path/to/myibdata/ibdata1:50M;/path/to/myibdata/ibdata2:50M:autoextend

使用老版本mysql 一定要注意ibdata1 的大小,当ibdata1几十G或者几百G,要对这个ibdata1压缩的时候该怎么办了,先把所有的数据给mysqldump出来,从新在弄一份数据库把数据库导进去 
5.7和5.6 是每张表都有一个表空间 表名.ibd,因为5.6有个参数开启了独立表空间

5.7和5.6 是每张表都有一个表空间 表名.ibd

日志文件配置

默认情况下InnoDB会在数据文件夹下创建两个48M的日志文件,分别是ib_logfile0和ib_logfile1。 
Innodb_log_group_home_dir参数用来定义redo日志的文件位置

mysql> show variables like '%innodb_log_file%';
+---------------------------+----------+
| Variable_name | Value |
+---------------------------+----------+
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
+---------------------------+----------+
innodb_log_file_size 定义的ib_logfile的大小
innodb_log_files_in_group 定义的几个日志文件默认是两个ib_logfile0和ib_logfile1

my.cnf

[mysqld]
innodb_log_group_home_dir = /dr3/iblogs
innodb_log_files_in_group参数用来定义日志文件的个数,默认和推荐值都是2
innodb_log_file_size参数定义了每个日志文件的大小

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1fe1e788fe1712d1b3106819c6ce028f.html