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操作进行。