我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解MySQL如何使用离线模式维护服务器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解MySQL如何使用离线模式维护服务器

离线模式

作为 DBA,最常见的任务之一就是批量处理 mysql 服务的启停或其他一些活动。在停止 MySQL 服务前,我们可能需要检查是否有活动连接;如果有,我们可能需要把它们全部杀死。通常,我们使用 pt-kill 杀死应用连接或使用 SELECT 语句查询准备杀死语句。例如:

pt-kill --host=192.168.11.11 --user=percona -p --sentinel /tmp/pt-kill.sentinel2 --pid /tmp/pt-kill.pid --victims all --match-command 'Query' --ignore-user 'pmm|rdsadmin|system_user|percona' --busy-time 10 --verbose --print --kill
select concat('kill ',id,';') from information_schema.processlist where user='app_user';

MySQL 有一个名为 offline_mode 的变量来将服务器设置为维护模式。设置此选项后,它会立即断开所有不具有 SYSTEM_VARIABLES_ADMIN 和 CONNECTION_ADMIN 权限的客户端连接,并且不允许新连接,除非用户拥有这些权限。如果您手动终止连接或使用 pt-kill,则无法避免新连接的创建。但通过使用这种模式,我们可以避免新的连接。这是一个全局动态变量,我们可以在服务器运行时设置此模式。

启用 offline_mode

要启用 offline_mode,用户帐户必须具有 SYSTEM_VARIABLES_ADMIN* 权限和 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限,它涵盖了这两个权限)。CONNECTION_ADMIN 从 MySQL 8.0.31 开始是必需的,并建议在所有版本中使用,以防止意外锁定。让我们测试一下。

要对此进行测试,请创建一个新用户 app_user,该用户仅具有 DDL/DML 权限。

mysql> create user app_user identified by 'App@!234TEst';
Query OK, 0 rows affected (0.20 sec)
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP , REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE,CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE on *.* to app_user;
Query OK, 0 rows affected (0.00 sec)

使用 aap_user 用户启动 sysbench 工具

[root@Centos12 vagrant]# sysbench /usr/share/sysbench/oltp_read_write.Lua --threads=10 --time=100? --mysql-db=sysbench --mysql-user=app_user --mysql-password='App@!234TEst' run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 10
Initializing random number generator from current time
Initializing worker threads...
mysql> show processlist;
+----+-----------------+---------------------+----------+-------------+------+-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined |
+----+-----------------+---------------------+----------+-------------+------+-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------+-----------+---------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 2151 | Waiting for next activation | NULL | 2151034 | 0 | 0 |
| 9 | bhuvan | 192.168.33.11:50642 | NULL | Binlog Dump | 2102 | Source has sent all binlog to replica; waiting for more updates | NULL | 2102317 | 0 | 0 |
| 14 | bhuvan | localhost | NULL | Query | 0 | init | show processlist | 0 | 0 | 0 |
| 20 | app_user | localhost | sysbench | Execute | 0 | waiting for handler commit | COMMIT | 11 | 0 | 0 |
| 21 | app_user | localhost | sysbench | Execute | 0 | updating | DELETE FROM sbtest1 WHERE id=5000 | 6 | 0 | 0 |
| 23 | app_user | localhost | sysbench | Execute | 0 | waiting for handler commit | COMMIT | 8 | 0 | 0 |
| 24 | app_user | localhost | sysbench | Execute | 0 | waiting for handler commit | COMMIT | 18 | 0 | 0 |
| 25 | app_user | localhost | sysbench | Execute | 0 | updating | UPDATE sbtest1 SET c='99153469917-25523144931-18125321038-96151238215-88445737418-14906501975-136014 | 13 | 0 | 0 |
| 27 | app_user | localhost | sysbench | Execute | 0 | waiting for handler commit | COMMIT | 7 | 0 | 0 |
| 28 | app_user | localhost | sysbench | Execute | 0 | statistics | SELECT c FROM sbtest1 WHERE id=5003 | 0 | 0 | 0 |
| 29 | app_user | localhost | sysbench | Execute | 0 | updating | UPDATE sbtest1 SET c='84180675456-88426921120-90373546373-84823361786-77912396694-08592771856-912331 | 13 | 0 | 0 |
+----+-----------------+---------------------+----------+-------------+------+-----------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------+-----------+---------------+
13 rows in set (0.00 sec)

当 sysbench 运行时,设置 offline_mode=ON,来自 sysbech with Sysbench") 的所有连接都将被终止。您将在 sysbench 中看到错误。

mysql> select @@offline_mode;
+----------------+
| @@offline_mode |
+----------------+
| 0 |
+----------------+
1 row in set (0.15 sec)
mysql> set global offline_mode=1;
Query OK, 0 rows affected (0.15 sec)
mysql> show processlist;
+----+-----------------+---------------------+------+-------------+------+-----------------------------------------------------------------+------------------+---------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined |
+----+-----------------+---------------------+------+-------------+------+-----------------------------------------------------------------+------------------+---------+-----------+---------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 2178 | Waiting for next activation | NULL | 2178008 | 0 | 0 |
| 9 | bhuvan | 192.168.33.11:50642 | NULL | Binlog Dump | 2129 | Source has sent all binlog to replica; waiting for more updates | NULL | 2129291 | 0 | 0 |
| 14 | bhuvan | localhost | NULL | Query | 0 | init | show processlist | 0 | 0 | 0 |
+----+-----------------+---------------------+------+-------------+------+-----------------------------------------------------------------+------------------+---------+-----------+---------------+
3 rows in set (0.01 sec)

如果您在 offline_mode=1 时尝试使用 app_user 连接数据库,它将不允许连接并收到一条错误消息,表明服务器当前处于离线模式。这个 offline_mode 不会影响复制。可以看到上面的 processlist 日志,当我们设置 offline_mode=1 时,复制线程并没有断开。要禁用 offline_mode,请将值设置为 0。

mysql> set global offline_mode=0;
Query OK, 0 rows affected (0.00 sec)

结论

offline_mode 是将服务器置于维护模式的一个不错的选择。只需确保应用程序用户没有管理员权限,只有管理员有。我们可以在以下情况下使用 offline_mode

  • 在将数据库服务器取出进行维护或其相关活动之前,请在配置文件中进行更改并保持此模式,直到所有活动完成。
  • 在从服务器进行备份时,我们可以设置这个 offline_mode,以避免服务器的负载,使备份速度更快。
  • 如果由于大量查询而导致副本上出现大量复制,我们可以设置此模式,直到复制与主服务器同步。
  • 当您想立即终止所有应用程序连接时。

译自:https://www.percona.com/blog/mysql-offline-mode-to-disconnect...

以上就是MySQL 如何使用离线模式维护服务器的详细内容,更多关于MySQL 如何使用离线模式维护服务器的资料请关注编程客栈(www.cppcns.com)其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解MySQL如何使用离线模式维护服务器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解MySQL如何使用离线模式维护服务器

目录离线模式启用 offline_mode使用 aap_user 用户启动 sysbench 工具结论离线模式作为 DBA,最常见的任务之一就是批量处理 mysql 服务的启停或其他一些活动。在停止 MySQL 服务前,我们可能需要检查是
2023-10-11

详解如何使用C++写一个线程安全的单例模式

这篇文章主要为大家详细介绍了如何使用C++写一个线程安全的单例模式,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2022-11-13

如何使用ssh离线下载远程服务器全部内容

小编给大家分享一下如何使用ssh离线下载远程服务器全部内容,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!我们可以用下面的命令达到我们的目的。 wget -nH --cut-dirs=* -m --ftp-user=* --
2023-06-13

腾讯云服务器如何使用登录方式设置密码保护

一、在腾讯云服务器上设置密码保护登录信息的设置:登录信息是用户登录腾讯云服务器时需要输入的信息,包括用户名、密码和验证码。这些信息需要保密,以确保登录信息不会被恶意篡改或盗取。可以在用户注册或登录时,提供这些登录信息给腾讯云服务器进行保护。登录方式的设置:腾讯云服务器支持多种登录方式,如使用QQ或微信进行登录,使用HT
腾讯云服务器如何使用登录方式设置密码保护
2023-10-28

腾讯云服务器如何使用登录方式设置密码保护手机

在创建SSH密钥时,我们需要输入当前登录者的公钥信息,并将其保存在本地。如果对方没有公钥,则无法使用该密钥登录服务器。在绑定密钥之后,我们就可以使用登录方式设置密码保护手机,这样我们就可以通过手机短信验证码的方式来设置和获取手机的SSH密钥,以及通过USBKey的方式来解锁设备。
2023-10-27

腾讯云服务器如何使用登录方式设置密码保护功能

首先,在腾讯云服务器的控制台上打开“登录/注销”功能。在登录页面输入您要登录的用户名和密码,点击“登录”按钮。如果您想要更改默认的登录密码,请选择“更改密码”选项。在输入框中输入您的新密码,然后点击“确认”按钮。您的新密码将替换原始密码,并与您设置的密码匹配。如果您输入的密码包含数字、特殊字符或符号,系统将自动为您生成
腾讯云服务器如何使用登录方式设置密码保护功能
2023-10-28

如何解决MySQL报错:MySQL服务器正在使用--skip-locking选项运行

要解决MySQL报错“MySQL服务器正在使用--skip-locking选项运行”,可以按照以下步骤进行操作:1. 首先,停止MySQL服务器的运行。可以使用命令行或控制面板来停止MySQL服务。2. 找到MySQL的配置文件my.cnf
2023-10-10

如何解决MySQL报错:MySQL服务器正在使用--skip-grant-tables选项运行

在MySQL服务器运行时使用了--skip-grant-tables选项,意味着跳过了用户验证的步骤,任何人都可以访问数据库。这种情况下,可以按照以下步骤来解决问题:1. 停止MySQL服务器:使用适当的命令停止MySQL服务器,具体命令取
2023-10-12

The MySQL server is running with the --skip-locking option - 如何解决MySQL报错:MySQL服务器正在使用--skip-locking选

MySQL是一种开源的关系型数据库管理系统,广泛应用于各种大型网站和应用程序中。然而,在使用MySQL时,有时候会遇到一些错误和问题。其中之一就是MySQL报错:MySQL服务器正在使用--skip-locking选项运行。当出现这个错误时
2023-10-21

The MySQL server is running with the --skip-locking option - 如何解决MySQL报错:MySQL服务器正在使用--skip-locking选

如何解决MySQL报错:MySQL服务器正在使用--skip-locking选项运行,需要具体代码示例MySQL是一种开源的关系型数据库管理系统,广泛应用于各种大型网站和应用程序中。然而,在使用MySQL时,有时候会遇到一些错误和问题。其中
2023-10-22

The MySQL server is running with the --skip-grant-tables option - 如何解决MySQL报错:MySQL服务器正在使用--skip-gra

引言:MySQL是广泛使用的开源关系型数据库管理系统。在使用MySQL时,有时可能会遇到报错,其中一个常见问题是“MySQL服务器正在使用--skip-grant-tables选项运行”。这个错误可能会导致用户无法访问数据库。在本文中,我们
2023-10-21

The MySQL server is running with the --skip-grant-tables option - 如何解决MySQL报错:MySQL服务器正在使用--skip-gra

如何解决MySQL报错:MySQL服务器正在使用--skip-grant-tables选项运行,需要具体代码示例引言:MySQL是广泛使用的开源关系型数据库管理系统。在使用MySQL时,有时可能会遇到报错,其中一个常见问题是“MySQL服务
2023-10-22

使用windows service 2012云服务器搭建mysql时缺少msvcr100.dll文件如何解决

使用windows service 2012云服务器搭建mysql时缺少msvcr100.dll文件如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。解决方
2023-06-06

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号,并申请学生认证(学生认证有优惠,如果不是学生可以忽略此点)2.2 算力市场选择GPU,并选择初始化配置环境2.3 控制台参数解析,并使用相关参
2023-08-30

如何解决 MySQL 错误“您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解要使用的正确语法?”

为了避免MySQL存储过程中出现此类错误,需要更改分隔符;到//。假设如果您正在使用存储过程或触发器甚至函数,那么您需要更改分隔符。语法如下。DELIMITER //CREATE PROCEDURE yourProcedureName()B
2023-10-22

编程热搜

目录