因此,我对调整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 值(例如my.cnf on MySQL的InnoDB配置页面 注释以将日志文件大小更改为缓冲区大小的25%。所以现在我的.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'init函数返回错误。
110216 9:48:41 [错误]插件'Innodb'注册为存储引擎失败。

所以我的问题是:删除旧的log_files是安全的吗,还是有另一种方法可以更改 innodb_log_file_size 多变的?

有帮助吗?

解决方案

是的,一旦MySQLD关闭,可以安全地删除日志文件

鉴于此,只需执行以下步骤:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

启动mysqld将重新创建 ib_logfile0ib_logfile1

试试看 !!!

更新2011-10-20 16:40 EDT

它在重做日志文件之前,它在InnoDB缓冲区池中清洁了所有数据,您应该在关闭前约1小时设置此选项:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

默认, innodb_max_dirty_pages_pct 为75(MySQL 5.5+)或90(MySQL 5.5之前)。将其设置为零,可将脏页的数量保持在InnoDB缓冲池的1%以下。表演 service mysql stop 还是这样做。此外,关闭将完成重做日志中的所有剩余项目。要保留此选项,只需将其添加到/etc/my.cnf:

[mysqld]
innodb_max_dirty_pages_pct = 0

更新2013-04-19 16:16 EDT

我更新了答案 innodb_fast_shutdown 因为我曾经重新启动mySQL并停止mySQL来执行此操作。现在,这一单步是至关重要的,因为每个事务都可能在InnoDB交易日志内外都有其他活动部件(参见InnoDB基础架构).

请注意设置 innodb_fast_shutdown 到2也将清理登录,但在MySQLD的启动期间仍然存在更多的活动部件,并在崩溃恢复时被选中。设置为0是最好的。

其他提示

我会推荐 官方方法, ,为了方便起见,我在这里复制了:

更改InnoDB日志文件的数字或大小 MySQL 5.6.7或更早, ,使用以下说明。使用的过程取决于Innodb_fast_shutdown的值,该值决定是否在关闭操作之前将系统表空间完全最新出现:

  • 如果未将Innodb_fast_shutdown设置为2:停止MySQL Server并确保它在没有错误的情况下关闭,以确保在重做日志中没有出色交易的信息。将旧的重做日志文件复制到一个安全的地方,以防停机期间出现问题,您需要它们恢复表空间。从日志文件目录中删除旧日志文件,编辑my.cnf以更改日志文件配置,然后再次启动mySQL Server。 MySQLD认为在启动时不存在InnoDB日志文件,并创建了新文件。

  • 如果Innodb_fast_shutdown设置为2:将Innodb_fast_shutdown设置为1:

mysql> SET GLOBAL innodb_fast_shutdown = 1;

然后按照上一项中的说明进行操作。

从MySQL 5.6.8开始, ,在更改InnoDB日志文件的数字或大小时,Innodb_fast_shutdown设置不再相关。此外,您不再需要删除旧日志文件,尽管您可能仍希望将旧日志文件复制到安全的位置,作为备份。要更改InnoDB日志文件的数量或大小,请执行以下步骤:

  1. 停止MySQL Server,并确保其关闭而不会错误。

  2. 编辑my.cnf以更改日志文件配置。要更改日志文件大小,请配置Innodb_log_file_size。要增加日志文件的数量,请配置Innodb_log_files_in_group。

  3. 再次启动MySQL Server。

如果InnoDB检测到Innodb_log_file_size与重做日志文件大小有所不同,它将编写日志检查点,关闭并删除旧日志文件,在请求的大小上创建新的日志文件,然后打开新的日志文件。

innodb_buffer_pool_size - 只需更改 my.cnf (my.ini)并重新启动mysqld。

innodb_log_file_size 不太关键。除非有理由,否则不要更改它。罗兰 提供了步骤, ,但是一个方面让我担心...我不知道前两个步骤是否重要;似乎他们可能是:

  1. set innodb_fast_shutdown = OFF
  2. 重新启动mysql
  3. 停止mysql
  4. 删除日志文件
  5. 启动mysql

日志文件跟踪未完成的业务; “innodb_fast_shutdown说要处理这些东西 重新启动。因此,删除文件可能会丢失信息?

新版本改进了事物: (评论中的更多讨论)

  • 5.6允许 innodb_log_file_size > 4GB
  • 5.6 innodb_log_file_size 可以在不先删除IBLOG*的情况下更改*
  • 5.7允许动态调整大小 innodb_buffer_pool_size

我应该更改log_file_size吗?

利用 GLOBAL STATUS 计算对数周期前的分钟数。

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

如果有很多 较少的 超过60(分钟),然后可能有助于增加log_file_size。如果更多,则日志文件将浪费磁盘空间。 “ 1小时”是相当任意的,因此,如果您接近它,请不要打扰更改log_file_size。

离开 innodb_log_files_in_group 默认为2。

当您登录MySQL时,键入这些命令:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

您将获得两个数字。首先,您得到一个,然后等待一分钟。你会得到另一个。

说第一个是3.456.718.123,第二个是4.098.873.134

现在(4.098.873.134-3.856.718.123)*60/1024/1024

结果是= 13.856 MB

您有两个日志文件。因此,将其除以两个,您将获得接近7.000 MB的数字。为了确保,设置日志文件大小8GB

chown mysql:mysql -r/etc/mysql/mysql/var/lib/mysql && cd/var/lib/mysql && rm -f ib_logfile* &&服务mysql restart ||服务MySQL重新启动

尝试一下,保证可以工作[对Debian 6进行了测试

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top