MySQL连接成功时执行命令:如何为每个新建数据库连接设置会话变量
为MySQL连接统一设置会话变量的实现方案
以下是不同场景下的可行配置方式:
1. 服务端全局配置(所有连接默认生效,无需修改应用代码)
如果你有权限修改数据库配置,可以直接编辑MySQL的my.cnf(Windows系统为my.ini)文件,在[mysqld]配置块下添加init_connect参数:
[mysqld] init_connect='SET AURORA_READ_REPLICA="session"'
修改完成后重启MySQL服务即可生效。
注意:该配置对拥有SUPER权限的账号不生效,如果你用高权限账号建立连接,需要单独配置初始化逻辑。
2. 应用端连接池配置(仅对当前应用的连接生效,无需修改数据库配置)
几乎所有主流语言的数据库连接池都提供了连接初始化钩子,直接将需要执行的SQL配置到对应参数即可,举几个常用场景示例:
- Java(Hikari连接池/SpringBoot):配置连接初始化SQL参数
spring.datasource.hikari.connection-init-sql=SET AURORA_READ_REPLICA='session' - Python(pymysql/SQLAlchemy):连接创建后主动执行初始化语句
import pymysql # 建立连接后立刻执行会话变量设置 conn = pymysql.connect(host="你的数据库地址", user="账号", password="密码", database="库名") conn.cursor().execute("SET AURORA_READ_REPLICA='session'") - Go(gorm):通过连接回调设置初始化逻辑
db, _ := gorm.Open(mysql.Open("你的DSN"), &gorm.Config{}) // 新连接创建后自动执行变量设置 db.Callback().Connect().Register("init_session", func(db *gorm.DB) { db.Exec("SET AURORA_READ_REPLICA='session'") })
3. 客户端命令行场景(仅对本地mysql命令连接生效)
如果是用原生mysql客户端手动连接数据库,可以将初始化命令写入本地用户目录下的.my.cnf配置文件:
[client] init-command="SET AURORA_READ_REPLICA='session'"
后续每次执行mysql命令登录时都会自动执行该语句。
内容的提问来源于stack exchange,提问作者Skyuppercut
相关产品推荐
相关产品推荐

