国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s

這篇具有很好參考價值的文章主要介紹了07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

呵呵 最近再一次 環(huán)境部署的過程中碰到了這樣的一個問題

我基于 docker 啟動了一個 mysql 服務(wù), 然后 掛載出了 數(shù)據(jù)目錄 和 配置目錄, 沒有手動復(fù)制配置目錄出來, 所以配置目錄是空的

然后 我基于 docker 啟動了一個 nacos, 配置數(shù)據(jù)庫設(shè)置為上面的這個 mysql

然后 啟動 nacos, 啟動日志中老是會發(fā)現(xiàn) nacos 連接 mysql 出現(xiàn)問題, mysql server 沒有返回數(shù)據(jù)包 給客戶端 什么的, 呵呵 這個問題 還是挺有意思的, 繼續(xù)往下看

然后 我調(diào)整了 nacos 的 socketTimeout 的配置, 更新為 20s, 重新啟動 nacos 呵呵 效果還是一樣

然后 在普通的客戶端 比如 navicate, 或者 jdbcTemplate 中建立連接到查詢 也還是需要差不多是 10s 左右的時間, 這個很固定

?文章來源地址http://www.zghlxwxcb.cn/news/detail-664270.html

總結(jié)一下 這里面存在兩個問題

1. 為什么我 nacos 連接配置了 socoketTimeout, 為什么 客戶端 和 mysql 服務(wù)器交互還是失敗了?

2. 普通的客戶端 比如 navicate, 或者 jdbcTemplate 中建立連接到查詢 也還是需要差不多是 10s 左右的時間, 這個很固定, 這個 10s 到底是什么? mysql 服務(wù)器到底在干嘛?

?

?

為什么我 nacos 連接配置了 socoketTimeout, 為什么 客戶端 和 mysql 服務(wù)器交互還是失敗了?

這個涉及到幾個概念, connectionTimeout, socketTimeout, loginTimeout?

在這個場景里面主要涉及到的是 socketTimeout, loginTimeout?

ExternalDataSourceProperties 中設(shè)置了 connectionTimeout 為 3s, 進而設(shè)置了? DriverManager.loginTimeout 為 3s?

而這個配置是寫死的, 因此 除了修改 nacos 代碼之外的辦法, 就是處理?mysql 服務(wù)器出現(xiàn)連接超時的問題了?

?

客戶端 和 服務(wù)器 的交互流程大致如下?

1. 客戶端 和 服務(wù)器 建立 tcp 連接請求?

2. 服務(wù)器 發(fā)送 ServerGreeting 給客戶端?

3. 客戶端拿到 ServerGreeting 之后發(fā)送 認(rèn)證請求給服務(wù)器?

4. 服務(wù)端的認(rèn)證, 以及之后的流程?

我們這里客戶端是在 流程2 這里出現(xiàn)的問題, 設(shè)置的讀取超時時間為?socketTimeout 和 loginTimeout 二者的較小者, 然后服務(wù)器那邊 由于一些因素一直沒有發(fā)送 ServerGreeting 給客戶端, 因此 導(dǎo)致的超時?

    build:89, ExternalDataSourceProperties (com.alibaba.nacos.config.server.service.datasource) 中寫死的配置 connectionTimeout 為 3s
    connectTimeout 設(shè)置的是 客戶端 和 服務(wù)端 創(chuàng)建 tcp連接 的超時時間
    socketTimeout 設(shè)置的是 客戶端 和 服務(wù)端 tcp 數(shù)據(jù)交互的超時時間
    DriverManager.loginTimeout 設(shè)置的是登錄認(rèn)證期間 客戶端 和 服務(wù)端 tcp 數(shù)據(jù)交互的超時時間
    登錄認(rèn)證期間 客戶端 和 服務(wù)端 tcp 數(shù)據(jù)交互的超時時間 是 socketTimeout 和 (DriverManager.loginTimeout - connect本身會損失一部分時間) 的較小者
    在 登錄 tcp請求 之后, 將 客戶端 和 服務(wù)端 tcp 數(shù)據(jù)交互的超時時間 設(shè)置為了 socketTimeout

?

創(chuàng)建 dataSource 的地方?

07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s,12 mysql,docker,mysql,nacos

獲取連接的時候設(shè)置 loginTimeout 的地方

07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s,12 mysql,docker,mysql,nacos??

?

普通的客戶端 比如 navicate, 或者 jdbcTemplate 中建立連接到查詢 也還是需要差不多是 10s 左右的時間, 這個很固定, 這個 10s 到底是什么? mysql 服務(wù)器到底在干嘛?

本問題中服務(wù)器這邊的處理, 客戶端這邊連接了之后, 服務(wù)端處理連接請求, 完整的 stacktrace 是 thd_prepare_connection - login_connection - check_connection - ip_to_hostname?

是位于 客戶端 和 服務(wù)端 建立 tcp 連接之后, 服務(wù)端 向 客戶端 發(fā)送 ServerGreeting 之前?

最終調(diào)用的 glibc 庫函數(shù) gethostbyaddr, 這個庫函數(shù)根據(jù) 客戶端ip 查詢 客戶端主機名 的時候, 向 dns 查詢, 沒有查詢到 有 10s 的超時時間

    #0  0x00007ff9a20fc819 in poll () from target:/lib/x86_64-linux-gnu/libc.so.6
    #0  0x00007ff9a20fc819 in poll () from target:/lib/x86_64-linux-gnu/libc.so.6
    #1  0x00007ff98001e207 in ?? () from target:/lib/x86_64-linux-gnu/libresolv.so.2
    #2  0x00007ff98001bc43 in __res_context_query () from target:/lib/x86_64-linux-gnu/libresolv.so.2
    #3  0x00007ff99800b536 in _nss_dns_gethostbyaddr2_r () from target:/lib/x86_64-linux-gnu/libnss_dns.so.2
    #4  0x00007ff99800b823 in _nss_dns_gethostbyaddr_r () from target:/lib/x86_64-linux-gnu/libnss_dns.so.2
    #5  0x00007ff9a2118ee2 in gethostbyaddr_r () from target:/lib/x86_64-linux-gnu/libc.so.6
    #6  0x00007ff9a21217d5 in getnameinfo () from target:/lib/x86_64-linux-gnu/libc.so.6
    #7  0x000056048ea2e800 in vio_getnameinfo ()
    #8  0x000056048de9606f in ip_to_hostname(sockaddr_storage*, char const*, char**, unsigned int*) ()
    #9  0x000056048e2c8569 in ?? ()
    #10 0x000056048e2c95d3 in thd_prepare_connection(THD*) ()
    #11 0x000056048e3c103e in handle_connection ()
    #12 0x000056048e9cfcd7 in pfs_spawn_thread ()
    #13 0x00007ff9a255ffa3 in start_thread () from target:/lib/x86_64-linux-gnu/libpthread.so.0
    #14 0x00007ff9a21074cf in clone () from target:/lib/x86_64-linux-gnu/libc.so.6

?

新增測試用例, 在宿主機上面跑一下, 并且在 mysql 所在的容器跑一下?

    新增測試用例 Test09GetHostByAddr.c
        /**
        * Test09GetHostByAddr.c
        */
        #include "stdio.h"
        #include "netdb.h"
        #include "stdlib.h"
        #include "arpa/inet.h"
        #include "string.h"
        int main(int argc, char **argv) {
            struct hostent *host;
            const char *add = "10.60.50.16";
            char p[30];
            inet_pton(AF_INET, add, p);
            host = gethostbyaddr(p, strlen(p), AF_INET);
            printf("hostname : %s", host->h_name);
            return 0;
        }

?

新增 build 腳本, 并執(zhí)行, 觀察 執(zhí)行情況?

    新增 build 的測試腳本
        gcc -g -o Test09GetHostByAddr Test09GetHostByAddr.c
        date
        ./Test09GetHostByAddr
        date
    執(zhí)行 build 腳本
    root@ubuntu:~/docker/mysql/GetHostByAddr# ./build.sh
    Thu Feb 24 23:21:46 PST 2022
    ./build.sh: line 5: 39782 Segmentation fault      ./Test09GetHostByAddr
    Thu Feb 24 23:21:56 PST 2022

?

?

skip-name-resolve 的影響 - 添加于?2023.08.15

這里是服務(wù)器?在嘗試根據(jù) ip信息?解析客戶端的 主機名 信息

核心的調(diào)用鏈如下, 關(guān)鍵的調(diào)用是?glibc?的?gethostbyaddr_r

07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s,12 mysql,docker,mysql,nacos

?

然后?本文中提到的 config?目錄中,?影響這個問題更關(guān)鍵的是?skip-name-resolve 的這個配置,?更新之后的配置有這個?skip-name-resolve, 然后?mysql?服務(wù)器解析?主機名信息的時候 就 hang?住了,?這里是?10s

root@ubuntu:~/docker/mysql# cat config/conf.d/docker.cnf
[mysqld]
skip-host-cache
skip-name-resolve

?

在?my.cnf 中增加了?skip_name_resolve=ON 之后情況如下?

更新之后,?就不會解析?主機信息,?進而防止了?gethostbyaddr_r 的?hang?住?

07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s,12 mysql,docker,mysql,nacos

?

?

?

?

完?

?

?

?

到了這里,關(guān)于07 mysql5.6.x docker 啟動, 無 config 目錄導(dǎo)致客戶端連接認(rèn)證需要 10s的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL5.7數(shù)據(jù)目錄結(jié)構(gòu)

    以CentOS7為例,數(shù)據(jù)目錄為 /var/lib/mysql/ ,其內(nèi)容如下: 其中 mysql 、 sys 等為數(shù)據(jù)庫,即一個數(shù)據(jù)庫對應(yīng)的一個目錄。 ibdata1 存放的是 InnoDB 的元數(shù)據(jù)、變更緩沖區(qū)、雙寫緩沖區(qū)和撤銷日志。 ib_logfile0 和 ib_logfile1 存放普通日志。 ib_buffer_pool 存放緩存池信息。 以 test 數(shù)據(jù)庫為例

    2024年02月12日
    瀏覽(24)
  • 在M1芯片的Macbook上使用docker-compose啟動mysql,并利用 NaviCat Premium 客戶端進行連接

    在M1芯片的Macbook上使用docker-compose啟動mysql,并利用 NaviCat Premium 客戶端進行連接

    在M1芯片的Macbook上使用docker-compose啟動mysql,并利用 NaviCat Premium 客戶端進行連接 ? 先打開控制臺,使用 uname -m 來查看自己CPU芯片的架構(gòu) ? 蘋果的M系列芯片使用的是ARM64架構(gòu),因此,需要安裝相應(yīng)版本的一些列工具。 ????????因為我是M1芯片,所以安裝docker desktop時候,當(dāng)

    2024年02月12日
    瀏覽(26)
  • Spring Cloud【Config客戶端配置與測試、Config客戶端之動態(tài)刷新 、什么是Spring Cloud Bus、Docker安裝RabbitMQ】(十)

    Spring Cloud【Config客戶端配置與測試、Config客戶端之動態(tài)刷新 、什么是Spring Cloud Bus、Docker安裝RabbitMQ】(十)

    ? 目錄 分布式配置中心_Config客戶端配置與測試 為什么要引入bootstrap?

    2024年02月15日
    瀏覽(18)
  • 錯誤記錄——mysql5.7連接失敗,服務(wù)無法啟動

    錯誤記錄——mysql5.7連接失敗,服務(wù)無法啟動

    上周安裝完mysql后,成功新建了數(shù)據(jù)庫,一切都是正常的,于是就先擱置一旁。今天周一過來,卻突然發(fā)現(xiàn)無法連接mysql了。 第一反應(yīng)是服務(wù)沒有啟動,畢竟重啟了電腦,說不定是服務(wù)沒有自動啟動,于是打開了服務(wù)管理器,卻發(fā)現(xiàn)沒有mysql對應(yīng)的服務(wù)。既然沒有,那我就自己

    2024年02月08日
    瀏覽(20)
  • Docker運行MySQL5.7

    步驟如下: 1.獲取鏡像: 2.創(chuàng)建掛載目錄: 3.先啟動docker把配置文件拷貝出來: 這里需要另外起一個終端,來拷貝文件: 4.啟動docker 參數(shù)說明: (1)-d:后臺啟動 (2)-p:端口映射 (3)-v:目錄掛載,一共掛載了日志、數(shù)據(jù)文件、配置三種文件。 (4)--name:容器名字 (

    2024年02月15日
    瀏覽(89)
  • docker 安裝 MySQL5.7

    docker 安裝 MySQL5.7

    1、拉取鏡像 2、創(chuàng)建容器 3、/var/docker/mysql/conf 目錄新建 my.cnf 通過容器卷同步給mysql容器實例 寫入內(nèi)容: 進入容器實例 ?進入 mysql?? 查看MySQL字符集

    2024年02月10日
    瀏覽(90)
  • Docker 安裝 MySQL5.7 和 MySQL8

    Docker 安裝 MySQL5.7 和 MySQL8

    拉下來鏡像后 執(zhí)行 docker images 此時我們已經(jīng)有這個鏡像了。 在根目錄下創(chuàng)建 app , 在 app 目錄下創(chuàng)建 mysql57 文件夾。 命令如下: 參數(shù)說明 : -d :將容器在后臺運行(以分離模式運行)。 -p 3306:3306 :將宿主機的 3306 端口映射到容器的 3306 端口,這樣可以通過宿主機的 3306

    2024年02月04日
    瀏覽(24)
  • docker下安裝mysql5.7教程

    docker下安裝mysql5.7教程

    準(zhǔn)備好Linux系統(tǒng)機器,并安裝好docker,閱讀這篇文章前請先了解清楚docker的基本知識并且會熟悉運用docker的常用命令。學(xué)習(xí)docker基礎(chǔ)知識可以參考這篇博文 安裝好并啟動docker后就可以開始安裝mysql了 執(zhí)行以下命令直接下載mysql5.7版本鏡像 安裝好后再執(zhí)行 docker images命令,查看

    2024年02月05日
    瀏覽(19)
  • docker 安裝 mysql5.7(全網(wǎng)最詳細(xì))

    安裝,以MySql5.7版本為例子。 docker默認(rèn)的倉庫比較慢,可以參考以下文章 第五標(biāo)題 設(shè)置阿里云鏡像倉庫。 docker (簡介、dcoker詳細(xì)安裝步驟、容器常用命令)一站打包- day01-CSDN博客 一、拉去mysql鏡像 如下安裝完成? ?查看本地鏡像倉庫拉去好的mysql,確認(rèn)版本號 如下:? 二、

    2024年04月10日
    瀏覽(34)
  • 【Docker 】Docker 客戶端,容器使用,啟動容器,啟動已停止運行的容器,停止一個容器,進入容器

    【Docker 】Docker 客戶端,容器使用,啟動容器,啟動已停止運行的容器,停止一個容器,進入容器

    作者簡介: 辭七七,目前大一,正在學(xué)習(xí)C/C++,Java,Python等 作者主頁: 七七的個人主頁 文章收錄專欄: 七七的閑談 歡迎大家點贊 ?? 收藏 ? 加關(guān)注哦!???? docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。 可以通過命令 dock

    2024年02月11日
    瀏覽(57)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包