2026年5月20日 星期三

你連的是哪一台MySQL?你連的MySQL真的是你要連的MySQL嗎?

 最近有一個任務。要把A主機的MySQL升版。問了幾個AI,方式差不多。想了幾天沒有問題就來試試。

結果一試沒有成主顧,但差點過世!

其實之前就有徵兆了。我有一個備份MySQL的程式,有一段時間沒有運作了。昨天看了一下是root密碼跑掉(其實這邊就很奇怪了),但我以為是我記錯,隨手處理掉。

升版方式很簡單:

1、下載mysql8的bin

2、備份舊版mysql資料

3、停止舊mysql

4、開新myqsl8

5、把舊mysql mysqldump出來的塞回mysql8

開始執行後好笑的事開始了。

1.我明明把舊mysql停掉了,但我怎麼連都是連到舊mysql

2.把舊mysql移除,但我怎麼連都是連到舊mysql

3.把mysql8跑在3308 port,連入的時候一直說某DB不存在 (這個是重大訊息,但我沒有想到跟後面的障礙有關)

4、透過HOST 127.0.0.1連3308 port,也是一樣某DB不存在。

我跟Gemini搞了很久,搞到我放棄。把舊db裝回去,先復原。

再試一次也是一樣,但這一次就直接裝在3308 port (舊db在3306 port不影響)。

查到最後發現只要 mysql --no-defaults -u root -p 就可以正常連到mysql8。

看來是default-db之類的參數有被設定。

經過多次測試之後,才想到我在 ~有設定 ./my.cnf 裡面有指定

server (B主機)/username/password/database。

當初是為了寫某個加密的script設定的,為了省功做的,登入的時候就不需要帳號密碼,過很久也忘了這件事。

所以,我從頭到尾都在備份B主機,連線B主機,回存B主機....

再回頭想,之前的備份失敗也是因為這個關係。

所以我回頭把那個加密程式改了一下,就不需要./my.cnf這個檔案了。

不過我剛再試一次mysql8還是沒有成功。因為我一開始mysqldump的時候dump出來的是B主機的資料(難怪我一直覺得奇怪,為什麼A跟B兩台主機備份出來是一樣大的檔案)。

看來這個問題應該是有解了.........應該吧


沒有留言:

張貼留言