遇到啟動失敗,**第一動作**:查看錯誤日誌。位置通常在:
$datadir/hostname.err/var/log/mysqld.log/var/log/mysql/error.logjournalctl -u mysqld 或 /var/log/messages切勿只看「找不到 mysql.sock」等表面現象**,必須定位根因錯誤碼與堆疊。
mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
/usr/local/mysql/bin/mysqld_safe: line 107: /usr/local/mysql/data/host.err: Permission denied
datadir 擁有者:chown -R mysql:mysql /var/lib/mysql (或你的實際數據目錄)chmod 750 /var/lib/mysql (目錄需 x 權限進入)log-error 指定的日誌文件目錄可寫。[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
[ERROR] Do you already have another mysqld server running on port: 3306 ?
netstat -tlnp | grep :3306 或 ss -tlnp | grep :3306 找到佔用進程 PID。systemctl stop mysqld 或 mysqladmin -u root -p shutdown 優雅停止。my.cnf 中 port = 3307 避開,或殺掉無關進程。bind-address 配置,確保監聽正確 IP (0.0.0.0 或具體內網 IP)。InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 134217728 bytes!
[ERROR] Plugin 'InnoDB' init function returned error.
修改了 innodb_log_file_size 但舊的 ib_logfile0/1 仍存在,尺寸不符導致啟動拒絕。
systemctl stop mysqldmv /var/lib/mysql/ib_logfile* /tmp/同理:innodb_data_file_path 尺寸變更、innodb_page_size 變更均需清理對應文件並全量備份恢復,操作風險極大,非必要勿動。
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
# MySQL 5.7 / 8.0
mysqld --initialize --user=mysql --datadir=/var/lib/mysql
# 或
mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql # 生成隨機 root 密碼或無密碼
# MySQL 5.6 及之前
mysql_install_db --user=mysql --datadir=/var/lib/mysql
初始化後務必執行 mysql_secure_installation 設置 root 密碼、移除匿名用戶、禁止遠程 root 登錄、移除 test 庫。
getenforce,若為 Enforcing,需設置布爾值 setsebool -P mysql_connect_any 1 或調整文件上下文 restorecon -R /var/lib/mysql。aa-status | grep mysql,若有 deny 規則,調整 /etc/apparmor.d/usr.sbin.mysqld 添加數據目錄權限。mysqld --user=mysql --console --datadir=/var/lib/mysql 直接在終端輸出啟動日誌,一目了然。core_file=ON,配合 gdb 分析崩潰堆疊。strace -f mysqld ... 2>&1 | grep -E 'open|access|stat|chdir|ENOENT|EACCES' 定位文件訪問失敗。