尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

A script to set mysql gtid-mode off by tortoise-orm
📅 发布时间:2026/6/19 11:52:14
  • 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

相关新闻

  • C Tcp通信
  • SZMS 251019 订题赛笔记
  • ddddocr: 对图片处理提升识别率

最新新闻

  • 2026年正规中亚五国物流专线服务商优质厂家名单表:广州/山东/义乌-喀什-中亚物流 - 海棠依旧大
  • 福州卖黄金怕遭八两秤王水偷金?拿这四把尺去量,全城仅5家不套路 - 阿丽珠宝
  • Adobe-GenP 3.0:五分钟解锁Adobe全家桶的专业指南
  • 2026成都闲置名包别卖亏了!五大回收门店横向测评 - 奢品小当家
  • 2026庐江中考200-400分的学生选择合肥理工学校,升本率第一!官方最新简章已发,官方电话17683652068 - 小张zc
  • 上海闵行区新手出手大牌包包全流程,一步教你轻松拿到满意报价 - 奢品小当家

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号