增加innodb_buffer_pool_size和innodb_log_file_size后,mysql将无法启动


18

我在这里遵循此解决方案/programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261并尝试将其增加到innodb_buffer_pool_size4G和更高的1G(也为1024M)除了日志文件的大小,但mysql不会以这些值开头。如果我把它放回512M,mysql启动正常。

我该如何解决?我的服务器是16GB,根据Webmin sysinfo的说法:

Real memory 15.62 GB total, 3.13 GB used

同时,我也找到了错误日志:

120529 10:29:32 mysqld_safe mysqld从pid文件/var/run/mysqld/mysqld.pid结束

120529 10:29:33 mysqld_safe使用/ var / lib / mysql中的数据库启动mysqld守护程序

120529 10:29:33 [注意]插件“ FEDERATED”已禁用。

120529 10:29:33 InnoDB:InnoDB内存堆已禁用

120529 10:29:33 InnoDB:互斥体和rw_locks使用GCC原子内置函数

120529 10:29:33 InnoDB:压缩表使用zlib 1.2.3

120529 10:29:33 InnoDB:使用Linux本机AIO

120529 10:29:33 InnoDB:初始化缓冲池,大小= 1.0G

120529 10:29:33 InnoDB:缓冲池的完成初始化

InnoDB:错误:日志文件./ib_logfile0的大小不同0 134217728字节

InnoDB:比.cnf文件中指定的0 268435456字节!


您能为您分享错误日志吗?
Abdul Manaf 2012年

谢谢,我设法找到了它。我认为这会更容易。最初我还应该增加日志文件的大小,以匹配缓冲池的增加(我现在确实添加了此信息)。
giorgio79

好吧@ giorgio79 ...
Abdul Manaf

尝试删除日志文件。
dezso 2012年

您是否首先删除了日志文件大小?您是否首先删除了所有数据库?请添加有关您的具体操作的更多信息?
ALH 2012年

Answers:


19

@RickJames@drogart给出的两个答案实质上是补救措施。(每个+1)。

在您显示的错误日志中,最后两行显示:

InnoDB:错误:日志文件./ib_logfile0的大小不同0 134217728字节

InnoDB:比.cnf文件中指定的0 268435456字节!`

到那时,很明显,您将innodb_log_file_size设置为256M(268435456),my.cnf而每个InnoDB事务日志(ib_logfile0ib_logfile1)分别为128M(134217728)。回顾问题指向我的StackOverflow答案链接,您必须执行以下操作:

步骤01)将其添加到my.cnf

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

步骤02)在操作系统中运行这些命令

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

为了对正在发生的事情有信心,请tail -f针对错误日志运行。您将看到一条消息,告诉您何时创建每个innodb日志文件。


谢谢,是的,我没有先删除它们。只是想看看mysql的行为。执行完第3步后,重新启动起作用。
giorgio79

1
我认为不应删除日志文件,而应将它们移到其他位置,并在成功更改日志文件大小后再删除它们。否则,如果在运行之前MySQL崩溃了,您将有麻烦service mysqld stop
KajMagnus

4

根据日志中的错误,我猜您是这样做的:

  • 关闭mysql
  • 编辑my.cnf以更改innodb日志文件的大小
  • 试图启动mysql(然后失败)

如果更改日志文件的大小,则需要删除旧的日志文件。如果现有文件与配置文件中指定的大小不匹配,Innodb将无法成功启动。如果将它们移到其他地方,innodb将在启动时创建正确大小的新事务日志文件。

我建议将旧文件移动到另一个目录,而不是仅仅删除它们,直到服务器启动并运行新的日志文件,并且一切正常为止。


3

如果仅运行InnoDB ,则应该将buffer_pool设置为可用 RAM的大约70%。

日志大小并不重要。最佳设置是将其设置为(正常运行时间* innodb_log_file_size / Innodb_os_log_write)大约为 3600(1小时)。

要更改日志大小,必须

  1. 干净地关闭mysqld
  2. 删除my.cnf(my.ini)中的值
  3. 删除日志文件
  4. retstart-将重建新的日志文件。

谢谢,是的,这也是一个正确的答案。我只能接受一个。也为此+1了。
giorgio79

1

您为缓冲池大小提供的值中也可能存在一些问题。就像我的情况一样

当增加或减少时innodb_buffer_pool_size,将按块执行操作。块大小由innodb_buffer_pool_chunk_size配置选项定义,默认为128M。有关更多信息,请参见配置InnoDB缓冲池块大小

缓冲池大小必须始终等于或的倍数innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances。如果您配置innodb_buffer_pool_size的值不等于或大于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances,则缓冲池大小会自动调整为等于或大于等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances指定的缓冲池大小的整数。

在示例中,innodb_buffer_pool_size设置为8G,并且innodb_buffer_pool_instances设置为16。innodb_buffer_pool_chunk_size是128M,这是默认值。

8G是有效值,innodb_buffer_pool_size因为8G是的倍数innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M,即2G。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.