MySQL修改innodb_log_file_size参数

下午使用阿里云测试环境的MySQL开发的同事反映报错:
nested exception is java.sql.SQLSyntaxErrorException: 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。

1.了解innodb_log_file_size参数(本段引自博文:https://blog.csdn.net/kai404/article/details/80242262)

  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的参考因素,也还有一些别的方式可以观察该参数设置是否“合理”。

2.修改innodb_log_file_size参数

  MySQL变量分为全局系统变量和会话系统变量(全局系统变量影响服务器的全局操作,会话变量只影响具体客户端连接相关操作),innodb_log_file_size是全局系统变量,SET GLOBAL var_name语句可以动态更改部分全局变量的值,动态修改的参数在MySQL服务重启后会失效,只有写入配置文件才能够重启后仍有效。对于一些无法动态修改的参数,只能通过修改配置文件,然后重启来使之生效,比如innodb_log_file_size

  这里为了跟项目对应的uat和生产环境innodb_log_file_size参数值一致,这里设置为1500M。

--修改前
mysql:[(none)] 15:56:32> show variables like 'innodb_log_file_size';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| innodb_log_file_size | 50331648 |
+----------------------+----------+
1 row in set (0.00 sec)

mysql:[(none)] 15:56:32> select 50331648/1024/1024;
+--------------------+
| 50331648/1024/1024 |
+--------------------+
|        48.00000000 |
+--------------------+
1 row in set (0.00 sec)

--开始修改
[root@chengyu ~]# /etc/init.d/mysql stop
[root@chengyu ~]# mv /home/mysql/data/ib_logfile* /home/
[root@chengyu ~]# vim /etc/my.cnf
innodb_log_file_size=1500M
[root@chengyu ~]# /etc/init.d/mysql start

--修改后
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参数值修改完毕,但是uat和生产环境买的阿里云的MySQL服务,该参数没办法修改,超过该范围值,剩下的就是开发的事了。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值