跳到主要內容

Ubuntu上的MySQL出現Can't create/write to file

最近遇到一個問題如下:

/usr/sbin/mysqld: Can't create/write to file '/mysqltmp/ibXc3yTC' (Errcode: 13)
170619  3:32:30  InnoDB: Error: unable to create temporary file; errno: 13
170619  3:32:30 [ERROR] Plugin 'InnoDB' init function returned error.
170619  3:32:30 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
170619  3:32:30 [ERROR] Unknown/unsupported storage engine: InnoDB
170619  3:32:30 [ERROR] Aborting

追蹤流程:
先查 MySQL ErrorCode:13
發現是權限被拒,因此就是資料夾權限問題

這時查看一下權限
drwxrwxrwx   2 root root  4096 Jun 19 03:33 mysqltmp

發現已經是 777 如果不是,就執行以下動作,mysqltmp是資料夾名哦
chown roor.roor mysqltmp
chmod 777 mysqltmp

 再執行一次,仍然不行,因此繼續找其他權限控制的軟體。
發現在 /etc/apparmor.d/usr.sbin.mysqld 有權限限制的設定

因此就在此檔案裡加上
/mysqltmp r,
/mysqltmp/** rw,

接著重新載入設定檔
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

這時再啟動MySQL應該就會成功了 :D

參考資料:

留言

這個網誌中的熱門文章

input 陣列 - PHP

要如何在 input 裡面回傳陣列資料呢? 就寫了一個簡單的小範例。 以下是 php 原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?php /** 印出Get裡面的資訊 **/ if ( ! empty ( $_GET )) print_r ( $_GET ); /** 初始資料設定 **/ $id = array ( 0 => '#0001' , 1 => '#0002' ); $data [ $id [ 0 ]] = array ( 'date' => '2012-08-12' , 'note' => '上海出差' ); $data [ $id [ 1 ]] = array ( 'date' => '2012-08-17' , 'note' => '北京出差' ); /** 印出表單資訊 **/ echo "<form method='get'>" ; foreach ( $data as $key => $row ){ echo "<input type='text' name=' { $key } [date]' value=' { $row [ 'date' ] } ' />" ; echo "<input type='text' name=' { $key } [note]' value=' { $row [ 'note' ] } ' />" ; echo "<br />" ; } echo "<input type='submit' value='送出' />" ; e...