MariaDB/MySQL链接延时超过10秒问题解决

问题现象

在连接MariaDB/MySQL数据库时,每次链接都需要10秒,而平均延时应在10毫秒左右。

在这里插入图片描述

解决办法

  1. 使用SSH链接到群晖,然后搜索配置文件:

    sudo find / -name my.cnf
    sudo find / -name 50-server.cnf
    
  2. 打开找到的配置文件,例如:

    sudo vi /volume2/@appstore/MariaDB10/usr/local/mariadb10/etc/mysql/my.cnf
    
  3. 在[mysqld]部分添加skip-name-resolve行:

    • 使用键盘的上下左右箭头键导航到你要插入文本的位置。
    • 按 “i” 键进入插入模式。
    • 在 [mysqld] 下添加新行并输入 skip-name-resolve。
    • 按 “Esc” 键退出插入模式。
    • 输入 :wq 并按回车键保存更改并退出vi编辑器。
  4. 重启 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)

更多推荐