本篇文章更新時間:2025/06/11
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
使用 LNMP 建置開發環境時,MySQL 的服務可以選擇直接安裝官方安裝包(Generic Binaries),還是要從頭自己主機上 Build。
省時間就會選擇官方安裝包,但不知道為啥在 Ubuntu 24.04 上安裝 v8.0.37
版本會無法啟動。
模擬執行觀察錯誤訊息:
sudo -u mysql /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var
會出現:
error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
確認系統有安裝相關套件:
apt install libaio-dev
也有安裝了,但是 ldd /usr/local/mysql/bin/mysqld
檢查出現沒找到的資訊:
linux-vdso.so.1 (0x00007ffde3d7b000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x000072d40ca4b000)
libcrypto.so.3 => /usr/local/mysql/bin/../lib/private/libcrypto.so.3 (0x000072d40c400000)
libssl.so.3 => /usr/local/mysql/bin/../lib/private/libssl.so.3 (0x000072d40c000000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x000072d40ca46000)
libprotobuf-lite.so.24.4.0 => /usr/local/mysql/bin/../lib/private/libprotobuf-lite.so.24.4.0 (0x000072d40bc00000)
libaio.so.1 => not found
libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 (0x000072d40ca36000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x000072d40ca31000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x000072d40b800000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x000072d40c317000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x000072d40c2e9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000072d40b400000)
/lib64/ld-linux-x86-64.so.2 (0x000072d40ca5a000)
檢查系統檔案是否存在:
# find / -name "libaio.so*" 2>/dev/null
/usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2
/usr/lib/x86_64-linux-gnu/libaio.so.1t64
/usr/lib/x86_64-linux-gnu/libaio.so
確認有檔案,只是對應檔案名稱不同,建立一個超連結(symbolic link)給他用:
ln -sf /lib/x86_64-linux-gnu/libaio.so /lib/x86_64-linux-gnu/libaio.so.1
再用指令檢查缺漏: ldd /usr/local/mysql/bin/mysqld
確保都找到了後,重啟試試!
這次換沒有初始化資料目錄(當初安裝到啟動就錯誤,後續都沒跑完)
[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
[ERROR] [MY-013236] [Server] The designated data directory /usr/local/mysql/var/ is unusable. You can remove all files that the server added to it.
使用指令初始化(要確保資料目錄 /usr/local/mysql/var
是空的):
# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var
[System] [MY-013576] [InnoDB] InnoDB initialization has started.
[System] [MY-013577] [InnoDB] InnoDB initialization has ended.
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ?IP,gawQm4ti
到這步就算完成 Server 那段,接下來要去改掉預設密碼使用指令要登入的時候又噴錯:
error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
先找找看函式庫路徑下是否有存在這庫以及是不是同樣命名問題 ls /usr/lib/x86_64-linux-gnu/libtinfo*
,確認是同樣問題後,解法也一樣。
ln -sf /lib/x86_64-linux-gnu/libtinfo.so /lib/x86_64-linux-gnu/libtinfo.so.5
滿足條件後就可以使用 mysql -u root -p
來用預設密碼來登入改密碼:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT;
Bye
到這邊就終於完成啦~