参数描述
从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账户创建新的连接
- 备库复制线程不会被中断
使用场景
- 数据库升级前的杀会话情况
- 业务变更前的杀会话情况
- 数据迁移前的杀会话情况
- 其他需要杀会话或者断开当前用户连接的一切场景
- 替代kill命令
- 数据库升级前的杀会话情况
- 业务变更前的杀会话情况
- 数据迁移前的杀会话情况
- 其他需要杀会话或者断开当前用户连接的一切场景
- 替代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
官方文档描述
5.7版本:
8.0版本:
8.1版本:
参考文档
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
https://dev.mysql.com/doc/refman/8.1/en/server-system-variables.html