所以我对调整 InnoDB 还是很陌生。我正在慢慢地将表(如有必要)从 MyIsam 更改为 InnoDB。我在 innodb 中有大约 100MB,所以我将innodb_buffer_pool_size
变量增加到 128MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
当我去更改innodb_log_file_size
值时(例如mysql的innodb配置页面上的my.cnf注释将日志文件大小更改为缓冲区大小的25%。所以现在我的my.cnf看起来像这样:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
当我重新启动服务器时,我收到此错误:
110216 9:48:41 InnoDB:正在初始化缓冲池,大小 = 128.0M
110216 9:48:41 InnoDB:已完成缓冲池
InnoDB 的初始化:错误:日志文件 ./ib_logfile0 的大小不同 0 5242880 字节
InnoDB:比在.cnf 文件 0 33554432 字节!
110216 9:48:41 [错误] 插件“InnoDB”初始化函数返回错误。
110216 9:48:41 [错误] 插件“InnoDB”注册为存储引擎失败。
所以我的问题是:删除旧的 log_files 是否安全,或者是否有另一种方法来更改innodb_log_file_size
变量?
是的,一旦 mysqld 关闭,删除日志文件是安全的
鉴于此,只需执行以下步骤:
启动 mysqld 将重新创建
ib_logfile0
和ib_logfile1
试试看 !!!
更新 2011-10-20 16:40 EDT
它在重做日志文件之前干净地分页出 InnoDB 缓冲池中的所有数据,您应该在关闭前大约 1 小时设置此选项:
默认情况下,innodb_max_dirty_pages_pct为 75(MySQL 5.5+)或 90(MySQL 5.5 之前)。将此设置为零可使脏页数保持在 InnoDB 缓冲池的 1% 以下。
service mysql stop
无论如何,表演都会这样做。此外,关闭将完成重做日志中的所有剩余项目。要保留此选项,只需将其添加到 /etc/my.cnf:更新 2013-04-19 16:16 EDT
我用innodb_fast_shutdown更新了我的答案,因为我曾经重新启动 mysql 并停止 mysql 来执行此操作。现在,这一步至关重要,因为每个未提交的事务都可能在 InnoDB 事务日志内部和外部有其他移动部分(请参阅 InnoDB 基础设施)。
请注意,将innodb_fast_shutdown设置为 2 也会清除日志,但仍然存在更多移动部件,并在 mysqld 启动期间在崩溃恢复中被选中。最好设置为 0。
我会推荐官方方法,为方便起见,我在这里复制:
innodb_buffer_pool_size
-- 只需更改my.cnf
(my.ini
) 并重新启动 mysqld。innodb_log_file_size
不太重要。除非有理由,否则不要更改它。罗兰提供了步骤,但有一个方面让我担心……我不知道前两个步骤是否重要;看起来他们可能是:set innodb_fast_shutdown = OFF
日志文件跟踪未完成的业务;" " 表示重启后
innodb_fast_shutdown
处理那些东西。所以删除文件可能会丢失信息?新版本改进了一些东西:( 更多讨论在评论中)
innodb_log_file_size
> 4GBinnodb_log_file_size
可以在不先删除 iblog 的情况下更改*innodb_buffer_pool_size
我应该更改 log_file_size 吗?
用于
GLOBAL STATUS
计算日志周期之前的分钟数。如果它远小于60(分钟),那么增加 log_file_size 可能会有所帮助。如果更多,则日志文件正在浪费磁盘空间。那个“1 小时”是相当随意的,所以如果你接近它,不要费心改变 log_file_size。
保留
innodb_log_files_in_group
默认值 2。当您登录到 mysql 时,键入这些命令:
你会得到两个数字。首先你得到一个,然后等待一分钟。你会得到另一个。
假设第一个是 3.456.718.123,第二个是 4.098.873.134
现在 (4.098.873.134-3.856.718.123)*60/1024/1024
结果是 = 13.856 MB
您有两个日志文件。所以将它除以 2,你会得到一个接近 7.000 MB 的数字。可以肯定的是,将您的日志文件大小设置为 8GB
chown mysql:mysql -R /etc/mysql /var/lib/mysql && cd /var/lib/mysql && rm -f ib_logfile* && service mysql restart || 服务mysql重启
试试看,保证可以工作 [在 Debian 6 上测试]