参数描述

  从MySQL 5.7 版本开始增加了offline_mode 离线模式参数,以便于数据库管理员的升级维护工作,在以往运维过程中,遇到升级迁移切换等维护工作时,通常我们常规办法需要将用户连接杀掉,也可以使用pt-kill 工具来杀会话:

select concat('kill ',id,';') from information_schema.processlist where user='app_user';

--或者使用percona pt-kill工具
pt-kill --host=127.0.0.1 --user=xxx --password=xxxxxx --port=xxxx --busy-time 10 --match-command="Query" --victim all --interval 10 --kill --log=/tmp/pt_kill.log

参数影响

  • 在设置成离线模式后,非SUPER账户的会话会被断开(相当于执行了kill session操作)
  • SUPER账户能够保持连接,并可以通过SUPER账户创建新的连接
  • 备库复制线程不会被中断

使用场景

  1. 数据库升级前的杀会话情况
  2. 业务变更前的杀会话情况
  3. 数据迁移前的杀会话情况
  4. 其他需要杀会话或者断开当前用户连接的一切场景
  5. 替代kill命令

 再有维护操作需求就不用这么麻烦了。只需在线动态修改参数offline_mode即可,可立即生效,非常的简单粗暴。

测试验证

mysql> set global offline_mode = on;  -- 开启离线模式,拒绝连接请求
mysql> set global offline_mode = off; -- 关闭离线模式(默认关闭),允许连接请求

开启离线模式后,新用户或者会话无法访问数据库
# mysql -uroot -pmysql -h 192.168.1.1 -P 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3032 (HY000): The server is currently in offline mode

说明:正在运行的SQL也会被终并断开连接
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
ERROR 3032 (HY000): The server is currently in offline mode
ERROR:
Can't connect to the server