MySQL的InnoDB 存储引擎使用一个指定大小的Redo log空间(一个环形的数据结构),Redo log的空间通过innodb_log_file_size和innodb_log_files_in_group(默认为2)参数来调节。将这俩参数相乘即可得到总的可用Redo log 空间。尽管技术上并不关心你是通过innodb_log_file_size还是innodb_log_files_in_group来调整Redo log空间,不过多数情况下还是通过innodb_log_file_size 来调节。
为InnoDB引擎设置合适的Redo log空间对于写敏感的工作负载来说是非常重要的,然而,这项工作是要做出权衡的。配置的Redo空间越大,InnoDB就能更好的优化写操作;然而,增大Redo空间也意味着更长的恢复时间当出现崩溃或掉电等意外时。
像许多数据库管理系统一样,MySQL使用日志来实现数据的持久性(当使用默认的InnoDB存储引擎时)。这确保了在提交事务时,即使发生崩溃或断电,数据也不会丢失。
MySQL的InnoDB存储引擎使用固定大小(循环)的Redo日志空间。大小是由innodb_log_file_size和innodb_log_files_in_group(默认为2)控制的,你可以将这两个值相乘,得到可用的Redo日志空间。从技术上讲,不管你是改变innodb_log_file_size还是innodb_log_files_in_group变量来控制Redo空间大小,大多数人都只使用innodb_log_file_size,而不去管innodb_log_files_in_group。
配置InnoDB的Redo空间大小是对写密集型工作负载最重要的配置选项之一。然而,这是有代价的。配置的Redo空间越多,InnoDB就能更好地优化写IO。然而,增加Redo空间也意味着当系统断电或由于其他原因崩溃时,恢复时间更长。
查看日志大小
mysql> show variables like 'innodb_log_file_size';
+----------------------+----------+
| Variable_name | Value |
+----------------------+----------+
| innodb_log_file_size | 50331648 |
+----------------------+----------+
1 row in set (0.01 sec)
修改innodb_log_file_size
[root@mysql57 ~]# cat /etc/my.cnf | grep -i innodb_log_file_size
innodb_log_file_size = 1500M
[root@mysql57 ~]# service mysqld restart
Shutting down MySQL.... SUCCESS!
Starting MySQL................................ SUCCESS!
[root@mysql57 data]# mysql -uroot -pwwwwww -S /mysql/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'innodb_log_file_size';
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| innodb_log_file_size | 1572864000 |
+----------------------+------------+
1 row in set (0.01 sec)