mysql 自动重连

MYSQL_OPT_RECONNECT (argument type: my_bool *)
Enable or disable automatic reconnection to the server if the connection is found to have been lost. Reconnect has been off by default since MySQL 5.0.3; this option is new in 5.0.13 and provides a way to set reconnection behavior explicitly.
#如果连接丢失,启用或禁用自动重连到Serve,。自5.0.3之后,重连默认被禁用。这个选项是5.0.13新增的,提供了明确设置重连行为的选项。

Note: mysql_real_connect() incorrectly reset the MYSQL_OPT_RECONNECT option to its default value before MySQL 5.0.19. Therefore, prior to that version, if you want reconnect to be enabled for each connection, you must call mysql_options() with the MYSQL_OPT_RECONNECT option after each call to mysql_real_connect(). This is not necessary as of 5.0.19: Call mysql_options() only before mysql_real_connect() as usual.
#注意:mysql_real_connect() 在5.0.19之前错误地重置了MYSQL_OPT_RECONNECT选项为默认值(不启用),因此,在5.0.19之前,如果你希望为连接启用重连,你必须在mysql_real_connect()之后调用mysql_options来设置MYSQL_OPT_RECONNECT。5.0.19之后就不需要这样了,只需要(跟其他选项一样)在mysql_real_connect之前调用即可。



也就是说,不管是哪个版本,希望启用MYSQL_OPT_RECONNECT,都应该调用mysql_options()明确设置它。由于一个BUG,5.0.19之前必须在mysql_real_connect()之后设置,而更新的版本则可以在mysql_real_connect之前设置。

这里的坑是,在没有设置了RECONNECT时,mysql_ping()并不会自动重连

因此最完整的解决方法是:

1. 在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。

示例代码:

mysql_init() ...
mysql_real_connect()...
char value = 1;
mysql_options(&mysql, MYSQL_OPT_RECONNECT, (char *)&value);

 

2. 在执行查询的之前使用mysql_ping()确保自动重连。(但是这个是必要的吗?找不到相应的说明。。。)

 

------------------------------------------------------------

经过测试,设置handler为自动重连,每次执行查询之前 mysql_ping 保证连接未断开,但未成功,mysql_ping 未进行自动重连,还是建议检查mysql_ping 返回值,主动进行重连吧。。。

------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Django连接MySQL数据库时,可以通过设置Django的数据库连接参数来实现自动重连的功能。 首先,在Django的settings.py文件中,将DATABASES配置项中的'OPTIONS'键添加如下参数: 'DATABASES': { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': '用户名', 'PASSWORD': '密码', 'HOST': '数据库地址', 'PORT': '数据库端口', 'OPTIONS': { 'autocommit': True, # 开启自动提交事务 'init_command': 'SET default_storage_engine=INNODB', # 设置默认存储引擎为InnoDB 'charset': 'utf8mb4', # 设置字符集为utf8mb4,支持中文及表情符号存储 'connect_timeout': 5, # 设置连接超时时间为5秒 'sql_mode': 'traditional', # 设置SQL模式为传统模式 'init_connect': "SET NAMES 'utf8mb4'" # 设置连接初始化时的编码 }, } } 其中,'connect_timeout'参数用于设置连接超时时间,当连接超时时,Django会自动尝试重新连接数据库。 此外,还可以通过配置数据库连接中的'CONN_MAX_AGE'参数来控制连接的最大寿命,例如: 'DATABASES': { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': '用户名', 'PASSWORD': '密码', 'HOST': '数据库地址', 'PORT': '数据库端口', 'OPTIONS': { 'autocommit': True, 'init_command': 'SET default_storage_engine=INNODB', 'charset': 'utf8mb4', 'connect_timeout': 5, 'sql_mode': 'traditional', 'init_connect': "SET NAMES 'utf8mb4'" }, 'CONN_MAX_AGE': 300 # 设置连接的最大寿命为300秒,超过该时间将自动重新连接 } } 通过以上配置,当数据库连接超时或连接到达最大寿命时,Django会自动重新连接MySQL数据库,实现自动重连的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值