原本我一直是使用各个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.pem
、client-key.pem
的话,也许你真的能够运行成功。不过,再向后,我就没有尝试了,原因是,如果每一次测试都去获得各一个身份认证的密钥对,那么实在是太复杂了。
最终,我根据AWS上这篇文章(Running sysbench on RDS MySQL… via SSL/TLS)的建议,尝试自己编译安装了最新版本的sysbench,也就是1.1.0版本。然后简单的使用参数--mysql-ssl=preferred
或--mysql-ssl=required
彻底的解决了这个问题。