我在这里关注此解决方案https://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261并尝试将我innodb_buffer_pool_size
的速度增加到 4G 和更高的 1G(也是 1024M)除了日志文件大小之外,mysql 不会以这些值开头。如果我把它放回 512M mysql 启动就好了。
我该如何解决这个问题?我的服务器是 16GB 的,根据 Webmin sysinfo:
Real memory 15.62 GB total, 3.13 GB used
同时我也发现了错误日志:
120529 10:29:32 来自 pid 文件 /var/run/mysqld/mysqld.pid 的 mysqld_safe mysqld 结束
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 atomic builtins
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 字节!
@RickJames和@drogart给出的两个答案本质上是补救措施。(每个+1)。
从您提供的错误日志中,最后两行说:
那时,很明显您将innodb_log_file_size设置为 256M (268435456),
my.cnf
而 InnoDB 事务日志 (ib_logfile0
,ib_logfile1
) 分别为 128M (134217728)。回顾您问题中我的 StackOverflow 答案的链接,您必须执行以下操作:步骤 01) 将此添加到
my.cnf
:步骤 02) 在操作系统中运行这些命令
为了对正在发生的事情有信心,
tail -f
请针对错误日志运行。您将看到消息告诉您何时创建每个 innodb 日志文件。根据日志中的错误,我猜你是这样做的:
如果更改日志文件大小,则需要删除旧的日志文件。如果现有文件与配置文件中指定的大小不匹配,Innodb 将无法成功启动。如果你将它们移到别处,innodb 将在启动时创建正确大小的新事务日志文件。
我建议将旧文件移动到另一个目录而不是仅仅删除它们,直到服务器启动并使用新日志文件运行并且一切看起来都正常。
如果你只运行 InnoDB ,buffer_pool 应该设置为可用RAM 的 70% 左右。
日志大小无关紧要。最佳设置是使 (Uptime * innodb_log_file_size / Innodb_os_log_written)大约为3600(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 是一个有效值,因为 8G是 2G
innodb_buffer_pool_size
的倍数。innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M
问题很可能与您选择增加日志的大小有关。
在我的示例中,Confluence 建议使用 2GB 的日志大小,但是当我进行此更改时,即使我删除了旧的日志文件,服务也不会启动。我将其减小到 1GB,并且服务开始时没有任何问题......