溫馨提示×

Ubuntu MariaDB常見故障如何解決

小樊
42
2025-10-18 17:33:06
欄目: 云計算

Ubuntu MariaDB常見故障及解決方法

1. 服務無法啟動

  • 檢查服務狀態:使用sudo systemctl status mariadb查看服務是否運行,若未運行會顯示錯誤信息。
  • 查看錯誤日志:通過sudo tail -n 50 /var/log/mysql/error.log定位具體錯誤(如配置錯誤、權限問題)。
  • 解決常見子問題
    • 權限問題:確保數據目錄(/var/lib/mysql)屬主為mysql用戶,執行sudo chown -R mysql:mysql /var/lib/mysql;目錄權限設為755,執行sudo chmod -R 755 /var/lib/mysql。
    • 配置文件錯誤:檢查/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf),確認bind-address、port等配置正確(如bind-address設為0.0.0.0允許遠程連接)。
    • 磁盤空間不足:使用df -h查看磁盤使用情況,清理不必要的文件(如/tmp目錄)或擴容磁盤。
    • AppArmor限制:臨時禁用AppArmor(sudo aa-disable /etc/apparmor.d/usr.sbin.mysqld),或修改/usr/lib/systemd/system/mariadb.service中的ProtectHomefalse,然后重啟服務。

2. 無法連接到服務器

  • 檢查服務運行狀態:確保MariaDB服務已啟動(sudo systemctl status mariadb),未啟動則執行sudo systemctl start mariadb。
  • 驗證防火墻設置:允許3306端口(MariaDB默認端口),執行sudo ufw allow 3306/tcp,然后sudo ufw reload。
  • 確認配置文件:檢查/etc/mysql/mariadb.conf.d/50-server.cnf中的bind-address,若為127.0.0.1(僅本地連接),改為0.0.0.0(允許遠程連接),重啟服務。
  • 檢查網絡連接:使用ping <服務器IP>測試網絡連通性,telnet <服務器IP> 3306驗證端口是否可達。
  • 授權遠程訪問:登錄MariaDB(mysql -u root -p),執行GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'%表示允許所有主機),然后FLUSH PRIVILEGES。

3. 忘記root密碼

  • 停止服務sudo systemctl stop mariadb。
  • 安全模式啟動sudo mysqld_safe --skip-grant-tables &(跳過權限檢查)。
  • 重置密碼:登錄MariaDB(mysql -u root),執行FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'(替換new_password為新密碼)。
  • 重啟服務sudo mysqladmin -u root -p shutdown關閉服務,sudo systemctl start mariadb正常啟動。

4. 遠程連接失敗

  • 檢查bind-address:確保/etc/mysql/mariadb.conf.d/50-server.cnf中的bind-address設為0.0.0.0(允許遠程連接),重啟服務。
  • 開放防火墻端口sudo ufw allow 3306/tcp,sudo ufw reload。
  • 授權遠程用戶:登錄MariaDB,執行CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'(創建遠程用戶),GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'%'(授權指定數據庫權限),FLUSH PRIVILEGES。
  • 檢查網絡連通性:客戶端使用ping <服務器IP>測試網絡,telnet <服務器IP> 3306驗證端口可達。

5. 主從同步出錯

  • 跳過錯誤命令:停止從庫同步(STOP SLAVE;),跳過當前錯誤(SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;),重啟同步(START SLAVE;)。
  • 查看同步狀態:執行SHOW SLAVE STATUS\G,檢查Slave_IO_RunningSlave_SQL_Running是否為Yes,Last_Error字段查看具體錯誤。

6. 連接被拒絕

  • 檢查服務狀態:確保MariaDB服務運行(sudo systemctl status mariadb)。
  • 驗證socket文件:若出現“Can’t connect to local MySQL server through socket”錯誤,檢查/var/run/mysqld/mysqld.sock是否存在,若不存在則創建符號鏈接(sudo ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock)。
  • 檢查用戶權限:登錄MariaDB,執行SELECT user, host FROM mysql.user;,確保用戶的主機字段包含localhost(本地連接)或%(遠程連接)。

7. 字符編碼問題

  • 導出/導入時指定編碼:導出數據時使用LOAD DATA INFILE '/data/file.txt' INTO TABLE table_name CHARACTER SET 'utf8mb4'(指定源文件編碼);導入時確保表字符集與文件一致(如ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4)。
  • 修改配置文件:在/etc/mysql/mariadb.conf.d/50-server.cnf中添加[mysqld]部分,設置character-set-server = utf8mb4、collation-server = utf8mb4_unicode_ci,重啟服務。

8. max_connect_errors導致連接被阻塞

  • 解鎖主機:執行mysqladmin flush-hosts -u root -p(臨時解決)。
  • 提高閾值:登錄MariaDB,執行SET GLOBAL max_connect_errors = 1000(臨時調整);或在/etc/mysql/mariadb.conf.d/50-server.cnf中添加max_connect_errors = 1000(永久生效),重啟服務。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女