PHPMyAdmin (PMA) - отличный бесплатный веб-клиент с открытым исходным кодом, который может использоваться для более простого взаимодействия с MySQL и базами данных приложений. Я опишу, как установить его, защитить его и некоторые распространенные сценарии, с помощью которых он может помочь вам в администрировании базы данных. Вот онлайн-демо PMA для вас.
В дополнение к визуальному графическому интерфейсу для операций с базой данных, я также благодарен за возможность запуска команд SQL из командной строки через мой браузер без необходимости входа на сервер через SSH. Например, некоторые WiFi-соединения и мобильные точки доступа регулярно прерывают постоянные сеансы SSH, что делает работу с базой данных проблематичной.
Установка PHPMyAdmin
Начало работы с PMA довольно простое в Linux. Я опишу, как это сделать с Ubuntu 14.x в Digital Ocean. Войдите на свой сервер через SSH.
apt-get install phpmyadmin
Вы можете использовать настройки по умолчанию во время установки или настроить их по своему усмотрению.
Как только вы ограничите доступ MySQL только к localhost (что вам нужно), в MySQL не будет портов для удаленного доступа для хакера, чтобы попытаться получить доступ. Они могут попытаться проникнуть через SSH или попробовать атаки SQL-инъекций на ваши приложения, но они не могут напрямую атаковать базу данных. После установки PMA кто угодно может запускать сетевые атаки против него, чтобы получить контроль над вашей базой данных, поэтому требуется тщательная проверка.
При настройке PMA рекомендуется несколько предосторожностей.
1. Используйте очень надежные пароли для всех ваших учетных записей MySQL, особенно для учетной записи root. например 25 символов для пароля root.
2. Используйте разные учетные записи и привилегии MySQL для каждого приложения/сайта, работающих на одном сервере. Таким образом, если один пароль взломан, база данных только одного сайта скомпрометирована.
3. Измените URL-адрес по умолчанию, используемый PMA. Таким образом, люди не могут посетить http://yourblog.com/phpmyadmin. Хотя эта мера безопасности из-за неизвестности не является очень эффективным методом, она добавляет некоторую защиту.
Добавьте псевдоним в файл apache.conf
:
nano /etc/phpmyadmin/apache.conf
Alias /myobscuredpma /usr/share/phpmyadmin
Перезапустите apache:
service apache2 reload
Затем, чтобы получить доступ к PMA, посетите http://yourblog.com/myobscuredpma
Если вам нужно изменить свой пароль PHPMyAdmin, вы можете отредактировать config-db.php
здесь:
nano /etc/phpmyadmin/config-db.php
4. Настройте веб-аутентификацию для сайта PMA. Это потребует ввода дополнительного пароля для доступа к PMA, в дополнение к вашему паролю базы данных, например:
Чтобы настроить ограничения пользователя Apache, выполните следующие действия:
Установите htpasswd
как часть apache2-utils:
apt-get install apache2-utils
Создайте каталог для хранения ваших паролей:
mkdir /etc/htpasswd
Добавить поддержку htaccess
для PMA:
nano /etc/phpmyadmin/apache.conf
Add AllowOverride All
ниже
<Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All
Настройте аутентификацию пользователя для PMA:
nano /usr/share/phpmyadmin/.htaccess
AuthType BasicAuthName "Login Required for Access"AuthUserFile /etc/htpasswd/.htpasswdRequire valid-user
Установить свой пароль:
htpasswd -c /etc/htpasswd/.htpasswd username
И перезапустите Apache:
service apache2 restart
Перейдите на свой сайт PMA, и вам будет предложено ввести свое имя пользователя и пароль, как показано выше.
Использование PHPMyAdmin во время веб-разработки
1. Создание и удаление баз данных
Я считаю PMA особенно полезным на этапах разработки и тестирования, где я могу захотеть сбросить базу данных или выполнить резервное копирование.
Без PMA я бы выполнил вход на мой сервер через SSH. Войдите в MySQL, а затем запустите:
create database myapp; grant all privileges on myapp_database.* TO "your-mysql-username"@"localhost" identified by "your-mysql-password"; flush privileges;
С помощью PMA вы можете запускать любой запрос командной строки с помощью визуального интерфейса. Перейдите на вкладку SQL и вставьте инструкции базы данных MySQL выше. Затем нажмите Перейти, чтобы создать базу данных.
Или вы можете напрямую использовать визуальный интерфейс:
Вы также можете добавить пользователей и определить привилегии таким образом. Перейдите на вкладку привилегий:
Нажмите Add User и определите желаемые привилегии для базы данных:
Для вашей обычной учетной записи базы данных вы можете установить флажки в квадратах Data и Structure.
Чтобы удалить базу данных, перейдите в меню Databases. Щелкните базу данных, которую вы хотите сбросить, и нажмите Drop:
2. Резервное копирование базы данных
Это очень хорошая идея - делать резервное копирование базы данных приложений, прежде чем выполнять какие-либо расширенные операции над обновлением базы данных или кода. Если что-то пойдет не так, вы сможете восстановить свой сайт из резервной копии.
Используя веб-интерфейс PMA, нажмите на свою базу данных, откройте вкладку Export и выберите Custom.
Включите "Add Drop Table / View / Procedure / Function / Event" statement":
Когда вы нажмете Go, PMA загрузит резервную копию всей вашей базы данных. Если у вас параметры таймаута PHP Apache неправильно настроены, некоторые продолжительные загрузки файлов могут превышать таймаут и завершаться неудачей. Вы можете настроить это в PHP.ini
, как я описываю на своем сайте.
3. Тестирование запросов
PMA фантастически удобен для тестирования ваших SQL-запросов во время разработки. Когда я создал Geogram (см. также мой предстоящий урок MapApp on Tuts+), мне нужно было изучить и протестировать ряд сложных запросов геолокации, например, найти ближайший район к моему адресу. PMA сделал это намного проще.
Выберите свою базу данных, нажмите Query. Вставьте или отредактируйте сложные запросы и протестируйте их непосредственно из PMA:
Когда я отработал свои запросы, мне было легче написать программный код ActiveRecord. Как пример:
$criteria = new CDbCriteria;$criteria->together=true;$criteria->having= "distance < 100";$criteria->order = "distance ASC";$criteria->with = array("place_geometry"=>array("select"=>"place_id,center,".new CDbExpression("(3959 * acos( cos( radians(".$lat.") ) * cos( radians( X(center) ) ) * cos( radians( Y(center) ) - radians(".$lon.") ) + sin( radians(".$lat.") ) * sin( radians( X(center) ) ) )) as distance"))); $dataProvider = new CActiveDataProvider(Place::model()->active()->includesMember($id), array("criteria" => $criteria, "pagination" => array( "pageSize" => 10, ), ));
4. Восстановление записей в базе данных
Если вы разработчик, у вас наверняка бывали ошибки в приложении, повреждающем вашу базу данных. Я прав?
Например, некоторые из моих приложений для управления электронной почтой иногда зацикливаются на необычных входящих сообщениях; эти ошибки трудно найти при обычном тестировании. Когда это происходит, я нашел полезным изменять базу данных напрямую с помощью PMA, чтобы разблокировать мои задачи и снова запустить сайт. В некоторых случаях просто возможность легко просматривать таблицы может помочь вам определить, что сломано.
В PMA откройте базу данных и выберите свою таблицу. Дважды щелкните по столбцу, чтобы редактировать его. Внесите необходимые изменения и кликните вне ячейки:
5. Сброс базы данных для миграции
Если вы используете фреймворк (например, Yii), вы можете использовать программную миграцию базы данных. Миграции баз данных упрощают разработку и обновление ваших приложений. Тем не менее, их тестирование может нарушить работу в локальной базе данных.
Чаще всего я сталкиваюсь с ошибками миграции, и я не могу выполнить миграцию вверх или вниз из-за необработанных индексов, внешних ключей или таблиц. В этом случае я могу использовать PMA для удаления таблицы и удаления ненужных индексных файлов.
В PMA выберите свою базу данных, перейдите на вкладку SQL и введите SQL для удаления внешнего ключа или индекса. Вот несколько примеров:
Надеюсь, вы нашли урок полезным. Пожалуйста, размещайте любые комментарии, исправления или дополнительные идеи ниже. Вы можете просматривать мои другие уроки Tuts+ на моей странице автора или следовать за мной в Twitter @reifman.