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

  如果InnoDB_buffer_size参数很大,缓冲区内的脏数据太多,那么关闭MySQL的时候
  必须把脏数据刷新到磁盘,这个过程有可能是很漫长的,从而导致关闭MySQL服务的时间过长。
  可以临时设置innodb_max_dirty_pages_pct=0,然后等到脏数据大部分都刷新到磁盘后(通过查看显示引擎innodb状态命令输出中数据库的修改页面,这个值应该很小),再手动关闭数据库。
  方法1:
  mysql>设定全球innodb_max_dirty_pages_pct=0;
  查询好,0行影响(0.00秒)
  
  
  运行命令mysqladmin -uroot ext i10 | grep脏,检查状态变量值,等到它接近0的时候关闭它,如果是生产繁忙的系统,这个值可能会一直偏大,待innodb_max_dirty_pages的值很小时,就可以
  用mysqladmin关闭MySQL了。
  
  
  # mysqladmin -uroot ext i10 | grep脏
  | 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>设定全球innodb_fast_shutdown=2;,默认为1
  查询好,0行影响(0.00秒)
  
  虽然这样可以快速关闭mysql,但启动时候需要执行更多的恢复操作。
  
  
  Innodb_fast_shutdown三个值的含义:
  Innodb_fast_shutdown告诉innodb在它关闭的时候该做什么工作。有三个值可以选择:
  0表示在innodb关闭的时候,需要清洗,合并插入缓冲,冲洗脏页。这是最慢的一种关闭方式,但是重启的时候也是最快的。后面将介绍清洗,脏页合并插入缓冲,冲洗这三者的含义。
  1表示在innodb关闭的时候,它不需要清洗,合并插入缓冲区,只需要冲洗脏页。
  2表示在innodb关闭的时候,它不需要清洗,合并插入缓冲,也不进行冲洗肮脏的页面,只将日志缓冲区里面的日志冲到日志文件。因此等下进行恢复的时候它是最耗时的。
     

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