一次MySQL啟動導(dǎo)致的事故實戰(zhàn)記錄
MySQL` 啟動存在端口被監(jiān)聽, 但服務(wù)沒完全啟動的情況.
背景
MySQL 啟動時會進(jìn)行 第一次 初始化數(shù)據(jù)庫, 等待 MySQL 完全啟動后, 再進(jìn)行 第二次 初始化數(shù)據(jù)庫.
第一次 初始化數(shù)據(jù)庫使用 --skip-networking (這個選項表示禁止 MySQL 的 TCP/IP 連接方式) 啟動 MySQL 進(jìn)行初始化,
初始化完成后會關(guān)閉 --skip-networking 選項重新啟動 MySQL.
第二次 初始化數(shù)據(jù)庫會設(shè)置 root 密碼.
判斷 MySQL 已完全啟動的方式
嘗試主動連接 MySQL, 連接成功則表明服務(wù)已完全啟動
mysql -hlocalhost -P3306 -uroot
事故
由于上面的判斷方式使用的是 socket 進(jìn)行連接數(shù)據(jù)庫, 但第一次只是禁止 MySQL 的 TCP/IP 連接方式,
所以沒等 第一次 初始化數(shù)據(jù)庫完成可能就已經(jīng)進(jìn)行了 第二次 初始化數(shù)據(jù)庫,
而 第二次 初始化數(shù)據(jù)庫提前于 第一次 初始化數(shù)據(jù)庫設(shè)置 root 密碼, 導(dǎo)致 第一次 初始化連不上數(shù)據(jù)庫而失敗,
最后沒有開啟 TCP/IP 連接方式, 應(yīng)用無法連接數(shù)據(jù)庫.
第一次修改
使用 -h127.0.0.1 進(jìn)行連接數(shù)據(jù)庫
mysql -h127.0.01 -P3306 -uroot
但由于 root 用戶的 host 設(shè)置的是 localhost, 不允許 127.0.0.1 進(jìn)行連接, 第一次修改失敗.
第二次修改
wait-for-it.sh 127.0.0.1:3306 --timeout=300 mysql -hlocalhost -P3306 -uroot
wait-for-it.sh 用于檢測 127.0.0.1:3306 是否處于監(jiān)聽狀態(tài), 如果是, 則表明 第一次 初始化數(shù)據(jù)庫完成了,
然后再使用 localhost 去嘗試連接數(shù)據(jù)庫.
原文鏈接: k8scat.com/posts/wait-…
總結(jié)
到此這篇MySQL啟動導(dǎo)致的事故的文章就介紹到這了,更多相關(guān)MySQL啟動導(dǎo)致事故內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決啟動MongoDB錯誤:error while loading shared libraries: libstdc+
本文提供了解啟動MongoDB時提示:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: 錯誤的解決方案2018-10-10MySQL INNER JOIN 的底層實現(xiàn)原理分析
這篇文章主要介紹了MySQL INNER JOIN 的底層實現(xiàn)原理,INNER JOIN的工作分為篩選和連接兩個步驟,連接時可以使用多種算法,通過本文,我們深入了解了MySQL中INNER JOIN的底層實現(xiàn)原理,需要的朋友可以參考下2023-06-06