Sysbench老版本压测MySQL支持SSL/TLS的问题

原本我一直是使用各个YUM仓库中默认的sysbench版本的,主要是考虑安装部署方便,而一直以来这个版本似乎都没有遇到什么问题,直到…尝试自动化的对Azure上的MySQL进行压测。

默认的sysbench版本是1.0.17版(Mar 15, 2019),首先,是遇到了如下的报错信息:

sysbench 1.0.17 (using system LuaJIT 2.0.4)

FATAL: unable to connect to MySQL server on host 'xxx.mysql.database.azure.com', port 3306, aborting...
FATAL: error 3159: Connections using insecure transport are prohibited while --require_secure_transport=ON

在该版本中,sysbench提供了参数--mysql-ssl=[on|off]以尝试解决这个问题,但对于最新版本的MySQL,该参数很多时候都无法正常工作,如果你也尝试了该参数,那么会报如下错误:

FATAL: unable to connect to MySQL server on host 'xxx.mysql.database.azure.com', port 3306, aborting...
FATAL: error 2026: SSL connection error: SSL_CTX_set_default_verify_paths failed

如果,恰好,你注意上面的报错可能是CA证书的问题,于是你也像我一样尝试通过 下载证书的方式去解决,并通过GitHub上的issue,成功将CA证书改名成cacert.pem,并放在当前的路径下,那么你还会遇到如下报错:

SSL error: Unable to get certificate from 'client-cert.pem'
FATAL: unable to connect to MySQL server on host 'xxx.mysql.database.azure.com', port 3306, aborting...
FATAL: error 2026: SSL connection error: Unable to get certificate

好了,也许你再成功生成client-cert.pemclient-key.pem的话,也许你真的能够运行成功。不过,再向后,我就没有尝试了,原因是,如果每一次测试都去获得各一个身份认证的密钥对,那么实在是太复杂了。

最终,我根据AWS上这篇文章(Running sysbench on RDS MySQL… via SSL/TLS)的建议,尝试自己编译安装了最新版本的sysbench,也就是1.1.0版本。然后简单的使用参数--mysql-ssl=preferred--mysql-ssl=required彻底的解决了这个问题。

参考文档

In:

Leave a Reply

Your email address will not be published. Required fields are marked *