ITPub博客

在数据库繁忙时如何快速有效的关闭MySQL服务

原创 MySQL 作者:chenfeng 时间:2018-04-08 12:31:44 0 删除 编辑
如果InnoDB_buffer_size参数很大,缓冲区内的脏数据太多,那么关闭MySQL的时候
必须把脏数据刷新到磁盘,这个过程有可能是很漫长的,从而导致关闭MySQL服务的时间过长。
可以临时设置innodb_max_dirty_pages_pct=0,然后等到脏数据大部分都刷新到磁盘后(通过查看show engine innodb status命令输出中的Modified db pages,这个值应该很小),再手动关闭数据库。
方法1:
mysql>set global innodb_max_dirty_pages_pct=0;
Query OK, 0 rows affected (0.00 sec)


运行命令mysqladmin -uroot ext -i10 |grep dirty,检查状态变量值,等到它接近0的时候关闭它,如果是生产繁忙的系统,这个值可能会一直偏大,待innodb_max_dirty_pages的值很小时,就可以
用mysqladmin关闭MySQL了.


# mysqladmin -uroot ext -i10 |grep dirty
| Innodb_buffer_pool_pages_dirty                | 0                                                |
| Innodb_buffer_pool_bytes_dirty                | 0                                                |
| Innodb_buffer_pool_pages_dirty                | 0                                                |
| Innodb_buffer_pool_bytes_dirty                | 0



方法2:

mysql>set global innodb_fast_shutdown=2;  默认为1
Query OK, 0 rows affected (0.00 sec)

虽然这样可以快速关闭mysql,但启动时候需要执行更多的恢复操作.


Innodb_fast_shutdown三个值的含义:
Innodb_fast_shutdown告诉innodb在它关闭的时候该做什么工作。有三个值可以选择:
0表示在innodb关闭的时候,需要purge all, merge insert buffer,flush dirty pages。这是最慢的一种关闭方式,但是restart的时候也是最快的。后面将介绍purge all,merge insert buffer,flush dirty pages这三者的含义。
1表示在innodb关闭的时候,它不需要purge all,merge insert buffer,只需要flush dirty page。
2表示在innodb关闭的时候,它不需要purge all,merge insert buffer,也不进行flush dirty page,只将log buffer里面的日志flush到log files。因此等下进行恢复的时候它是最耗时的。

请登录后发表评论 登录
全部评论
交流MySQL,MongoDB和Redis技术。 微信或QQ:410294

注册时间:2015-12-07

  • 博文量
    648
  • 访问量
    1361869