Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> phpmyadmin

Настройка phpmyadmin

Автор: arksu.


Как то раз зашел я на сайт разработчиков phpmyadmin - www.phpmyadmin.net, походил по ссылкам и увидел там одну хитрую фишку - Дизайнер таблиц (pma.cihar.com/trunk-config/). И решил во чтобы то ни стало ее у себя заюзать.



После получаса копания мануалов стало понятно для того чтобы ее заюзать нужно создать отдельную базу для phpmyadmin в которой она хранит свои данные:
1. добавить служебную базу данных phpmyadmin
2. исправить конфиг config.inc.php - для работы с этой БД

я не стал ставить из портов, все равно phpmyadmin - это всего лишь набор php скриптов и ничего здесь не компилится по большому счету. поэтому скачал свежую версию, на момент написания статьи это 3.1.0-rc1 да и хотелось "идти в ногу с прогрессом" (хотя уже доступна и 3.2.0 правда девелоп  :)

Чтобы добавить базу - в составе phpmyadmin есть скрипты, лежат они в папке scripts каталога phpmyadmin
[root@ukgw phpmyadmin ]# cd /usr/local/www/phpmyadmin/scripts/
[root@ukgw scripts ]# ll
total 92
-rw-r--r-- 1 root wheel 1,8K 18 ноя 04:23 check_lang.php
-rwxr-xr-x 1 root wheel 400B 18 ноя 04:23 convertcfg.pl
-rwxr-xr-x 1 root wheel 7,9K 18 ноя 04:23 create-release.sh
-rw-r--r-- 1 root wheel 5,7K 18 ноя 04:23 create_tables.sql
-rw-r--r-- 1 root wheel 2,7K 18 ноя 04:23 decode_bug.php
-rwxr-xr-x 1 root wheel 1,1K 18 ноя 04:23 find_unused_messages.sh
-rwxr-xr-x 1 root wheel 2,1K 18 ноя 04:23 lang-cleanup.sh
-rwxr-xr-x 1 root wheel 392B 18 ноя 04:23 remove_control_m.sh
-rw-r--r-- 1 root wheel 1,9K 18 ноя 04:23 signon.php
-rwxr-xr-x 1 root wheel 4,9K 18 ноя 04:23 upgrade.pl
-rw-r--r-- 1 root wheel 6,0K 18 ноя 04:23 upgrade_tables_mysql_4_1_2+.sql

здесь нам интересно всего 2 файла
create_tables.sql - создание таблиц
upgrade_tables_mysql_4_1_2+.sql - их апгрейд под версию мускула 4.1 и выше ( я использую 5.1 - поэтому необходимо проапгрейдить )

[root@ukgw scripts ]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5212
Server version: 5.1.26-rc FreeBSD port: mysql-server-5.1.26

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> source create_tables.sql
...........................................
mysql> source upgrade_tables_mysql_4_1_2+.sql

база создана, по дефолту называется phpmyadmin. теперь необходимо произвести еще пару действий. вот выдержка из документации

The following example assumes you want to use pma as the controluser and pmapass as the controlpass, but this is only an example: use something else in your file! Input these statements from the phpMyAdmin SQL Query window or mysql command–line client.
Of course you have to replace localhost with the webserver's host if it's not the same as the MySQL server's one.
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)
   ON mysql.tables_priv TO 'pma'@'localhost';
If you want to use the many new relation and bookmark features:
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';


то бишь нам нужно выполнить еще несколько запросов:
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)
    ON mysql.tables_priv TO 'pma'@'localhost';

и еще один (тут подставляем имя базы phpmyadmin)
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';

осталось поправить конфиг самого phpmyadmin - чтобы он увидел базу =)
приведу свой файл config.inc.php
<?php
/* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '****';


$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['compress'] = false;

/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';

/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; // указали базу
$cfg['Servers'][$i]['controluser'] = 'pma'; // юзер для работы с базой
$cfg['Servers'][$i]['controlpass'] = 'pmapass'; //  его пасс

// ну а дальше названия служебных таблиц
$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]['designer_coords'] = 'pma_designer_coords';
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';


$cfg['blowfish_secret'] = '**************';
?>

ВСЕ! после этих нехитрых манипуляций при выборе базы появляется новая вкладка "Дизайнер" - которая судя по всему написана на AJAX и дает возможно визуально видеть связи между таблицами, а также их редактировать, генерировать полный отчет о структуре выбранной базы данных в PDF формате по всем таблицам и полной диаграммой связей (после того как показал начальству - у тех глаза на лоб полезли что такое можно делать в мускуле за который никому ниче платить не надо), также можно прямо тут создавать связи между полями таблиц...


Да и много других вкусностей можно теперь делать



размещено: 2008-11-26,
последнее обновление: 2008-11-27,
автор: arksu


nikll, 2008-11-27 в 11:13:09

Нифига!!! вот ты раскопал блин, я его всю жизнь в дефолте ставил и даже не подозревал о таких его фишках!
Статья ништяк!

freeman_tnu, 2008-11-27 в 13:20:31

Что-то не отображаются в дизайнере у меня связи ни в одной базе, либо у меня все базы без связей ))) Вроде все делал как и автор...

arksu, 2008-11-27 в 14:43:48

по дефолту таблицы создаются без связей)))
их можно самому добавить в дизайнере таблиц и тогда они будут отображатся

L!Ner, 2008-12-08 в 5:57:14

Да там ещё много неизвестного.. доку надо брать в руки.. себе в to-do поставлю статью дополнить..

HOSTER, 2009-01-13 в 17:22:38

гг, сколько лет юзаю даже не знал ))

alik, 2009-02-02 в 7:48:53

Реально удивлен, автор да ты волшебник!
Так глубоко залесть. Жесть!

nikll, 2009-02-06 в 4:40:29

А все эти связи имеют какое либо практичесткое значение или это сугубо для визуального представления?

arksu, 2009-02-06 в 8:17:38

имеют. как минимум пых при редактировании связанных полей подставляет сразу конечные значения (проверено), как максимум создает связи в бд мускула, за счет которых увеличивается производительность разых запросов (UNION, JOIN) (не проверял)

nikll, 2009-02-06 в 13:41:00

Ты гониш, какие связи в бд? единственная функция этой фичи это типа все нарисовать красиво.
Специально иследовал логи мускула на предмет того что phpmyadmin делает при создании связей, вот список кроме различных select'ов:

INSERT INTO pma_designer_coords (db_name, table_name, x, y, v, h) VALUES ('test', 'qwe', '685', '281', '1', '1');

DELETE FROM pma_designer_coords WHERE `db_name` = 'test' AND `table_name` = 'qwer';

INSERT INTO pma_designer_coords (db_name, table_name, x, y, v, h) VALUES ('test', 'qwer', '685', '327', '1', '1');

INSERT INTO `phpmyadmin`.`pma_relation`(master_db, master_table, master_field, foreign_db, foreign_table, foreign_field) values('test', 'qwe', 'id2', 'test', 'qwer','id');


так обьясни мне каким образом появляются мистические связи в самой бд от которых по твоим словам должна расти производительность если кроме редактированния таблиц самого phpmyadmin'a ничего не происходит?

nikll, 2009-02-06 в 13:45:46

единственное что хотябы отдаленно делает внутреннии связе это представления (view) , подробнее вот тут вот http://www.mysql.ru/docs/gruber/mg20.html

arksu, 2009-02-06 в 13:49:43

ты внимательно читал предыдущий комент?

как максимум создает связи в бд мускула, за счет которых увеличивается производительность разых запросов (UNION, JOIN) (не проверял)

ясно написал: не проверял, молодец что проверил =)
по поводу связей phpmyadmin создает для себя и рулить базой именно через phpmyadmin становица легче - т.к. подставляются конечные значения связанного столбца

akrsu, 2009-02-06 в 13:51:43

и причем здесь представления???? (views)
не понял. это совсем из другой степи и к связям в бд которые создает phpmyadmin никак не относица

gyurza2000, 2009-07-31 в 18:42:14

Делаю по статье, ввожу в браузере путь до phpmyadmin/index.php, а мне в ответ:
Wrong permissions on configuration file, should not be world writable!

Ну и какие так права должны быть?

AIR, 2009-08-13 в 0:20:20

Для установки требуэтся зависимость PDFlib-Lite-7.0.3.tar.gz , которой нигде нет !

AIR, 2009-08-13 в 0:25:42

...
решыл:  # make config
       [ ] PDF       PDFlib support (implies GD)
       # make && make install

DEM, 2011-03-04 в 11:42:13

Всё завелось с пол пинка) Едиственное что в config.inc.php пришлось добавить ещё одну строчку
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0443 секунд
Из них PHP: 26%; SQL: 74%; Число SQL-запросов: 79 шт.
Исходный размер: 36117; Сжатая: 9423