暂无图片
msyql--8.0.18下持久化参数的bug
我来答
分享
暂无图片 匿名用户
msyql--8.0.18下持久化参数的bug

参数文件中innodb_buffer_pool_size是30m

设置持久化45m,但是mysqld-auto.cnf 还是60m

mysql> set persist innodb_buffer_pool_size=45*1024*1024;
Query OK, 0 rows affected, 1 warning (0.23 sec)

mysql> select 45*1024*1024;
+--------------+
| 45*1024*1024 |
+--------------+
| 47185920 |
+--------------+


cat mysqld-auto.cnf

"innodb_buffer_pool_size" : { "Value" : "62914560"


第2个bug 

mysql> set persist innodb_buffer_pool_size=52428800;
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show warnings;
+---------+------+--------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------------------------+
| Warning | 1210 | InnoDB: Cannot resize buffer pool to lesser than chunk size of 31457280 bytes. |
+---------+------+--------------------------------------------------------------------------------

很明显52428800 >31457280 ,但是警告却提示不能小于30m


mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.18 |
+-----------+

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
星星之火

在 MySQL 中,innodb_buffer_pool_size 是用来配置 InnoDB 存储引擎的缓冲池大小的参数。这个参数对于 MySQL 的性能至关重要,因为它决定了 InnoDB 用来缓存表数据和索引的内存大小。

关于您遇到的第一个问题,您尝试将 innodb_buffer_pool_size 设置为 45MB(4510241024),但 mysqld-auto.cnf 文件中显示的值是 60MB(62914560)。这可能是由于几个原因造成的:

  1. 配置文件覆盖:可能存在其他配置文件(如 my.cnf 或 my.ini)覆盖了您设置的值。MySQL 在启动时,会按照特定的顺序读取配置文件,并且后面的配置会覆盖前面的配置。

  2. 动态设置未生效:虽然您使用了 SET PERSIST 命令来动态地更改配置,但可能由于某些原因(如权限问题、MySQL 版本限制等)该更改没有生效。

  3. MySQL 自动调整:在某些情况下,特别是使用了某些自动化管理工具(如 MySQLTuner)时,它可能会自动调整 innodb_buffer_pool_size 的值。

对于第二个问题,您尝试将 innodb_buffer_pool_size 设置为 50MB(52428800),但收到了一个警告,说不能将其缩小到小于 30MB(31457280)。这通常意味着 InnoDB 缓冲池是以块(chunk)的形式进行分配的,每个块的大小是固定的,而您尝试设置的大小小于单个块的大小。因此,即使您设置的总体大小大于一个块的大小,MySQL 也不允许您这样做,因为它需要保持缓冲池的完整性。

为了解决这个问题,您可以尝试以下几个步骤:

  1. 检查所有配置文件:确保没有其他配置文件覆盖了您的设置。

  2. 重启 MySQL 服务:有时候,即使您使用了 SET PERSIST 命令,也需要重启 MySQL 服务才能使更改生效。

  3. 检查 MySQL 版本和文档:不同的 MySQL 版本可能有不同的行为。查阅您正在使用的 MySQL 版本的官方文档,以了解有关 innodb_buffer_pool_size 的更多信息。

  4. 调整块大小:如果您可以控制 InnoDB 缓冲池的块大小,您可以尝试调整它以匹配您想要设置的总体大小。但请注意,这通常需要在 MySQL 服务器初始化时设置,并且可能涉及到更多的配置和潜在的风险。

最后,始终在更改任何生产环境中的配置之前备份您的数据和配置文件,并在测试环境中验证更改的影响。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
搭建mysqlCluster,在增加节点的时候没有clone模式,只能选择增量覆盖 ,我是用的mysql5.7
回答 1
你确定你里面贴的图是你的在MySQL5.7上搞的吗?MySQL克隆是在8.0.17之后才有的,需要安装mysqlclone.so插件,之前都是通过全量备份或者copy的方式整的。
mysql访问本地数据库是否会走网卡
回答 1
这里有两个缘由:一是mysql连接本机的话,可能走socket途径而非网卡(应该不是你遇到的问题)二是在默认情况下,wireshark是抓不到本地流量的,可以参考https://www.cnblogs
MySQL有外键约束,能不能跳过约束直接删除从表再删主表?
回答 1
已采纳
外键约束的删除流程 就是 先删除从表,再删除主表啊。如果要跳过从表直接删除主表的话。 要看外键规则,但不建议这么干。常规做法是不在数据库做主外键约束,而在应用中做。
MySQL无法正常启动,日志错误如下
回答 5
那你关闭的时候不是干净关闭的?有事务需要recover,如果想启动数据库的话,设置参数innodbforcerecovery6,不执行recover操作,启动以后把数据导出来,重建数据库把。
MySQL 分区有哪些不同类型?
回答 1
已采纳
水平和垂直MySQL分区是用于将表划分为较小部分的技术,以提高性能和管理。水平分区将表拆分为具有相同列但不同行的较小表,而垂直分区将表分为具有相关列的单独表。各种分区类型(例如RANGE、LIST、H
MYSQL 是否有锁设置并发更新数?
回答 1
innodbthreadconcurrency,如果设置为0,则表示不限制,mysql数据库服务器会尽可能地处理请求非0的话,表示并发数,建议设置小于等于cpu核数;
如何确定一个事务是否已经落盘
回答 2
已采纳
<aid"SHOWENGINEINNODBSTATUSGlog0"SHOWENGINEINNODBSTATUS\G中的log部分LOGLogsequencenumber74132299Logbuffe
请教使用ogg同步mysql数据到kafka的问题
回答 1
我理解下来:配置extract里直接指定mysqlbin.index就可以了。mysqlbin.index记录着binlog文件的路径,自动回去抽取。并保存相关信息
如何解散mysql InnoDB ClusterSet
回答 2
已采纳
InnoDBCluster(之前称为MySQLGroupReplication)是一种高可用性解决方案,用于MySQL数据库。解散或清除InnoDBClusterSet信息通常涉及以下步骤:1.停止所
mysql 异地恢复的时候报错:failed to initialize bultin plugins
回答 1
这个我昨天好像刚见过。是检查cnf文件。这个idbdata的是不是有两行?配置重复了
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~