redo 文件的作用
Redo log是一个基于磁盘文件的数据结构,用以在实例恢复时校正由未完成事务写入的数据文件.
当需要改变某个页的数据时,InnoDB先将这个页加载到buffer pool中,在buffer pool中进行数据的修改,并将修改行为记录到redo log buffer中.这一行为我们称之为日志先行(Write-Ahead Logging).
根据参数的不同,Innodb对日志的写入会有不同的写入策略.
最后才将修改过的数据记录到硬盘中.
从性能的角度来说,数据的变更会造成随机I/O,而redo log 的写方式为追加写,此方式为顺序I/O.所以将变更内容先行写入redo ,而将改变的页慢慢的刷回磁盘可显著增加实例处理数据改变的能力.
redo 相关参数
mysql> show variables like 'innodb%log%' ;
+----------------------------------+------------+
| Variable_name | Value |
+----------------------------------+------------+
| innodb_api_enable_binlog | OFF |
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 16777216 |
| innodb_log_checksums | ON |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_log_write_ahead_size | 8192 |
| innodb_max_undo_log_size | 1073741824 |
| innodb_online_alter_log_max_size | 134217728 |
| innodb_undo_log_truncate | OFF |
| innodb_undo_logs | 128 |
+----------------------------------+------------+
参数名称 | 含义 — | — innodb_flush_log_at_trx_commit | log file 写入策略 innodb_log_buffer_size | redo log buffer 大小 innodb_log_file_size | redo 文件大小 innodb_log_files_in_group | redo 文件数量 innodb_log_group_home_dir | redo 文件所处文件夹相对路径 innodb_log_write_ahead_size | 每次追加写到redo日志文件的大小,默认为页的大小。 innodb_online_alter_log_max_size | 在线DDL时,临时日志尺寸上限
其中最为复杂的参数为
- innodb_flush_log_at_trx_commit
参数值 | redo写入 | 系统层刷新redo log | 风险 |
---|---|---|---|
0 | 每秒写入log file | 每秒同步刷新 | 实例崩溃,或主机崩溃丢失最多丢失一秒内的事务 |
1 | 事务完成后立即写入 | 立即刷新redo log file到磁盘 | 主机崩溃,最多丢失一个语句或一个事务 |
2 | 事务完成后立即写入 | 每秒刷新redo log file到磁盘 | 主机崩溃 最多丢失一秒内的事务 |
redo log文件的管理
增加redo log
查看当前redo log 数量
[mysql@bosenrui ~]$ ll /mysql/data/ib_log*
-rw-r----- 1 mysql mysql 50331648 Apr 1 10:35 /mysql/data/ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 10:32 /mysql/data/ib_logfile1
修改参数文件
[mysql@bosenrui data]$ cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql@bosenrui data]$ cat /mysql/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
#skip-grant-tables
basedir = /mysql
datadir = /mysql/data
pid-file = /mysql/data/mysql.pid
log-error = /mysql/mysql.log
innodb_log_files_in_group=4
重启MySQL
[mysql@bosenrui ~]$ mysqladmin -uroot -p shutdown
Enter password:
[mysql@bosenrui ~]$ mysqld --defaults-file=/mysql/my.cnf &
查看datafir
[mysql@bosenrui ~]$ cd /mysql/data/
[mysql@bosenrui data]$ ll
total 221216
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 332 Apr 1 11:40 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:48 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile1
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile2
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile3
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:48 ibdata1
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:48 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
-rw-r----- 1 mysql mysql 5 Apr 1 11:48 mysql.pid
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
减少redo log file数量
查看当前redo log 数量
[mysql@bosenrui ~]$ cd /mysql/data/
[mysql@bosenrui data]$ ll
total 221216
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 332 Apr 1 11:40 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:48 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile1
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile2
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:09 ib_logfile3
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:48 ibdata1
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:48 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
-rw-r----- 1 mysql mysql 5 Apr 1 11:48 mysql.pid
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
修改参数文件
重启Mysql
[mysql@bosenrui data]$ mysqladmin -uroot -p shutdown
Enter password:
[mysql@bosenrui data]$ mysqld --defaults-file=/mysql/my.cnf &
[1] 3431
查看redolog 数量
[mysql@bosenrui data]$ ll
total 172064
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 302 Apr 1 11:57 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile1
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile2
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:57 ibdata1
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:57 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
-rw-r----- 1 mysql mysql 5 Apr 1 11:57 mysql.pid
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
增加MySQL redo log大小
查看当前redo log
[mysql@bosenrui data]$ ll
total 172064
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 302 Apr 1 11:57 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile1
-rw-r----- 1 mysql mysql 50331648 Apr 1 11:57 ib_logfile2
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:57 ibdata1
-rw-r----- 1 mysql mysql 12582912 Apr 1 11:57 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
-rw-r----- 1 mysql mysql 5 Apr 1 11:57 mysql.pid
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
修改参数文件
[mysql@bosenrui data]$ cat /mysql/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
#skip-grant-tables
basedir = /mysql
datadir = /mysql/data
pid-file = /mysql/data/mysql.pid
log-error = /mysql/mysql.log
innodb_log_files_in_group=3
innodb_log_file_size=100663296
重启Mysql
[mysql@bosenrui data]$ mysqladmin -uroot -p shutdown
Enter password:
[1]+ Done mysqld --defaults-file=/mysql/my.cnf
[mysql@bosenrui data]$ mysqld --defaults-file=/mysql/my.cnf &
[1] 3543
[mysql@bosenrui data]$ ll
查看redo log 大小
[mysql@bosenrui data]$ ll
total 307228
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 294 Apr 1 12:02 ib_buffer_pool
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile1
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile101
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile2
-rw-r----- 1 mysql mysql 12582912 Apr 1 12:02 ibdata1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
减小red log大小
查看当前redo log 大小
[mysql@bosenrui data]$ ll
total 307228
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 294 Apr 1 12:02 ib_buffer_pool
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile1
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile101
-rw-r----- 1 mysql mysql 100663296 Apr 1 12:02 ib_logfile2
-rw-r----- 1 mysql mysql 12582912 Apr 1 12:02 ibdata1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys
修改参数文件
[mysql@bosenrui data]$ cat /mysql/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
#skip-grant-tables
basedir = /mysql
datadir = /mysql/data
pid-file = /mysql/data/mysql.pid
log-error = /mysql/mysql.log
innodb_log_files_in_group=3
innodb_log_file_size=50331648
重启MySQL
[mysql@bosenrui data]$ mysqladmin -uroot -p shutdown
Enter password:
[1]+ Done mysqld --defaults-file=/mysql/my.cnf
[mysql@bosenrui data]$ mysqld --defaults-file=/mysql/my.cnf
查看redo log 大下
[mysql@bosenrui data]$ ll
total 172064
-rw-r----- 1 mysql mysql 56 Apr 1 10:32 auto.cnf
-rw-r----- 1 mysql mysql 290 Apr 1 12:07 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Apr 1 12:08 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 1 12:08 ib_logfile1
-rw-r----- 1 mysql mysql 50331648 Apr 1 12:08 ib_logfile2
-rw-r----- 1 mysql mysql 12582912 Apr 1 12:08 ibdata1
-rw-r----- 1 mysql mysql 12582912 Apr 1 12:08 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 mysql
-rw-r----- 1 mysql mysql 5 Apr 1 12:08 mysql.pid
drwxr-x--- 2 mysql mysql 4096 Apr 1 10:32 performance_schema
drwxr-x--- 2 mysql mysql 12288 Apr 1 10:32 sys