如何解决如何安全地更改 MySQL innodb 变量“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_logfile0
和ib_logfile1
试试看 !!!
它在重做日志文件之前干净地分页出 InnoDB 缓冲池中的所有数据,您应该在关闭前大约 1 小时设置此选项:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
默认情况下,为 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
更新了我的答案,因为我曾经重新启动 mysql 并停止 mysql 来执行此操作。现在,这一步至关重要,因为每个未提交的事务都可能在 InnoDB 事务日志内部和外部有其他移动部分()。
请注意,将设置为 2 也会清除日志,但仍然存在更多移动部件,并在 mysqld 启动期间在崩溃恢复中被选中。最好设置为 0。
解决方法
所以我对调整 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: Initializing buffer pool,size = 128.0M
110216 9:48:41 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 33554432 bytes!
110216 9:48:41 [ERROR] Plugin ‘InnoDB’ init function returned error.
110216 9:48:41 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
所以我的问题是:删除旧的 log_files 是否安全,或者是否有另一种方法来更改innodb_log_file_size
变量?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。