最近有一個任務。要把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兩台主機備份出來是一樣大的檔案)。
看來這個問題應該是有解了.........應該吧
沒有留言:
張貼留言