python操作mycat只操作主库【解决办法】

1,279 阅读1分钟

python操作mycat只操作主库

测试:

1、将数据库配置成主从赋值,mycat实现读写分离;

2、使用python对数据库进行操作;

3、主从数据库都打开general_log,查看数据库查询日志。

实验结果:

使用mysqldb和pymysql库,不管什么操作,mycat都将操作路由到了主库来执行。

原因:

使用python第三方库,mysqldb和pymysql都会默认开启事务来执行sql语句。也就是常用的执行方法,如下:

cursor.execute(sql_1)
cursor.execute(sql_2)
#至此sql还没有到数据库中执行
cursor.commit()
#commit后所有sql才会生效

也就是说,操作中包含了一种事务处理的机制。但是,mycat对于显式事务来说,只会路由到主库上执行,所以就会造成,python操作mycat的时候,mycat总是将操作路由到主库。

解决办法:

mysql方面开启:autocommit。

查询方式以及设置如下:

select  @@autocommit;
set @@autocommit=1;

或者修改配置文件:
  1. [mysqld]

  2. init_connect='SET autocommit=0'

    一下提供三种第三方库操作数据库的处理方式:

mysqldb

#在连接数据库后
conn.autocommit(1)
#并且在执行完execute之后,不用进行commit操作。

pymysql

conn = pymysql.connect(host='192.168.1.2', user='root', password='1',
                      db='test', port=8066, charset='utf8',autocommit=True)
#并且在执行完execute之后,不用进行commit操作。

sqlalchemy

#连接的时候
mysql+pymysql://user:password@host:port/db?charset=foo&autocommit=true

以上操作,建议只对select操作进行。