目录
前言
本篇文章是由于本人在项目部署时,向mysql数据库输出大量数据联调测试时报的错(The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size),经过查询资料修改相关值已解决,特写此篇文章记录问题,供大家参考。
innodb_log_file_size参数介绍
MySQL通过日志来实现数据的持久性(在使用InnoDB存储引擎的前提下)。这确保了当一个事务提交后,其相关数据在崩溃或者服务器掉电的情况下不会丢失。
跟其他数据库管理系统一样,MySQL通过日志来实现数据的持久性(在使用InnoDB存储引擎的前提下)。这确保了当一个事务提交后,其相关数据在崩溃或者服务器掉电的情况下不会丢失。
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空间也意味着更长的恢复时间当出现崩溃或掉电等意外时。
关于恢复时间,并不好预测对于一个指定的 innodb_log_file_size 值出现崩溃是需要多长的恢复时间–他取决于硬件能力、MySQL版本以及工作负载等因素。然而,一般情况下我们可以按照每1GB的Redo log的恢复时间大约在5分钟左右来估算。如果恢复时间对于你的使用环境来说很重要,我建议你做一些模拟测试,在正常工作负载下(预热完毕后)模拟系统崩溃,来评估更准确的恢复时间。
innodb_log_file_size参数修改
MySQL变量分为全局系统变量和会话系统变量(全局系统变量影响服务器的全局操作,会话变量只影响具体客户端连接相关操作),innodb_log_file_size是全局系统变量,SET GLOBAL var_name语句可以动态更改部分全局变量的值,动态修改的参数在MySQL服务重启后会失效,只有写入配置文件才能够重启后仍有效。对于一些无法动态修改的参数,只能通过修改配置文件,然后重启来使之生效,比如innodb_log_file_size。
这里为了跟项目对应的uat和生产环境innodb_log_file_size参数值一致,这里设置为1500M。
vi /etc/my.cnf
#添加
innodb_log_file_size=1500M
#重启mysql服务
service mysql restart
mysql:[(none)] 15:56:32> show variables like 'innodb_log_file_size';
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| innodb_log_file_size | 1572864000 |
+----------------------+------------+
1 row in set (0.00 sec)
mysql:[(none)] 15:56:32> select 1572864000/1024/1024;
+----------------------+
| 1572864000/1024/1024 |
+----------------------+
| 1500.00000000 |
+----------------------+
1 row in set (0.00 sec)
innodb_log_file_size参数值修改完毕。