A script to set mysql gtid-mode off by tortoise-orm

news/2025/11/22 22:38:21/文章来源:https://www.cnblogs.com/waketzheng/p/19258776
  • mysql_gtid.py
from __future__ import annotationsimport asyncio
import contextlib
import os
import sys
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanagerfrom tortoise import BaseDBAsyncClient, connections
from tortoise.backends.base.config_generator import expand_db_url
from tortoise.exceptions import OperationalError@asynccontextmanager
async def tortoise_context() -> AsyncGenerator[BaseDBAsyncClient]:password = os.getenv("TORTOISE_MYSQL_PASS", "123456")db_url = f"mysql://root:{password}@127.0.0.1:3306/mysql"connections_config = {"default": expand_db_url(db_url)}await connections._init(connections_config, create_db=False)try:yield connections.get("default")finally:await connections.close_all()class MysqlGtid:def __init__(self, conn: BaseDBAsyncClient) -> None:self.conn = connasync def get_var_value(self, statement: str) -> str:print(f"--> {statement}")result = await self.conn.execute_query_dict(statement)return str(result[0]["Value"])async def get_gtid_consistency(self) -> str:statement = "SHOW VARIABLES LIKE 'enforce_gtid_consistency';"return await self.get_var_value(statement)async def is_enforce_gtid(self) -> bool:return (await self.get_gtid_consistency()).upper() == "ON"async def get_gtid_mode_status(self) -> str:statement = "SHOW VARIABLES LIKE 'gtid_mode';"return await self.get_var_value(statement)async def execute_script(self, statement: str) -> None:print(f"--> {statement}")await self.conn.execute_script(statement)async def set_enforce_gtid_off(self, mode_on: bool, gtid_mode: str) -> None:statement = "SET GLOBAL enforce_gtid_consistency = OFF;"if mode_on:if gtid_mode == "ON":await self.execute_script("SET GLOBAL gtid_mode = ON_PERMISSIVE;")await self.execute_script("SET GLOBAL gtid_mode = OFF_PERMISSIVE;")await self.execute_script("SET GLOBAL gtid_mode = OFF;")await self.execute_script(statement)async def set_enforce_gtid_on(self, mode_on: bool, origin_gtid_mode: str) -> None:statement = "SET GLOBAL enforce_gtid_consistency = ON;"await self.execute_script(statement)if mode_on:current_status = (await self.get_gtid_mode_status()).upper()if current_status == origin_gtid_mode.upper():returnwith contextlib.suppress(OperationalError):if current_status == "OFF":await self.execute_script("SET GLOBAL gtid_mode = OFF_PERMISSIVE;")await self.execute_script("SET GLOBAL gtid_mode = ON_PERMISSIVE;")if origin_gtid_mode.upper() == "ON":await self.execute_script("SET GLOBAL gtid_mode = ON;")async def main() -> None:async with tortoise_context() as conn:db = MysqlGtid(conn)if "--list" in sys.argv:print(await db.get_gtid_consistency())print(await db.get_gtid_mode_status())elif "--on" in sys.argv:if (await db.get_gtid_mode_status()).upper() == "ON":print("gtid_mode is ON, nothing to do.")returnawait db.set_enforce_gtid_on(True, "ON")else:if not await db.is_enforce_gtid():print("enforce_gtid_consistency is OFF, nothing to do.")returnorigin_gtid_mode = await db.get_gtid_mode_status()gtid_mode = origin_gtid_mode.upper()mode_on = gtid_mode.startswith("ON")await db.set_enforce_gtid_off(mode_on, gtid_mode)if __name__ == "__main__":asyncio.run(main())

Usage::

python mysql_gtid.py --list
python mysql_gtid.py --on
python mysql_gtid.py --off

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C Tcp通信

学完了c程序基础知识后,是不是感觉什么也干不了,总想找点事情来练手?本文暂且介绍一下,如何使用socket进行tcp通信;示例程序目前并不健壮,仅为演示socket通信的基本流程。用白话理解tcp通信 TCP通信就像打电话,…

SZMS 251019 订题赛笔记

串串 原题:[CEOI 2010] pin 题意 给定 \(n\) 个长度为 4 的字符串,你需要找出有多少对字符串满足恰好 \(d\) 个对应位置的字符不同。 \(n \le 5 \times 10 ^ 4, d \le 4\)。 思路 前面忘了。 注意到恰好。 注意到容易…

关于面向对象程序设计的第一阶段大作业总结

一、前言 本次三次题目集聚焦 “单部电梯调度系统”,是面向对象编程的迭代式实践。涉及的知识点包括 Java 类与对象、枚举封装、集合框架(LinkedList)、单一职责原则(SRP)、电梯调度算法及输入校验。但对我而言,…

Spring Boot核心知识点全解析 - 实践

Spring Boot核心知识点全解析 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

RHCA - DO374 | Day03:通过自动化控制器运行剧本 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

离职/毕业-清理电脑

这段内容主要面向打工人,强调离职前清理电脑个人信息、保护隐私的重要性,并详细介绍了从微信聊天记录、电脑使用记录、上网记录、软件缓存四个方面一键清理个人信息的方法。开篇指出离职小白常误以为卸载软件就能清理…

2025.11.22

今天学习vue的项目布局,明天继续学习布局,然后就要开始前后端连接了

在 Python 和 NumPy 的常规书写规范中,ndarray需要大写吗?

在 Python 和 NumPy 的常规书写规范中,ndarray 通常使用小写,不需要大写。 ✅ 正确用法:ndarray(小写) 官方文档、NumPy 源码和社区惯例中,ndarray 始终是小写的。 它是 NumPy 中一个类的名称(numpy.ndarray),…

ddddocr: 对图片处理提升识别率

一,识别有误 dataurl: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAABQCAMAAAAQlwhOAAAA81BMVEUAAAB/TiCdbD6GVSdoNwnPnnB7ShyDUiTDkmR5SBrVpHbMm22FVCa5iFrUo3WUYzW9jF5yQRPDkmS/jmCFVCZyQRNnNghvPhCVZDZfL…

`np.array` 和 `np.ndarray`是什么关系?

np.array 和 np.ndarray 是 NumPy 中两个密切相关但用途和行为完全不同的概念。理解它们的关系是掌握 NumPy 的关键之一。🔹 1. np.ndarray:NumPy 数组的底层类(类型)numpy.ndarray 是 所有 NumPy 数组对象的实际…

大数据部门和AI部门边界

目录背景和价值1. 大数据部门的职责 (Big Data Department - 平台建设方)2. AI部门的职责 (AI Department - 价值应用方)总结:技术总监的战略划分参考资料 背景和价值 这是一个在组织架构中非常关键的问题,也是检验技…

Post Processing

Post Processing后处理 Unity Grab URP Render Feature Godot screen_texture Godot 面片法

工作草稿

自行车产业链发展的三种模式 一、加工增值模式进口高端碳纤维(德国织布机) 17%关税车架、车把 8%关税 → 增值 50%高端自行车日本禧玛诺车零件关税 20% 增值 30% 国内销往鱼杆、船桨、高尔夫 (昆山、吉林、呼和浩特…

【Rust编程:从新手到大师】Rust 环境搭建(详细版) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

OOP第一到三次作业总结 -单部电梯调度

一、前言 博主近期疏于学业,故而三次作业均没有完整实现出来,因此这是一篇反思文,同博主一样起步浑浑不清者,可借此文规避一些低效的思路。 (博主依赖ai成瘾,借主播血泪教训,建议读者切忌一味信赖ai!应当试着自…

2025年11月南通宠物医疗市场深度分析:专业服务与行业规范的标杆选择

在宠物经济快速发展的浪潮中,宠物医疗行业正经历从"基础服务"向"专业医疗"的深刻转型。据最新行业报告显示,南通地区宠物医疗市场规模年均增长达16.8%,宠物主人对医疗服务的期望已从"能看…

用户亲测!用 DiffMind 用 AI,省一半时间还出效果,小白也能轻松上手

用户亲测!用 DiffMind 用 AI,省一半时间还出效果,小白也能轻松上手“用 AI 写文案要切 3 个平台,改简历改 5 遍还不对,查个信息怕 AI 瞎编”—— 如果你也有这些糟心经历,那一定要试试DiffMind(官网www.diffmin…

软工团队作业3

作业信息这个作业属于哪个课程 首页 - 计科23级34班 - 广东工业大学 - 班级博客 - 博客园这个作业要求在哪里 团队作业3--需求改进&系统设计 - 作业 - 计科23级34班 - 班级博客 - 博客园这个作业的目标 明确团队项…

电梯调度迭代编程作业复盘

一、对三次电梯调度题目集的整体认知 (一)知识点覆盖与考察重点 三次电梯调度题目集聚焦面向对象编程核心知识点与工程化开发能力,核心考察内容可归纳为三类: 设计原则:核心是单一职责原则。从第一次的 “单类包揽…

球坐标系的大运动方程组

球坐标系的大运动方程组P=P(λ, φ, r) 其中,λ——经度φ——纬度r——地心到空间点的距离