網頁

2011年8月5日 星期五

MySQL管理工具(phpMyAdmin)

說到MySQL管理工具,phpMyAdmin是免費及最常用的工具了,由PHP寫成,所有資料庫管理、備份、回存、SQL操作都可以由此工具完成。


安裝 phpMyAdmin
1. 請至官方網站下載最新版本。
2. 將下載的檔案解壓縮至WEBROOT目錄(D:\WebServer\wwwroot)。
3. 複製config.sample.inc.php成config.inc.php。
4. 修改config.inc.php
   $cfg['Servers'][$i]['auth_type'] = 'http';  /* cookie改成http */
   $cfg['Servers'][$i]['AllowNoPassword'] = true;  /*要改成true,因為MySQL root預設為空白 */
5. 輸入 http://localhost:8081/phpmyadmin/index.php ,就可以進入phpmyadmin來管理MySQL了。

雖然順利登入了,網頁畫面往下拉,phpmyadmin會把現有的問題顯示出來。
A. 有新的phpmyadmin可用,請考慮升級。
   這不是太大的問題,要更新時到官方網站下載新版本就行了,往後常會遇到,千萬記得備份你的config.inc.php檔案。
B. phpmyadmin高級功能未全部設置,部分功能不可用。
   解決方式都可以在PmaWiki找到
   a. 新增control user
    GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
    GRANT SELECT (
        Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
        Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
        File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
        Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
        Execute_priv, Repl_slave_priv, Repl_client_priv
        ) ON mysql.user TO 'pma'@'localhost';
    GRANT SELECT ON mysql.db TO 'pma'@'localhost';
    GRANT SELECT ON mysql.host TO 'pma'@'localhost';
    GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)

   b. 執行create_tables.sql,檔案位於phpMyAdmin\scripts目錄下。
   c. 授與權限
    GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';
   d. 修改config.inc.php,把以下設定前面//都拿掉就可以了
    /* User used to manipulate with storage */
    $cfg['Servers'][$i]['controluser'] = 'pma';
    $cfg['Servers'][$i]['controlpass'] = 'pmapass';

    /* Storage database and tables */
    $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
    $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
    $cfg['Servers'][$i]['relation'] = 'pma_relation';
    $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
    $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
    $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
    $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
    $cfg['Servers'][$i]['history'] = 'pma_history';
    $cfg['Servers'][$i]['tracking'] = 'pma_tracking';
    $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
    $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';

   e. 記得重啟apache來讓設定生效,重啟是最保險的方式。
   Note:執行完create_tables.sql 還一直顯示有問題,請清session file

C. 您配製文件中的配置(空密碼的root)... ,主要說沒設置密碼容易被入侵,請設置密碼。
   照以前的版本,應該是蠻容易完成一件事,可是試了最近的幾個版本,都一直無效。
   從一般設定/修改密碼去設定完成後,我用mysqladmin去驗證,一樣還是不需要密碼,就可以登入了,不管是用MySQL 4.0或MySQL 4.1x的加密方式,就是無效。就只好用mysql本身提供的工具來完成這件事了。
   D:\WebServer\mysql\bin>mysql -u root
   Welcome to the MySQL monitor. Commands end with ; or \g.
   Your MySQL connection id is 8
   Server version: 5.5.14-log MySQL Community Server (GPL)

   Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

   Oracle is a registered trademark of Oracle Corporation and/or its
   affiliates. Other names may be trademarks of their respective
   owners.

   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   mysql>use mysql; (切換資料庫)
   Database changed
   mysql> update user set password=password('yourpasswordhere') where user='root'; (更新密碼)
   Query OK, 0 rows affected (0.01 sec)
   Rows matched: 3 Changed: 0 Warnings: 0
   mysql> DELETE FROM user WHERE User=''; (刪除空帳號,維護系統安全)
   Query OK, 1 row affected (0.00 sec)
   mysql> FLUSH PRIVILEGES; (即時更新上面設定)
   Query OK, 0 rows affected (0.00 sec)
   mysql> quit;
   Bye

D. 你的PHP MySQL 版本和 MySQL伺服器版本不合。
   基本上不用太擔心這個,PHP預設是5.x版,已經夠使用了。

這時你的phpmyadmin基本上應該都是頭好壯壯,沒其他大問題。

其他常見問題
1. 正體中文
   新出的版本都沒有正體中文,所以當phpmyadmin再抓OS預設語言時,就會以簡體中文顯示,這時就算你將config.inc.php檔案中的預設語言改成 $cfg['DefaultLang'] = 'zh_TW' 一樣不會有任何作用,請至網站下載(ok 3.4.2) Traditional Chinese translation for 3.4.x,並將下載回來的檔案放置WebROOT底下phpMyAdmin\locale\zh_TW\LC_MESSAGES目錄中。

2. 使用cookie方式登入時,常會出現下圖錯誤。

請確認php.ini內有將extension=php_mcrypt.dll打開,並確定啟動apache時,php能順利帶起mcrypt這模組。

3. session問題

3.1 請檢查php.ini中session.save_path設定的路徑,並確保有權限存取此目錄。
3.2 將下列語法存成session_test.php,可以用來檢查session相關所有訊息。
<?php
ini_set('display_errors', 'On');
error_reporting(6143);

session_start();

$sessionSavePath = ini_get('session.save_path');

echo '<br><div style="background:#def;padding:6px">'
   , 'If a session could be started successfully <b>you should'
   , ' not see any Warning(s)</b>, otherwise check the path/folder'
   , ' mentioned in the warning(s) for proper access rights.<hr>';

if (empty($sessionSavePath)) {
   echo 'A "<b>session.save_path</b>" is currently',
      ' <b>not</b> set.<br>Normally "<b>';
   if (isset($_ENV['TMP'])) {
      echo $_ENV['TMP'], '</b>" ($_ENV["TMP"]) ';
   } else {
      echo '/tmp</b>" or "<b>C:\tmp</b>" (or whatever',
         ' the OS default "TMP" folder is set to)';
   }
   echo ' is used in this case.';
} else {
   echo 'The current "session.save_path" is "<b>',
      $sessionSavePath, '</b>".';
}

echo '<br>Session file name: "<b>sess_', session_id()
   , '</b>".</div><br>';
?>

當所有session設定檢查無誤,應會出現類似下面畫面結果。


沒有留言:

張貼留言