snower / TorMySQL

The highest performance asynchronous MySQL driver by PyMySQL
MIT License
308 stars 63 forks source link

隐藏空闲连接关闭时的具体错误信息 #10

Closed evolsnow closed 8 years ago

evolsnow commented 8 years ago

当空闲连接关闭时,连接的所有信息被打印在log中,包括数据库密码,用户名等较敏感信息,希望隐藏。

snower commented 8 years ago

这个地方打印出来的不是空闲连接关闭的信息,是从连接池中取出操作数据库之后长时间未放回连接池的连接,也就是异样连接,所以一般来说不应该在生产环境出现,这个地方这样输出是为了在测试环境中测试就知道有连接异常使用的情况,毕竟tornado是异步的,很容易出现不恰当使用,否则很容易很快耗尽连接池连接而死锁的,尽可能输出信息也是为了方便排查

evolsnow commented 8 years ago

感谢回复。 数据库操作代码写法类似于:

async def test():
    conn  = await pool.Connection()
    with conn:
        try:
            with conn.cursor() as cursor:
                await cursor.execute("INSERT INTO test(id) VALUES(1)")
        except:
            await conn.rollback()
        else:
            await conn.commit()

        with conn.cursor() as cursor:
            await cursor.execute("SELECT * FROM test")
            datas = cursor.fetchall()

测试过远高于连接池数量的并发,使用这种with_with的写法并没有出现死锁情况,所以感觉难以检测到异样连接。 日志上显示的是"Connection used timeout ,7200s"之类的。7200s是设置的conntion idle timeout,所以一直以为是正常关闭。。。

snower commented 8 years ago

恩,这个地方的with只是同步的with,并没有实现python3异步的with,我测试下看看吧,是否和这个相关,我们一直在使用python2,虽然每天请求量很大,很稳定,但python3使用不多,这个地方输出的信息中可以考虑去掉密码,有其他信息也能确认哪个连接不正常使用了