MariaDB/MySQL链接延时超过10秒问题解决
·
MariaDB/MySQL链接延时超过10秒问题解决
问题现象
在连接MariaDB/MySQL数据库时,每次链接都需要10秒,而平均延时应在10毫秒左右。

解决办法
-
使用SSH链接到群晖,然后搜索配置文件:
sudo find / -name my.cnf sudo find / -name 50-server.cnf -
打开找到的配置文件,例如:
sudo vi /volume2/@appstore/MariaDB10/usr/local/mariadb10/etc/mysql/my.cnf -
在
[mysqld]部分添加skip-name-resolve行:- 使用键盘的上下左右箭头键导航到你要插入文本的位置。
- 按 “i” 键进入插入模式。
- 在
[mysqld]下添加新行并输入skip-name-resolve。 - 按 “Esc” 键退出插入模式。
- 输入
:wq并按回车键保存更改并退出vi编辑器。
-
重启 MariaDB 服务(或重启NAS)。
解决原理
MariaDB/MySQL连接时会进行主机名解析,这个解析过程可能会耗费大量时间,导致链接延迟。通过在配置文件中添加 skip-name-resolve 参数,我们可以让MariaDB/MySQL跳过这个解析过程,直接使用IP地址进行链接,从而解决延迟问题。
附录:Python测试代码
def check_connection(ip, port, user, password):
log_record(f'{socket.gethostname()}\t数据库链接测试开始\nip\t{ip}\nport\t{port}\nuser\t{user}\npass\t{password}')
latencies = []
for _ in tqdm(range(10), desc="测试进度"):
try:
start = time.time()
cnx = pymysql.connect(
host=ip,
port=port,
user=user,
passwd=password
)
end = time.time()
latency = end - start
latencies.append(latency)
cnx.close()
except pymysql.Error as e:
log_record(f"测试:数据库连接失败,错误:\n{e}")
break
if len(latencies) > 2:
latencies.remove(max(latencies))
latencies.remove(min(latencies))
if latencies:
avg_latency = sum(latencies) / len(latencies)
log_record(f"测试:10次平均数据库连接延迟:{avg_latency*1000:2f} ms")、
if __name__ == '__main__':
ip,port,user,password = '127.0.0.1', 3306,'root','输入你的密码'
check_connection(ip, port, user, password)
更多推荐



所有评论(0)