phpMyAdmin 4.7 unter CentOS 7.x mit Apache 2.4, PHP 7.2 und PHP-FPM installieren und einrichten
Zur komfortablen Administration unseres MariaDB-Datenbankserver unter CentOS 7.x greifen wir auf das PHP-Projekt phpMyAdmin zurück. Viele der Funktionen, die die WEB-GUI zur Verfügung stellt können ohne Detailkenntnisse zu den einzelnen SQL-Befehlen ausgeführt werden. So lassen sich z.B. sehr leicht und einfach Datensätze suchen, löschen und natürlich auch einfügen. Das Generieren und Löschen einzelner Datenbanken und Tabellen geht natürlich auch recht einfach und sicher von der Hand.
Ein weiterer Vorteil der WEB-GUI, die natürlich abhängig von der Konfiguration und den Zugriffsrechten, von überall her erreicht werden kann, ist der Umstand, dass von einer Stelle aus mehrere Datenbank-Systeme/-hosts administriert werden können.
Installation
PHP-Voraussetzungen
Für unseren komfortablen Weg der Administration unseres MariaDB-Servers muss natürlich ein funktionstüchtiger MariaDB-Server unter CentOS 7.x und entweder ein passender Apache-Webserver oder der Webserver NGiNX zur Verfügung stehen. Es werden werden von phpMyAdmin folgende PHP-Module benötigt:
- php72u
- php72u-cli
- php72u-common
- php72u-gd
- php72u-mbstring
- php72u-mcrypt
- php72u-mysqlnd
- php72u-pdo
Diese Pakete installieren wir, sofern diese nicht schon bei der Grundinstallation unseres Apache-Webservers erfolgte, mit Hilfe von YUM
# yum install php72u php72u-cli php72u-common php72u-gd php72u-mbstring php72u-mcrypt php72u-mysqlnd php72u-pdo -y
phpMyAdmin
Das EPEL Repositories beinhaltet zwar ein RPM für phpMyAdmin, dies jedoch nur in einer relativ konservativen Version. Wir werden daher das Paket von der Homepage des Projekts direkt herunterladen und manuell installieren.
Zunächst wechseln wir in unser lokales Programm-Archiv-Verzeichnis.
# cd /usr/local/src/packages/
Anschliessend holen wir uns das aktuelle Paket auf unseren Rechner.
# wget https://files.phpmyadmin.net/phpMyAdmin/4.7.4/phpMyAdmin-4.7.4-all-languages.zip
Zu guter Letzt entpacken wir das Archiv an Ort und Stelle, so z.B. in das Verzeichnis /usr/share/.
# unzip /usr/local/src/packages/phpMyAdmin-4.7.4-all-languages.zip -d /usr/share/
Für die weitere Konfiguration benennen wir nun noch das Verzeichnis um.
# mv /usr/share/phpMyAdmin-4.7.4-all-languages/ /usr/share/phpMyAdmin/
Da wir den Alternativer FastCGI Process Manager einsetzen passen wir noch die Verzeichnis und Dateirechte entsprechend an.
# chown -R php-fpm: /usr/share/phpMyAdmin/
Den Inhalt des Zielverzeichnis enthält nun:
/usr/share/phpMyAdmin/ ├── ajax.php ├── browse_foreigners.php ├── ChangeLog ├── changelog.php ├── chk_rel.php ├── composer.json ├── composer.lock ├── config.sample.inc.php ├── CONTRIBUTING.md ├── db_central_columns.php ├── db_datadict.php ├── db_designer.php ├── db_events.php ├── db_export.php ├── db_import.php ├── db_operations.php ├── db_qbe.php ├── db_routines.php ├── db_search.php ├── db_sql_autocomplete.php ├── db_sql_format.php ├── db_sql.php ├── db_structure.php ├── db_tracking.php ├── db_triggers.php ├── DCO ├── doc │ └── html │ ├── bookmarks.html │ ├── charts.html │ ├── config.html │ ├── copyright.html │ ├── credits.html │ ├── developers.html │ ├── faq.html │ ├── genindex.html │ ├── glossary.html │ ├── _images │ │ ├── chart.png │ │ ├── column_chart.png │ │ ├── line_chart.png │ │ ├── pie_chart.png │ │ ├── pma-relations-links.png │ │ ├── pma-relations-relation-link.png │ │ ├── pma-relations-relation-name.png │ │ ├── pma-relations-relation-view-link.png │ │ ├── query_result_operations.png │ │ ├── scatter_chart.png │ │ ├── spline_chart.png │ │ ├── timeline_chart.png │ │ └── usergroups.png │ ├── import_export.html │ ├── index.html │ ├── intro.html │ ├── other.html │ ├── privileges.html │ ├── relations.html │ ├── require.html │ ├── search.html │ ├── searchindex.js │ ├── settings.html │ ├── setup.html │ ├── _sources │ │ ├── bookmarks.txt │ │ ├── charts.txt │ │ ├── config.txt │ │ ├── copyright.txt │ │ ├── credits.txt │ │ ├── developers.txt │ │ ├── faq.txt │ │ ├── glossary.txt │ │ ├── import_export.txt │ │ ├── index.txt │ │ ├── intro.txt │ │ ├── other.txt │ │ ├── privileges.txt │ │ ├── relations.txt │ │ ├── require.txt │ │ ├── settings.txt │ │ ├── setup.txt │ │ ├── transformations.txt │ │ ├── user.txt │ │ └── vendors.txt │ ├── _static │ │ ├── ajax-loader.gif │ │ ├── basic.css │ │ ├── classic.css │ │ ├── comment-bright.png │ │ ├── comment-close.png │ │ ├── comment.png │ │ ├── default.css │ │ ├── doctools.js │ │ ├── down.png │ │ ├── down-pressed.png │ │ ├── file.png │ │ ├── jquery.js │ │ ├── minus.png │ │ ├── plus.png │ │ ├── pygments.css │ │ ├── searchtools.js │ │ ├── sidebar.js │ │ ├── underscore.js │ │ ├── up.png │ │ ├── up-pressed.png │ │ └── websupport.js │ ├── transformations.html │ ├── user.html │ └── vendors.html ├── error_report.php ├── examples │ ├── config.manyhosts.inc.php │ ├── openid.php │ ├── signon.php │ └── signon-script.php ├── export.php ├── favicon.ico ├── gis_data_editor.php ├── import.php ├── import_status.php ├── index.php ├── js │ ├── ajax.js │ ├── chart.js │ ├── codemirror │ │ ├── addon │ │ │ ├── hint │ │ │ │ ├── show-hint.css │ │ │ │ ├── show-hint.js │ │ │ │ └── sql-hint.js │ │ │ ├── lint │ │ │ │ ├── lint.css │ │ │ │ ├── lint.js │ │ │ │ └── sql-lint.js │ │ │ └── runmode │ │ │ └── runmode.js │ │ ├── lib │ │ │ ├── codemirror.css │ │ │ └── codemirror.js │ │ ├── LICENSE │ │ └── mode │ │ ├── javascript │ │ │ └── javascript.js │ │ ├── sql │ │ │ └── sql.js │ │ └── xml │ │ └── xml.js │ ├── common.js │ ├── config.js │ ├── console.js │ ├── cross_framing_protection.js │ ├── db_central_columns.js │ ├── db_operations.js │ ├── db_qbe.js │ ├── db_search.js │ ├── db_structure.js │ ├── db_tracking.js │ ├── doclinks.js │ ├── error_report.js │ ├── export.js │ ├── functions.js │ ├── get_image.js.php │ ├── get_scripts.js.php │ ├── gis_data_editor.js │ ├── import.js │ ├── indexes.js │ ├── jqplot │ │ ├── jquery.jqplot.js │ │ └── plugins │ │ ├── jqplot.barRenderer.js │ │ ├── jqplot.byteFormatter.js │ │ ├── jqplot.canvasAxisLabelRenderer.js │ │ ├── jqplot.canvasTextRenderer.js │ │ ├── jqplot.categoryAxisRenderer.js │ │ ├── jqplot.cursor.js │ │ ├── jqplot.dateAxisRenderer.js │ │ ├── jqplot.highlighter.js │ │ ├── jqplot.pieRenderer.js │ │ └── jqplot.pointLabels.js │ ├── jquery │ │ ├── additional-methods.js │ │ ├── jquery.ba-hashchange-1.3.js │ │ ├── jquery.cookie.js │ │ ├── jquery.debounce-1.0.5.js │ │ ├── jquery.event.drag-2.2.js │ │ ├── jquery.fullscreen.js │ │ ├── jquery-migrate-3.0.0.js │ │ ├── jquery.min.js │ │ ├── jquery.mousewheel.js │ │ ├── jquery.sortableTable.js │ │ ├── jquery.svg.js │ │ ├── jquery.tablesorter.js │ │ ├── jquery-ui.min.js │ │ ├── jquery.uitablefilter.js │ │ ├── jquery-ui-timepicker-addon.js │ │ ├── jquery.validate.js │ │ ├── MIT-LICENSE.txt │ │ └── src │ │ ├── jquery │ │ │ ├── ajax │ │ │ │ ├── jsonp.js │ │ │ │ ├── load.js │ │ │ │ ├── parseXML.js │ │ │ │ ├── script.js │ │ │ │ ├── var │ │ │ │ │ ├── location.js │ │ │ │ │ ├── nonce.js │ │ │ │ │ └── rquery.js │ │ │ │ └── xhr.js │ │ │ ├── ajax.js │ │ │ ├── attributes │ │ │ │ ├── attr.js │ │ │ │ ├── classes.js │ │ │ │ ├── prop.js │ │ │ │ ├── support.js │ │ │ │ └── val.js │ │ │ ├── attributes.js │ │ │ ├── callbacks.js │ │ │ ├── core │ │ │ │ ├── access.js │ │ │ │ ├── DOMEval.js │ │ │ │ ├── init.js │ │ │ │ ├── parseHTML.js │ │ │ │ ├── readyException.js │ │ │ │ ├── ready.js │ │ │ │ ├── ready-no-deferred.js │ │ │ │ ├── stripAndCollapse.js │ │ │ │ ├── support.js │ │ │ │ └── var │ │ │ │ └── rsingleTag.js │ │ │ ├── core.js │ │ │ ├── css │ │ │ │ ├── addGetHookIf.js │ │ │ │ ├── adjustCSS.js │ │ │ │ ├── curCSS.js │ │ │ │ ├── hiddenVisibleSelectors.js │ │ │ │ ├── showHide.js │ │ │ │ ├── support.js │ │ │ │ └── var │ │ │ │ ├── cssExpand.js │ │ │ │ ├── getStyles.js │ │ │ │ ├── isHiddenWithinTree.js │ │ │ │ ├── rmargin.js │ │ │ │ ├── rnumnonpx.js │ │ │ │ └── swap.js │ │ │ ├── css.js │ │ │ ├── data │ │ │ │ ├── Data.js │ │ │ │ └── var │ │ │ │ ├── acceptData.js │ │ │ │ ├── dataPriv.js │ │ │ │ └── dataUser.js │ │ │ ├── data.js │ │ │ ├── deferred │ │ │ │ └── exceptionHook.js │ │ │ ├── deferred.js │ │ │ ├── deprecated.js │ │ │ ├── dimensions.js │ │ │ ├── effects │ │ │ │ ├── animatedSelector.js │ │ │ │ └── Tween.js │ │ │ ├── effects.js │ │ │ ├── event │ │ │ │ ├── ajax.js │ │ │ │ ├── alias.js │ │ │ │ ├── focusin.js │ │ │ │ ├── support.js │ │ │ │ └── trigger.js │ │ │ ├── event.js │ │ │ ├── exports │ │ │ │ ├── amd.js │ │ │ │ └── global.js │ │ │ ├── jquery.js │ │ │ ├── manipulation │ │ │ │ ├── buildFragment.js │ │ │ │ ├── _evalUrl.js │ │ │ │ ├── getAll.js │ │ │ │ ├── setGlobalEval.js │ │ │ │ ├── support.js │ │ │ │ ├── var │ │ │ │ │ ├── rcheckableType.js │ │ │ │ │ ├── rscriptType.js │ │ │ │ │ └── rtagName.js │ │ │ │ └── wrapMap.js │ │ │ ├── manipulation.js │ │ │ ├── offset.js │ │ │ ├── queue │ │ │ │ └── delay.js │ │ │ ├── queue.js │ │ │ ├── selector.js │ │ │ ├── selector-native.js │ │ │ ├── selector-sizzle.js │ │ │ ├── serialize.js │ │ │ ├── traversing │ │ │ │ ├── findFilter.js │ │ │ │ └── var │ │ │ │ ├── dir.js │ │ │ │ ├── rneedsContext.js │ │ │ │ └── siblings.js │ │ │ ├── traversing.js │ │ │ ├── var │ │ │ │ ├── arr.js │ │ │ │ ├── class2type.js │ │ │ │ ├── concat.js │ │ │ │ ├── documentElement.js │ │ │ │ ├── document.js │ │ │ │ ├── fnToString.js │ │ │ │ ├── getProto.js │ │ │ │ ├── hasOwn.js │ │ │ │ ├── indexOf.js │ │ │ │ ├── ObjectFunctionString.js │ │ │ │ ├── pnum.js │ │ │ │ ├── push.js │ │ │ │ ├── rcssNum.js │ │ │ │ ├── rnothtmlwhite.js │ │ │ │ ├── slice.js │ │ │ │ ├── support.js │ │ │ │ └── toString.js │ │ │ └── wrap.js │ │ ├── jquery-ui │ │ │ ├── core.js │ │ │ ├── data.js │ │ │ ├── disable-selection.js │ │ │ ├── effect.js │ │ │ ├── effects │ │ │ │ ├── effect-blind.js │ │ │ │ ├── effect-bounce.js │ │ │ │ ├── effect-clip.js │ │ │ │ ├── effect-drop.js │ │ │ │ ├── effect-explode.js │ │ │ │ ├── effect-fade.js │ │ │ │ ├── effect-fold.js │ │ │ │ ├── effect-highlight.js │ │ │ │ ├── effect-puff.js │ │ │ │ ├── effect-pulsate.js │ │ │ │ ├── effect-scale.js │ │ │ │ ├── effect-shake.js │ │ │ │ ├── effect-size.js │ │ │ │ ├── effect-slide.js │ │ │ │ └── effect-transfer.js │ │ │ ├── escape-selector.js │ │ │ ├── focusable.js │ │ │ ├── form.js │ │ │ ├── form-reset-mixin.js │ │ │ ├── i18n │ │ │ │ ├── datepicker-af.js │ │ │ │ ├── datepicker-ar-DZ.js │ │ │ │ ├── datepicker-ar.js │ │ │ │ ├── datepicker-az.js │ │ │ │ ├── datepicker-be.js │ │ │ │ ├── datepicker-bg.js │ │ │ │ ├── datepicker-bs.js │ │ │ │ ├── datepicker-ca.js │ │ │ │ ├── datepicker-cs.js │ │ │ │ ├── datepicker-cy-GB.js │ │ │ │ ├── datepicker-da.js │ │ │ │ ├── datepicker-de.js │ │ │ │ ├── datepicker-el.js │ │ │ │ ├── datepicker-en-AU.js │ │ │ │ ├── datepicker-en-GB.js │ │ │ │ ├── datepicker-en-NZ.js │ │ │ │ ├── datepicker-eo.js │ │ │ │ ├── datepicker-es.js │ │ │ │ ├── datepicker-et.js │ │ │ │ ├── datepicker-eu.js │ │ │ │ ├── datepicker-fa.js │ │ │ │ ├── datepicker-fi.js │ │ │ │ ├── datepicker-fo.js │ │ │ │ ├── datepicker-fr-CA.js │ │ │ │ ├── datepicker-fr-CH.js │ │ │ │ ├── datepicker-fr.js │ │ │ │ ├── datepicker-gl.js │ │ │ │ ├── datepicker-he.js │ │ │ │ ├── datepicker-hi.js │ │ │ │ ├── datepicker-hr.js │ │ │ │ ├── datepicker-hu.js │ │ │ │ ├── datepicker-hy.js │ │ │ │ ├── datepicker-id.js │ │ │ │ ├── datepicker-is.js │ │ │ │ ├── datepicker-it-CH.js │ │ │ │ ├── datepicker-it.js │ │ │ │ ├── datepicker-ja.js │ │ │ │ ├── datepicker-ka.js │ │ │ │ ├── datepicker-kk.js │ │ │ │ ├── datepicker-km.js │ │ │ │ ├── datepicker-ko.js │ │ │ │ ├── datepicker-ky.js │ │ │ │ ├── datepicker-lb.js │ │ │ │ ├── datepicker-lt.js │ │ │ │ ├── datepicker-lv.js │ │ │ │ ├── datepicker-mk.js │ │ │ │ ├── datepicker-ml.js │ │ │ │ ├── datepicker-ms.js │ │ │ │ ├── datepicker-nb.js │ │ │ │ ├── datepicker-nl-BE.js │ │ │ │ ├── datepicker-nl.js │ │ │ │ ├── datepicker-nn.js │ │ │ │ ├── datepicker-no.js │ │ │ │ ├── datepicker-pl.js │ │ │ │ ├── datepicker-pt-BR.js │ │ │ │ ├── datepicker-pt.js │ │ │ │ ├── datepicker-rm.js │ │ │ │ ├── datepicker-ro.js │ │ │ │ ├── datepicker-ru.js │ │ │ │ ├── datepicker-sk.js │ │ │ │ ├── datepicker-sl.js │ │ │ │ ├── datepicker-sq.js │ │ │ │ ├── datepicker-sr.js │ │ │ │ ├── datepicker-sr-SR.js │ │ │ │ ├── datepicker-sv.js │ │ │ │ ├── datepicker-ta.js │ │ │ │ ├── datepicker-th.js │ │ │ │ ├── datepicker-tj.js │ │ │ │ ├── datepicker-tr.js │ │ │ │ ├── datepicker-uk.js │ │ │ │ ├── datepicker-vi.js │ │ │ │ ├── datepicker-zh-CN.js │ │ │ │ ├── datepicker-zh-HK.js │ │ │ │ └── datepicker-zh-TW.js │ │ │ ├── ie.js │ │ │ ├── jquery-1-7.js │ │ │ ├── keycode.js │ │ │ ├── labels.js │ │ │ ├── plugin.js │ │ │ ├── position.js │ │ │ ├── safe-active-element.js │ │ │ ├── safe-blur.js │ │ │ ├── scroll-parent.js │ │ │ ├── tabbable.js │ │ │ ├── unique-id.js │ │ │ ├── version.js │ │ │ ├── widget.js │ │ │ └── widgets │ │ │ ├── accordion.js │ │ │ ├── autocomplete.js │ │ │ ├── button.js │ │ │ ├── checkboxradio.js │ │ │ ├── controlgroup.js │ │ │ ├── datepicker.js │ │ │ ├── dialog.js │ │ │ ├── draggable.js │ │ │ ├── droppable.js │ │ │ ├── menu.js │ │ │ ├── mouse.js │ │ │ ├── progressbar.js │ │ │ ├── resizable.js │ │ │ ├── selectable.js │ │ │ ├── selectmenu.js │ │ │ ├── slider.js │ │ │ ├── sortable.js │ │ │ ├── spinner.js │ │ │ ├── tabs.js │ │ │ └── tooltip.js │ │ └── README │ ├── keyhandler.js │ ├── line_counts.php │ ├── makegrid.js │ ├── menu-resizer.js │ ├── messages.php │ ├── microhistory.js │ ├── multi_column_sort.js │ ├── navigation.js │ ├── normalization.js │ ├── openlayers │ │ ├── img │ │ │ ├── blank.gif │ │ │ ├── cloud-popup-relative.png │ │ │ ├── drag-rectangle-off.png │ │ │ ├── drag-rectangle-on.png │ │ │ ├── east-mini.png │ │ │ ├── layer-switcher-maximize.png │ │ │ ├── layer-switcher-minimize.png │ │ │ ├── marker-blue.png │ │ │ ├── marker-gold.png │ │ │ ├── marker-green.png │ │ │ ├── marker.png │ │ │ ├── measuring-stick-off.png │ │ │ ├── measuring-stick-on.png │ │ │ ├── north-mini.png │ │ │ ├── panning-hand-off.png │ │ │ ├── panning-hand-on.png │ │ │ ├── slider.png │ │ │ ├── south-mini.png │ │ │ ├── west-mini.png │ │ │ ├── zoombar.png │ │ │ ├── zoom-minus-mini.png │ │ │ ├── zoom-plus-mini.png │ │ │ └── zoom-world-mini.png │ │ ├── OpenLayers.js │ │ ├── src │ │ │ ├── openlayers │ │ │ │ └── lib │ │ │ │ ├── deprecated.js │ │ │ │ ├── Firebug │ │ │ │ │ ├── errorIcon.png │ │ │ │ │ ├── firebug.css │ │ │ │ │ ├── firebug.html │ │ │ │ │ ├── firebug.js │ │ │ │ │ ├── firebugx.js │ │ │ │ │ ├── infoIcon.png │ │ │ │ │ ├── license.txt │ │ │ │ │ ├── readme.txt │ │ │ │ │ └── warningIcon.png │ │ │ │ ├── OpenLayers │ │ │ │ │ ├── Animation.js │ │ │ │ │ ├── BaseTypes │ │ │ │ │ │ ├── Bounds.js │ │ │ │ │ │ ├── Class.js │ │ │ │ │ │ ├── Date.js │ │ │ │ │ │ ├── Element.js │ │ │ │ │ │ ├── LonLat.js │ │ │ │ │ │ ├── Pixel.js │ │ │ │ │ │ └── Size.js │ │ │ │ │ ├── BaseTypes.js │ │ │ │ │ ├── Console.js │ │ │ │ │ ├── Control │ │ │ │ │ │ ├── ArgParser.js │ │ │ │ │ │ ├── Attribution.js │ │ │ │ │ │ ├── Button.js │ │ │ │ │ │ ├── CacheRead.js │ │ │ │ │ │ ├── CacheWrite.js │ │ │ │ │ │ ├── DragFeature.js │ │ │ │ │ │ ├── DragPan.js │ │ │ │ │ │ ├── DrawFeature.js │ │ │ │ │ │ ├── EditingToolbar.js │ │ │ │ │ │ ├── Geolocate.js │ │ │ │ │ │ ├── GetFeature.js │ │ │ │ │ │ ├── Graticule.js │ │ │ │ │ │ ├── KeyboardDefaults.js │ │ │ │ │ │ ├── LayerSwitcher.js │ │ │ │ │ │ ├── Measure.js │ │ │ │ │ │ ├── ModifyFeature.js │ │ │ │ │ │ ├── MousePosition.js │ │ │ │ │ │ ├── NavigationHistory.js │ │ │ │ │ │ ├── Navigation.js │ │ │ │ │ │ ├── NavToolbar.js │ │ │ │ │ │ ├── OverviewMap.js │ │ │ │ │ │ ├── Panel.js │ │ │ │ │ │ ├── Pan.js │ │ │ │ │ │ ├── PanPanel.js │ │ │ │ │ │ ├── PanZoomBar.js │ │ │ │ │ │ ├── PanZoom.js │ │ │ │ │ │ ├── Permalink.js │ │ │ │ │ │ ├── PinchZoom.js │ │ │ │ │ │ ├── Scale.js │ │ │ │ │ │ ├── ScaleLine.js │ │ │ │ │ │ ├── SelectFeature.js │ │ │ │ │ │ ├── SLDSelect.js │ │ │ │ │ │ ├── Snapping.js │ │ │ │ │ │ ├── Split.js │ │ │ │ │ │ ├── TouchNavigation.js │ │ │ │ │ │ ├── TransformFeature.js │ │ │ │ │ │ ├── UTFGrid.js │ │ │ │ │ │ ├── WMSGetFeatureInfo.js │ │ │ │ │ │ ├── WMTSGetFeatureInfo.js │ │ │ │ │ │ ├── ZoomBox.js │ │ │ │ │ │ ├── ZoomIn.js │ │ │ │ │ │ ├── Zoom.js │ │ │ │ │ │ ├── ZoomOut.js │ │ │ │ │ │ ├── ZoomPanel.js │ │ │ │ │ │ └── ZoomToMaxExtent.js │ │ │ │ │ ├── Control.js │ │ │ │ │ ├── Events │ │ │ │ │ │ ├── buttonclick.js │ │ │ │ │ │ └── featureclick.js │ │ │ │ │ ├── Events.js │ │ │ │ │ ├── Feature │ │ │ │ │ │ └── Vector.js │ │ │ │ │ ├── Feature.js │ │ │ │ │ ├── Filter │ │ │ │ │ │ ├── Comparison.js │ │ │ │ │ │ ├── FeatureId.js │ │ │ │ │ │ ├── Function.js │ │ │ │ │ │ ├── Logical.js │ │ │ │ │ │ └── Spatial.js │ │ │ │ │ ├── Filter.js │ │ │ │ │ ├── Format │ │ │ │ │ │ ├── ArcXML │ │ │ │ │ │ │ └── Features.js │ │ │ │ │ │ ├── ArcXML.js │ │ │ │ │ │ ├── Atom.js │ │ │ │ │ │ ├── Context.js │ │ │ │ │ │ ├── CQL.js │ │ │ │ │ │ ├── CSWGetDomain │ │ │ │ │ │ │ └── v2_0_2.js │ │ │ │ │ │ ├── CSWGetDomain.js │ │ │ │ │ │ ├── CSWGetRecords │ │ │ │ │ │ │ └── v2_0_2.js │ │ │ │ │ │ ├── CSWGetRecords.js │ │ │ │ │ │ ├── EncodedPolyline.js │ │ │ │ │ │ ├── Filter │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── Filter.js │ │ │ │ │ │ ├── GeoJSON.js │ │ │ │ │ │ ├── GeoRSS.js │ │ │ │ │ │ ├── GML │ │ │ │ │ │ │ ├── Base.js │ │ │ │ │ │ │ ├── v2.js │ │ │ │ │ │ │ └── v3.js │ │ │ │ │ │ ├── GML.js │ │ │ │ │ │ ├── GPX.js │ │ │ │ │ │ ├── JSON.js │ │ │ │ │ │ ├── KML.js │ │ │ │ │ │ ├── OGCExceptionReport.js │ │ │ │ │ │ ├── OSM.js │ │ │ │ │ │ ├── OWSCommon │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── OWSCommon.js │ │ │ │ │ │ ├── OWSContext │ │ │ │ │ │ │ └── v0_3_1.js │ │ │ │ │ │ ├── OWSContext.js │ │ │ │ │ │ ├── QueryStringFilter.js │ │ │ │ │ │ ├── SLD │ │ │ │ │ │ │ ├── v1_0_0_GeoServer.js │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── SLD.js │ │ │ │ │ │ ├── SOSCapabilities │ │ │ │ │ │ │ └── v1_0_0.js │ │ │ │ │ │ ├── SOSCapabilities.js │ │ │ │ │ │ ├── SOSGetFeatureOfInterest.js │ │ │ │ │ │ ├── SOSGetObservation.js │ │ │ │ │ │ ├── Text.js │ │ │ │ │ │ ├── WCSCapabilities │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── WCSCapabilities.js │ │ │ │ │ │ ├── WCSGetCoverage.js │ │ │ │ │ │ ├── WFSCapabilities │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── WFSCapabilities.js │ │ │ │ │ │ ├── WFSDescribeFeatureType.js │ │ │ │ │ │ ├── WFS.js │ │ │ │ │ │ ├── WFST │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── WFST.js │ │ │ │ │ │ ├── WKT.js │ │ │ │ │ │ ├── WMC │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── WMC.js │ │ │ │ │ │ ├── WMSCapabilities │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ ├── v1_1_1.js │ │ │ │ │ │ │ ├── v1_1_1_WMSC.js │ │ │ │ │ │ │ ├── v1_1.js │ │ │ │ │ │ │ ├── v1_3_0.js │ │ │ │ │ │ │ ├── v1_3.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── WMSCapabilities.js │ │ │ │ │ │ ├── WMSDescribeLayer │ │ │ │ │ │ │ └── v1_1.js │ │ │ │ │ │ ├── WMSDescribeLayer.js │ │ │ │ │ │ ├── WMSGetFeatureInfo.js │ │ │ │ │ │ ├── WMTSCapabilities │ │ │ │ │ │ │ └── v1_0_0.js │ │ │ │ │ │ ├── WMTSCapabilities.js │ │ │ │ │ │ ├── WPSCapabilities │ │ │ │ │ │ │ └── v1_0_0.js │ │ │ │ │ │ ├── WPSCapabilities.js │ │ │ │ │ │ ├── WPSDescribeProcess.js │ │ │ │ │ │ ├── WPSExecute.js │ │ │ │ │ │ ├── XLS │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ ├── XLS.js │ │ │ │ │ │ ├── XML │ │ │ │ │ │ │ └── VersionedOGC.js │ │ │ │ │ │ └── XML.js │ │ │ │ │ ├── Format.js │ │ │ │ │ ├── Geometry │ │ │ │ │ │ ├── Collection.js │ │ │ │ │ │ ├── Curve.js │ │ │ │ │ │ ├── LinearRing.js │ │ │ │ │ │ ├── LineString.js │ │ │ │ │ │ ├── MultiLineString.js │ │ │ │ │ │ ├── MultiPoint.js │ │ │ │ │ │ ├── MultiPolygon.js │ │ │ │ │ │ ├── Point.js │ │ │ │ │ │ └── Polygon.js │ │ │ │ │ ├── Geometry.js │ │ │ │ │ ├── Handler │ │ │ │ │ │ ├── Box.js │ │ │ │ │ │ ├── Click.js │ │ │ │ │ │ ├── Drag.js │ │ │ │ │ │ ├── Feature.js │ │ │ │ │ │ ├── Hover.js │ │ │ │ │ │ ├── Keyboard.js │ │ │ │ │ │ ├── MouseWheel.js │ │ │ │ │ │ ├── Path.js │ │ │ │ │ │ ├── Pinch.js │ │ │ │ │ │ ├── Point.js │ │ │ │ │ │ ├── Polygon.js │ │ │ │ │ │ └── RegularPolygon.js │ │ │ │ │ ├── Handler.js │ │ │ │ │ ├── Icon.js │ │ │ │ │ ├── Kinetic.js │ │ │ │ │ ├── Lang │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── be-tarask.js │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ ├── br.js │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ ├── cs-CZ.js │ │ │ │ │ │ ├── da-DK.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en-CA.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── fur.js │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ ├── gsw.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hsb.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── ia.js │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ ├── io.js │ │ │ │ │ │ ├── is.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ ├── ksh.js │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nds.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── nn.js │ │ │ │ │ │ ├── oc.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt-BR.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ ├── sv-SE.js │ │ │ │ │ │ ├── te.js │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ ├── zh-CN.js │ │ │ │ │ │ └── zh-TW.js │ │ │ │ │ ├── Lang.js │ │ │ │ │ ├── Layer │ │ │ │ │ │ ├── ArcGIS93Rest.js │ │ │ │ │ │ ├── ArcGISCache.js │ │ │ │ │ │ ├── ArcIMS.js │ │ │ │ │ │ ├── Bing.js │ │ │ │ │ │ ├── Boxes.js │ │ │ │ │ │ ├── EventPane.js │ │ │ │ │ │ ├── FixedZoomLevels.js │ │ │ │ │ │ ├── GeoRSS.js │ │ │ │ │ │ ├── Google │ │ │ │ │ │ │ └── v3.js │ │ │ │ │ │ ├── Google.js │ │ │ │ │ │ ├── Grid.js │ │ │ │ │ │ ├── HTTPRequest.js │ │ │ │ │ │ ├── Image.js │ │ │ │ │ │ ├── KaMapCache.js │ │ │ │ │ │ ├── KaMap.js │ │ │ │ │ │ ├── MapGuide.js │ │ │ │ │ │ ├── MapServer.js │ │ │ │ │ │ ├── Markers.js │ │ │ │ │ │ ├── OSM.js │ │ │ │ │ │ ├── PointGrid.js │ │ │ │ │ │ ├── PointTrack.js │ │ │ │ │ │ ├── SphericalMercator.js │ │ │ │ │ │ ├── Text.js │ │ │ │ │ │ ├── TileCache.js │ │ │ │ │ │ ├── TMS.js │ │ │ │ │ │ ├── UTFGrid.js │ │ │ │ │ │ ├── Vector │ │ │ │ │ │ │ └── RootContainer.js │ │ │ │ │ │ ├── Vector.js │ │ │ │ │ │ ├── WMS.js │ │ │ │ │ │ ├── WMTS.js │ │ │ │ │ │ ├── WorldWind.js │ │ │ │ │ │ ├── XYZ.js │ │ │ │ │ │ └── Zoomify.js │ │ │ │ │ ├── Layer.js │ │ │ │ │ ├── Map.js │ │ │ │ │ ├── Marker │ │ │ │ │ │ └── Box.js │ │ │ │ │ ├── Marker.js │ │ │ │ │ ├── Popup │ │ │ │ │ │ ├── Anchored.js │ │ │ │ │ │ ├── FramedCloud.js │ │ │ │ │ │ └── Framed.js │ │ │ │ │ ├── Popup.js │ │ │ │ │ ├── Projection.js │ │ │ │ │ ├── Protocol │ │ │ │ │ │ ├── CSW │ │ │ │ │ │ │ └── v2_0_2.js │ │ │ │ │ │ ├── CSW.js │ │ │ │ │ │ ├── HTTP.js │ │ │ │ │ │ ├── Script.js │ │ │ │ │ │ ├── SOS │ │ │ │ │ │ │ └── v1_0_0.js │ │ │ │ │ │ ├── SOS.js │ │ │ │ │ │ ├── WFS │ │ │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ │ │ └── v1.js │ │ │ │ │ │ └── WFS.js │ │ │ │ │ ├── Protocol.js │ │ │ │ │ ├── Renderer │ │ │ │ │ │ ├── Canvas.js │ │ │ │ │ │ ├── Elements.js │ │ │ │ │ │ ├── SVG.js │ │ │ │ │ │ └── VML.js │ │ │ │ │ ├── Renderer.js │ │ │ │ │ ├── Request │ │ │ │ │ │ └── XMLHttpRequest.js │ │ │ │ │ ├── Request.js │ │ │ │ │ ├── Rule.js │ │ │ │ │ ├── SingleFile.js │ │ │ │ │ ├── Spherical.js │ │ │ │ │ ├── Strategy │ │ │ │ │ │ ├── BBOX.js │ │ │ │ │ │ ├── Cluster.js │ │ │ │ │ │ ├── Filter.js │ │ │ │ │ │ ├── Fixed.js │ │ │ │ │ │ ├── Paging.js │ │ │ │ │ │ ├── Refresh.js │ │ │ │ │ │ └── Save.js │ │ │ │ │ ├── Strategy.js │ │ │ │ │ ├── Style2.js │ │ │ │ │ ├── Style.js │ │ │ │ │ ├── StyleMap.js │ │ │ │ │ ├── Symbolizer │ │ │ │ │ │ ├── Line.js │ │ │ │ │ │ ├── Point.js │ │ │ │ │ │ ├── Polygon.js │ │ │ │ │ │ ├── Raster.js │ │ │ │ │ │ └── Text.js │ │ │ │ │ ├── Symbolizer.js │ │ │ │ │ ├── Tile │ │ │ │ │ │ ├── Image │ │ │ │ │ │ │ └── IFrame.js │ │ │ │ │ │ ├── Image.js │ │ │ │ │ │ └── UTFGrid.js │ │ │ │ │ ├── Tile.js │ │ │ │ │ ├── TileManager.js │ │ │ │ │ ├── Tween.js │ │ │ │ │ ├── Util │ │ │ │ │ │ └── vendorPrefix.js │ │ │ │ │ ├── Util.js │ │ │ │ │ ├── WPSClient.js │ │ │ │ │ └── WPSProcess.js │ │ │ │ ├── OpenLayers.js │ │ │ │ └── Rico │ │ │ │ ├── Color.js │ │ │ │ ├── Corner.js │ │ │ │ └── license.js │ │ │ └── readme.md │ │ └── theme │ │ └── default │ │ ├── google.css │ │ ├── google.tidy.css │ │ ├── ie6-style.css │ │ ├── ie6-style.tidy.css │ │ ├── img │ │ │ ├── add_point_off.png │ │ │ ├── add_point_on.png │ │ │ ├── blank.gif │ │ │ ├── close.gif │ │ │ ├── drag-rectangle-off.png │ │ │ ├── drag-rectangle-on.png │ │ │ ├── draw_line_off.png │ │ │ ├── draw_line_on.png │ │ │ ├── draw_point_off.png │ │ │ ├── draw_point_on.png │ │ │ ├── draw_polygon_off.png │ │ │ ├── draw_polygon_on.png │ │ │ ├── editing_tool_bar.png │ │ │ ├── move_feature_off.png │ │ │ ├── move_feature_on.png │ │ │ ├── navigation_history.png │ │ │ ├── overview_replacement.gif │ │ │ ├── panning-hand-off.png │ │ │ ├── panning-hand-on.png │ │ │ ├── pan_off.png │ │ │ ├── pan_on.png │ │ │ ├── pan-panel-NOALPHA.png │ │ │ ├── pan-panel.png │ │ │ ├── remove_point_off.png │ │ │ ├── remove_point_on.png │ │ │ ├── ruler.png │ │ │ ├── save_features_off.png │ │ │ ├── save_features_on.png │ │ │ ├── view_next_off.png │ │ │ ├── view_next_on.png │ │ │ ├── view_previous_off.png │ │ │ ├── view_previous_on.png │ │ │ ├── zoom-panel-NOALPHA.png │ │ │ └── zoom-panel.png │ │ ├── style.css │ │ ├── style.mobile.css │ │ ├── style.mobile.tidy.css │ │ └── style.tidy.css │ ├── page_settings.js │ ├── pmd │ │ ├── designer_db.js │ │ ├── designer_objects.js │ │ ├── designer_page.js │ │ ├── history.js │ │ ├── init.js │ │ └── move.js │ ├── replication.js │ ├── rte.js │ ├── server_databases.js │ ├── server_plugins.js │ ├── server_privileges.js │ ├── server_status_advisor.js │ ├── server_status_monitor.js │ ├── server_status_processes.js │ ├── server_status_queries.js │ ├── server_status_sorter.js │ ├── server_status_variables.js │ ├── server_user_groups.js │ ├── server_variables.js │ ├── shortcuts_handler.js │ ├── sprintf.js │ ├── sql.js │ ├── tbl_change.js │ ├── tbl_chart.js │ ├── tbl_find_replace.js │ ├── tbl_gis_visualization.js │ ├── tbl_operations.js │ ├── tbl_relation.js │ ├── tbl_select.js │ ├── tbl_structure.js │ ├── tbl_tracking.js │ ├── tbl_zoom_plot_jqplot.js │ ├── tracekit │ │ └── tracekit.js │ ├── transformations │ │ ├── image_upload.js │ │ ├── json_editor.js │ │ ├── json.js │ │ ├── sql_editor.js │ │ ├── xml_editor.js │ │ └── xml.js │ ├── whitelist.php │ └── zxcvbn.js ├── libraries │ ├── advisor.lib.php │ ├── Advisor.php │ ├── advisory_rules.txt │ ├── Bookmark.php │ ├── browse_foreigners.lib.php │ ├── central_columns.lib.php │ ├── certs │ │ ├── 12d55845.0 │ │ ├── 2e5ac55d.0 │ │ ├── 4042bcee.0 │ │ ├── 6187b673.0 │ │ ├── cacert.pem │ │ └── README.rst │ ├── Charsets.php │ ├── check_user_privileges.lib.php │ ├── common.inc.php │ ├── config │ │ ├── ConfigFile.php │ │ ├── config_functions.lib.php │ │ ├── FormDisplay.php │ │ ├── FormDisplay.tpl.php │ │ ├── Form.php │ │ ├── messages.inc.php │ │ ├── page_settings.forms.php │ │ ├── PageSettings.php │ │ ├── ServerConfigChecks.php │ │ ├── setup.forms.php │ │ ├── user_preferences.forms.php │ │ └── Validator.php │ ├── config.default.php │ ├── Config.php │ ├── config.values.php │ ├── Console.php │ ├── controllers │ │ ├── Controller.php │ │ ├── database │ │ │ └── DatabaseStructureController.php │ │ ├── DatabaseController.php │ │ ├── server │ │ │ ├── ServerBinlogController.php │ │ │ ├── ServerCollationsController.php │ │ │ ├── ServerDatabasesController.php │ │ │ ├── ServerEnginesController.php │ │ │ ├── ServerPluginsController.php │ │ │ └── ServerVariablesController.php │ │ ├── table │ │ │ ├── TableChartController.php │ │ │ ├── TableGisVisualizationController.php │ │ │ ├── TableIndexesController.php │ │ │ ├── TableRelationController.php │ │ │ ├── TableSearchController.php │ │ │ └── TableStructureController.php │ │ └── TableController.php │ ├── core.lib.php │ ├── create_addfield.lib.php │ ├── database_interface.inc.php │ ├── DatabaseInterface.php │ ├── db_common.inc.php │ ├── db_designer.lib.php │ ├── dbi │ │ ├── DBIDummy.php │ │ ├── DBIExtension.lib.php │ │ ├── DBIExtension.php │ │ ├── DBIMysqli.lib.php │ │ ├── DBIMysqli.php │ │ └── DBIMysql.php │ ├── DbList.php │ ├── DbQbe.php │ ├── DbSearch.php │ ├── db_table_exists.inc.php │ ├── di │ │ ├── AliasItem.php │ │ ├── Container.php │ │ ├── FactoryItem.php │ │ ├── Item.php │ │ ├── ReflectorItem.php │ │ ├── ServiceItem.php │ │ └── ValueItem.php │ ├── display_change_password.lib.php │ ├── display_create_table.lib.php │ ├── display_export.lib.php │ ├── display_git_revision.lib.php │ ├── display_import_ajax.lib.php │ ├── display_import.lib.php │ ├── DisplayResults.php │ ├── Encoding.php │ ├── engines │ │ ├── Bdb.php │ │ ├── Berkeleydb.php │ │ ├── Binlog.php │ │ ├── Innobase.php │ │ ├── Innodb.php │ │ ├── Memory.php │ │ ├── Merge.php │ │ ├── Mrg_Myisam.php │ │ ├── Myisam.php │ │ ├── Ndbcluster.php │ │ ├── Pbxt.php │ │ └── Performance_Schema.php │ ├── ErrorHandler.php │ ├── error.inc.php │ ├── Error.php │ ├── error_report.lib.php │ ├── export.lib.php │ ├── file_listing.lib.php │ ├── File.php │ ├── Font.php │ ├── Footer.php │ ├── gis │ │ ├── GISFactory.php │ │ ├── GISGeometrycollection.php │ │ ├── GISGeometry.php │ │ ├── GISLinestring.php │ │ ├── GISMultilinestring.php │ │ ├── GISMultipoint.php │ │ ├── GISMultipolygon.php │ │ ├── GISPoint.php │ │ ├── GISPolygon.php │ │ └── GISVisualization.php │ ├── Header.php │ ├── import.lib.php │ ├── IndexColumn.php │ ├── index.lib.php │ ├── Index.php │ ├── information_schema_relations.lib.php │ ├── insert_edit.lib.php │ ├── ip_allow_deny.lib.php │ ├── LanguageManager.php │ ├── Language.php │ ├── language_stats.inc.php │ ├── Linter.php │ ├── ListAbstract.php │ ├── ListDatabase.php │ ├── Logging.php │ ├── Menu.php │ ├── Message.php │ ├── mime.lib.php │ ├── mult_submits.inc.php │ ├── mult_submits.lib.php │ ├── mysql_relations.lib.php │ ├── navigation │ │ ├── NavigationHeader.php │ │ ├── Navigation.php │ │ ├── NavigationTree.php │ │ ├── NodeFactory.php │ │ └── nodes │ │ ├── NodeColumnContainer.php │ │ ├── NodeColumn.php │ │ ├── NodeDatabaseChildContainer.php │ │ ├── NodeDatabaseChild.php │ │ ├── NodeDatabaseContainer.php │ │ ├── NodeDatabase.php │ │ ├── NodeEventContainer.php │ │ ├── NodeEvent.php │ │ ├── NodeFunctionContainer.php │ │ ├── NodeFunction.php │ │ ├── NodeIndexContainer.php │ │ ├── NodeIndex.php │ │ ├── Node.php │ │ ├── NodeProcedureContainer.php │ │ ├── NodeProcedure.php │ │ ├── NodeTableContainer.php │ │ ├── NodeTable.php │ │ ├── NodeTriggerContainer.php │ │ ├── NodeTrigger.php │ │ ├── NodeViewContainer.php │ │ └── NodeView.php │ ├── normalization.lib.php │ ├── OpenDocument.php │ ├── operations.lib.php │ ├── OutputBuffering.php │ ├── parse_analyze.lib.php │ ├── Partition.php │ ├── PDF.php │ ├── plugin_interface.lib.php │ ├── plugins │ │ ├── auth │ │ │ ├── AuthenticationConfig.php │ │ │ ├── AuthenticationCookie.php │ │ │ ├── AuthenticationHttp.php │ │ │ └── AuthenticationSignon.php │ │ ├── AuthenticationPlugin.php │ │ ├── export │ │ │ ├── ExportCodegen.php │ │ │ ├── ExportCsv.php │ │ │ ├── ExportExcel.php │ │ │ ├── ExportHtmlword.php │ │ │ ├── ExportJson.php │ │ │ ├── ExportLatex.php │ │ │ ├── ExportMediawiki.php │ │ │ ├── ExportOds.php │ │ │ ├── ExportOdt.php │ │ │ ├── ExportPdf.php │ │ │ ├── ExportPhparray.php │ │ │ ├── ExportSql.php │ │ │ ├── ExportTexytext.php │ │ │ ├── ExportXml.php │ │ │ ├── ExportYaml.php │ │ │ ├── PMA_ExportPdf.php │ │ │ ├── README │ │ │ └── TableProperty.php │ │ ├── ExportPlugin.php │ │ ├── import │ │ │ ├── AbstractImportCsv.php │ │ │ ├── ImportCsv.php │ │ │ ├── ImportLdi.php │ │ │ ├── ImportMediawiki.php │ │ │ ├── ImportOds.php │ │ │ ├── ImportShp.php │ │ │ ├── ImportSql.php │ │ │ ├── ImportXml.php │ │ │ ├── README │ │ │ ├── ShapeFileImport.php │ │ │ └── upload │ │ │ ├── UploadApc.php │ │ │ ├── UploadNoplugin.php │ │ │ ├── UploadProgress.php │ │ │ └── UploadSession.php │ │ ├── ImportPlugin.php │ │ ├── IOTransformationsPlugin.php │ │ ├── schema │ │ │ ├── dia │ │ │ │ ├── Dia.php │ │ │ │ ├── DiaRelationSchema.php │ │ │ │ ├── RelationStatsDia.php │ │ │ │ └── TableStatsDia.php │ │ │ ├── eps │ │ │ │ ├── Eps.php │ │ │ │ ├── EpsRelationSchema.php │ │ │ │ ├── RelationStatsEps.php │ │ │ │ └── TableStatsEps.php │ │ │ ├── ExportRelationSchema.php │ │ │ ├── pdf │ │ │ │ ├── Pdf.php │ │ │ │ ├── PdfRelationSchema.php │ │ │ │ ├── RelationStatsPdf.php │ │ │ │ └── TableStatsPdf.php │ │ │ ├── RelationStats.php │ │ │ ├── SchemaDia.php │ │ │ ├── SchemaEps.php │ │ │ ├── SchemaPdf.php │ │ │ ├── SchemaSvg.php │ │ │ ├── svg │ │ │ │ ├── RelationStatsSvg.php │ │ │ │ ├── Svg.php │ │ │ │ ├── SvgRelationSchema.php │ │ │ │ └── TableStatsSvg.php │ │ │ └── TableStats.php │ │ ├── SchemaPlugin.php │ │ ├── transformations │ │ │ ├── abs │ │ │ │ ├── Bool2TextTransformationsPlugin.php │ │ │ │ ├── CodeMirrorEditorTransformationPlugin.php │ │ │ │ ├── DateFormatTransformationsPlugin.php │ │ │ │ ├── DownloadTransformationsPlugin.php │ │ │ │ ├── ExternalTransformationsPlugin.php │ │ │ │ ├── FormattedTransformationsPlugin.php │ │ │ │ ├── HexTransformationsPlugin.php │ │ │ │ ├── ImageLinkTransformationsPlugin.php │ │ │ │ ├── ImageUploadTransformationsPlugin.php │ │ │ │ ├── InlineTransformationsPlugin.php │ │ │ │ ├── LongToIPv4TransformationsPlugin.php │ │ │ │ ├── PreApPendTransformationsPlugin.php │ │ │ │ ├── RegexValidationTransformationsPlugin.php │ │ │ │ ├── SQLTransformationsPlugin.php │ │ │ │ ├── SubstringTransformationsPlugin.php │ │ │ │ ├── TextFileUploadTransformationsPlugin.php │ │ │ │ ├── TextImageLinkTransformationsPlugin.php │ │ │ │ └── TextLinkTransformationsPlugin.php │ │ │ ├── input │ │ │ │ ├── Image_JPEG_Upload.php │ │ │ │ ├── Text_Plain_FileUpload.php │ │ │ │ ├── Text_Plain_Iptobinary.php │ │ │ │ ├── Text_Plain_JsonEditor.php │ │ │ │ ├── Text_Plain_RegexValidation.php │ │ │ │ ├── Text_Plain_SqlEditor.php │ │ │ │ └── Text_Plain_XmlEditor.php │ │ │ ├── output │ │ │ │ ├── Application_Octetstream_Download.php │ │ │ │ ├── Application_Octetstream_Hex.php │ │ │ │ ├── Image_JPEG_Inline.php │ │ │ │ ├── Image_JPEG_Link.php │ │ │ │ ├── Image_PNG_Inline.php │ │ │ │ ├── Text_Octetstream_Sql.php │ │ │ │ ├── Text_Plain_Binarytoip.php │ │ │ │ ├── Text_Plain_Bool2Text.php │ │ │ │ ├── Text_Plain_Dateformat.php │ │ │ │ ├── Text_Plain_External.php │ │ │ │ ├── Text_Plain_Formatted.php │ │ │ │ ├── Text_Plain_Imagelink.php │ │ │ │ ├── Text_Plain_Json.php │ │ │ │ ├── Text_Plain_Sql.php │ │ │ │ └── Text_Plain_Xml.php │ │ │ ├── README │ │ │ ├── TEMPLATE │ │ │ ├── TEMPLATE_ABSTRACT │ │ │ ├── Text_Plain_Link.php │ │ │ ├── Text_Plain_Longtoipv4.php │ │ │ ├── Text_Plain_PreApPend.php │ │ │ └── Text_Plain_Substring.php │ │ ├── TransformationsInterface.php │ │ ├── TransformationsPlugin.php │ │ └── UploadInterface.php │ ├── pmd_common.php │ ├── properties │ │ ├── options │ │ │ ├── groups │ │ │ │ ├── OptionsPropertyMainGroup.php │ │ │ │ ├── OptionsPropertyRootGroup.php │ │ │ │ └── OptionsPropertySubgroup.php │ │ │ ├── items │ │ │ │ ├── BoolPropertyItem.php │ │ │ │ ├── DocPropertyItem.php │ │ │ │ ├── HiddenPropertyItem.php │ │ │ │ ├── MessageOnlyPropertyItem.php │ │ │ │ ├── NumberPropertyItem.php │ │ │ │ ├── RadioPropertyItem.php │ │ │ │ ├── SelectPropertyItem.php │ │ │ │ └── TextPropertyItem.php │ │ │ ├── OptionsPropertyGroup.php │ │ │ ├── OptionsPropertyItem.php │ │ │ └── OptionsPropertyOneItem.php │ │ ├── plugins │ │ │ ├── ExportPluginProperties.php │ │ │ ├── ImportPluginProperties.php │ │ │ ├── PluginPropertyItem.php │ │ │ └── SchemaPluginProperties.php │ │ └── PropertyItem.php │ ├── RecentFavoriteTable.php │ ├── relation_cleanup.lib.php │ ├── relation.lib.php │ ├── replication_gui.lib.php │ ├── replication.inc.php │ ├── Response.php │ ├── rte │ │ ├── rte_events.lib.php │ │ ├── rte_export.lib.php │ │ ├── rte_footer.lib.php │ │ ├── rte_general.lib.php │ │ ├── rte_list.lib.php │ │ ├── rte_main.inc.php │ │ ├── rte_routines.lib.php │ │ ├── rte_triggers.lib.php │ │ └── rte_words.lib.php │ ├── Sanitize.php │ ├── SavedSearches.php │ ├── Scripts.php │ ├── select_server.lib.php │ ├── server_common.inc.php │ ├── server_common.lib.php │ ├── server_privileges.lib.php │ ├── server_status_advisor.lib.php │ ├── ServerStatusData.php │ ├── server_status.lib.php │ ├── server_status_monitor.lib.php │ ├── server_status_processes.lib.php │ ├── server_status_queries.lib.php │ ├── server_status_variables.lib.php │ ├── server_user_groups.lib.php │ ├── server_users.lib.php │ ├── session.inc.php │ ├── session.lib.php │ ├── special_schema_links.lib.php │ ├── sql.lib.php │ ├── sql_query_form.lib.php │ ├── StorageEngine.php │ ├── string.lib.php │ ├── stringMb.lib.php │ ├── stringNative.lib.php │ ├── SubPartition.php │ ├── sysinfo.lib.php │ ├── SysInfoLinux.php │ ├── SysInfo.php │ ├── SysInfoSunOS.php │ ├── SysInfoWINNT.php │ ├── SystemDatabase.php │ ├── Table.php │ ├── tbl_columns_definition_form.inc.php │ ├── tbl_common.inc.php │ ├── tbl_info.inc.php │ ├── tbl_partition_definition.inc.php │ ├── Template.php │ ├── ThemeManager.php │ ├── Theme.php │ ├── Tracker.php │ ├── tracking.lib.php │ ├── transformations.lib.php │ ├── TypesMySQL.php │ ├── Types.php │ ├── URL.php │ ├── user_preferences.inc.php │ ├── user_preferences.lib.php │ ├── util.lib.php │ ├── Util.php │ ├── vendor_config.php │ ├── VersionInformation.php │ ├── zip_extension.lib.php │ └── ZipFile.php ├── LICENSE ├── license.php ├── lint.php ├── locale │ ├── ar │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── az │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── be │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── bg │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── bn │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ca │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── cs │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── da │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── de │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── el │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── en_GB │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── es │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── et │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── fi │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── fr │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── gl │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── hu │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── hy │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ia │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── id │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── it │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ja │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ko │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── lt │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── nb │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── nl │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── pl │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── pt │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── pt_BR │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ro │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── ru │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── si │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── sk │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── sl │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── sq │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── sr@latin │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── sv │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── tr │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── uk │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── vi │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ ├── zh_CN │ │ └── LC_MESSAGES │ │ └── phpmyadmin.mo │ └── zh_TW │ └── LC_MESSAGES │ └── phpmyadmin.mo ├── logout.php ├── navigation.php ├── normalization.php ├── phpinfo.php ├── phpmyadmin.css.php ├── prefs_forms.php ├── prefs_manage.php ├── print.css ├── README ├── RELEASE-DATE-4.7.4 ├── robots.txt ├── schema_export.php ├── server_binlog.php ├── server_collations.php ├── server_databases.php ├── server_engines.php ├── server_export.php ├── server_import.php ├── server_plugins.php ├── server_privileges.php ├── server_replication.php ├── server_sql.php ├── server_status_advisor.php ├── server_status_monitor.php ├── server_status.php ├── server_status_processes.php ├── server_status_queries.php ├── server_status_variables.php ├── server_user_groups.php ├── server_variables.php ├── setup │ ├── ajax.js │ ├── config.php │ ├── frames │ │ ├── config.inc.php │ │ ├── form.inc.php │ │ ├── index.inc.php │ │ ├── menu.inc.php │ │ └── servers.inc.php │ ├── index.php │ ├── lib │ │ ├── common.inc.php │ │ ├── ConfigGenerator.php │ │ ├── form_processing.lib.php │ │ └── index.lib.php │ ├── scripts.js │ ├── styles.css │ └── validate.php ├── show_config_errors.php ├── sql │ ├── create_tables.sql │ ├── upgrade_column_info_4_3_0+.sql │ ├── upgrade_tables_4_7_0+.sql │ └── upgrade_tables_mysql_4_1_2+.sql ├── sql.php ├── tbl_addfield.php ├── tbl_change.php ├── tbl_chart.php ├── tbl_create.php ├── tbl_export.php ├── tbl_find_replace.php ├── tbl_get_field.php ├── tbl_gis_visualization.php ├── tbl_import.php ├── tbl_indexes.php ├── tbl_operations.php ├── tbl_recent_favorite.php ├── tbl_relation.php ├── tbl_replace.php ├── tbl_row_action.php ├── tbl_select.php ├── tbl_sql.php ├── tbl_structure.php ├── tbl_tracking.php ├── tbl_triggers.php ├── tbl_zoom_select.php ├── templates │ ├── checkbox.phtml │ ├── columns_definitions │ │ ├── column_adjust_privileges.phtml │ │ ├── column_attribute.phtml │ │ ├── column_attributes.phtml │ │ ├── column_auto_increment.phtml │ │ ├── column_comment.phtml │ │ ├── column_default.phtml │ │ ├── column_definitions_form.phtml │ │ ├── column_extra.phtml │ │ ├── column_indexes.phtml │ │ ├── column_length.phtml │ │ ├── column_name.phtml │ │ ├── column_null.phtml │ │ ├── column_type.phtml │ │ ├── column_virtuality.phtml │ │ ├── mime_type.phtml │ │ ├── move_column.phtml │ │ ├── partitions.phtml │ │ ├── table_fields_definitions.phtml │ │ ├── transformation_option.phtml │ │ └── transformation.phtml │ ├── components │ │ └── error_message.phtml │ ├── console │ │ ├── bookmark_content.phtml │ │ ├── display.phtml │ │ ├── query_action.phtml │ │ └── toolbar.phtml │ ├── database │ │ ├── create_table.phtml │ │ ├── designer │ │ │ ├── aggregate_query_panel.phtml │ │ │ ├── canvas.phtml │ │ │ ├── database_tables.phtml │ │ │ ├── delete_relation_panel.phtml │ │ │ ├── edit_delete_pages.phtml │ │ │ ├── having_query_panel.phtml │ │ │ ├── js_fields.phtml │ │ │ ├── new_relation_panel.phtml │ │ │ ├── options_panel.phtml │ │ │ ├── page_save_as.phtml │ │ │ ├── page_selector.phtml │ │ │ ├── query_details.phtml │ │ │ ├── rename_to_panel.phtml │ │ │ ├── schema_export.phtml │ │ │ ├── side_menu.phtml │ │ │ ├── table_list.phtml │ │ │ └── where_query_panel.phtml │ │ └── structure │ │ ├── body_for_table_summary.phtml │ │ ├── browse_table_label.phtml │ │ ├── browse_table.phtml │ │ ├── check_all_tables.phtml │ │ ├── empty_table.phtml │ │ ├── favorite_anchor.phtml │ │ ├── print_view_data_dictionary_link.phtml │ │ ├── search_table.phtml │ │ ├── show_create.phtml │ │ ├── show_create_row.phtml │ │ ├── sortable_header.phtml │ │ ├── structure_table_row.phtml │ │ ├── table_header.phtml │ │ └── tracking_icon.phtml │ ├── div_for_slider_effect.phtml │ ├── error │ │ └── report_form.phtml │ ├── export │ │ ├── alias_add.phtml │ │ └── alias_item.phtml │ ├── filter.phtml │ ├── header_location.phtml │ ├── javascript │ │ └── display.phtml │ ├── list │ │ ├── item.phtml │ │ └── unordered.phtml │ ├── navigation │ │ └── logo.phtml │ ├── prefs_autoload.phtml │ ├── preview_sql.phtml │ ├── privileges │ │ ├── add_privileges_database.phtml │ │ ├── add_privileges_routine.phtml │ │ ├── add_privileges_table.phtml │ │ ├── add_user_fieldset.phtml │ │ ├── choose_user_group.phtml │ │ ├── column_privileges.phtml │ │ ├── delete_user_fieldset.phtml │ │ ├── edit_routine_privileges.phtml │ │ ├── global_priv_table.phtml │ │ ├── global_priv_tbl_item.phtml │ │ ├── initials_row.phtml │ │ ├── privileges_summary.phtml │ │ ├── privileges_summary_row.phtml │ │ ├── require_options_item.phtml │ │ ├── require_options.phtml │ │ ├── resource_limit_item.phtml │ │ └── resource_limits.phtml │ ├── secondary_tabs.phtml │ ├── select_all.phtml │ ├── select_lang.phtml │ ├── server │ │ ├── binlog │ │ │ ├── log_row.phtml │ │ │ └── log_selector.phtml │ │ ├── collations │ │ │ └── charsets.phtml │ │ ├── databases │ │ │ ├── create.phtml │ │ │ ├── table_footer.phtml │ │ │ ├── table_header.phtml │ │ │ └── table_row.phtml │ │ ├── engines │ │ │ ├── engine.phtml │ │ │ └── engines.phtml │ │ ├── plugins │ │ │ ├── section_links.phtml │ │ │ └── section.phtml │ │ └── variables │ │ ├── link_template.phtml │ │ ├── session_variable_row.phtml │ │ ├── variable_row.phtml │ │ └── variable_table_head.phtml │ ├── startAndNumberOfRowsPanel.phtml │ ├── table │ │ ├── chart │ │ │ └── tbl_chart.phtml │ │ ├── gis_visualization │ │ │ └── gis_visualization.phtml │ │ ├── index_form.phtml │ │ ├── relation │ │ │ ├── common_form.phtml │ │ │ ├── dropdown_generate.phtml │ │ │ ├── foreign_key_row.phtml │ │ │ ├── internal_relational_row.phtml │ │ │ └── relational_dropdown.phtml │ │ ├── search │ │ │ ├── column_comparison_operators.phtml │ │ │ ├── fields_table.phtml │ │ │ ├── form_tag.phtml │ │ │ ├── geom_func.phtml │ │ │ ├── input_box.phtml │ │ │ ├── options.phtml │ │ │ ├── options_zoom.phtml │ │ │ ├── replace_preview.phtml │ │ │ ├── rows_normal.phtml │ │ │ ├── rows_zoom.phtml │ │ │ ├── search_and_replace.phtml │ │ │ ├── selection_form.phtml │ │ │ ├── table_header.phtml │ │ │ └── zoom_result_form.phtml │ │ ├── secondary_tabs.phtml │ │ └── structure │ │ ├── action_row_in_structure_table.phtml │ │ ├── actions_in_table_structure.phtml │ │ ├── add_column.phtml │ │ ├── check_all_table_column.phtml │ │ ├── display_partitions.phtml │ │ ├── display_structure.phtml │ │ ├── display_table_stats.phtml │ │ ├── move_columns_dialog.phtml │ │ ├── optional_action_links.phtml │ │ ├── partition_definition_form.phtml │ │ ├── row_stats_table.phtml │ │ ├── table_structure_header.phtml │ │ └── table_structure_row.phtml │ ├── test │ │ ├── add_data.phtml │ │ ├── echo.phtml │ │ ├── set_helper.phtml │ │ ├── static.phtml │ │ └── trim.phtml │ └── toggle_button.phtml ├── themes │ ├── dot.gif │ ├── original │ │ ├── css │ │ │ ├── common.css.php │ │ │ ├── navigation.css.php │ │ │ └── printview.css │ │ ├── img │ │ │ ├── ajax_clock_small.gif │ │ │ ├── arrow_ltr.png │ │ │ ├── arrow_rtl.png │ │ │ ├── b_bookmark.png │ │ │ ├── b_browse.png │ │ │ ├── b_calendar.png │ │ │ ├── b_chart.png │ │ │ ├── b_close.png │ │ │ ├── b_column_add.png │ │ │ ├── b_comment.png │ │ │ ├── bd_browse.png │ │ │ ├── b_dbstatistics.png │ │ │ ├── bd_deltbl.png │ │ │ ├── bd_drop.png │ │ │ ├── bd_edit.png │ │ │ ├── b_deltbl.png │ │ │ ├── bd_empty.png │ │ │ ├── bd_export.png │ │ │ ├── bd_ftext.png │ │ │ ├── bd_index.png │ │ │ ├── bd_insrow.png │ │ │ ├── bd_nextpage.png │ │ │ ├── b_docs.png │ │ │ ├── bd_primary.png │ │ │ ├── b_drop.png │ │ │ ├── bd_routine_add.png │ │ │ ├── bd_sbrowse.png │ │ │ ├── bd_select.png │ │ │ ├── bd_spatial.png │ │ │ ├── bd_unique.png │ │ │ ├── b_edit.png │ │ │ ├── b_empty.png │ │ │ ├── b_engine.png │ │ │ ├── b_event_add.png │ │ │ ├── b_events.png │ │ │ ├── b_export.png │ │ │ ├── b_favorite.png │ │ │ ├── b_find_replace.png │ │ │ ├── b_ftext.png │ │ │ ├── b_globe.gif │ │ │ ├── b_group.png │ │ │ ├── b_help.png │ │ │ ├── b_home.png │ │ │ ├── b_import.png │ │ │ ├── b_index_add.png │ │ │ ├── b_index.png │ │ │ ├── b_info.png │ │ │ ├── b_inline_edit.png │ │ │ ├── b_insrow.png │ │ │ ├── b_key.png │ │ │ ├── b_minus.png │ │ │ ├── b_more.png │ │ │ ├── b_move.png │ │ │ ├── b_newdb.png │ │ │ ├── b_newtbl.png │ │ │ ├── b_nextpage.png │ │ │ ├── b_no_favorite.png │ │ │ ├── b_plugin.png │ │ │ ├── b_plus.png │ │ │ ├── b_primary.png │ │ │ ├── b_print.png │ │ │ ├── b_props.png │ │ │ ├── b_relations.png │ │ │ ├── b_report.png │ │ │ ├── b_routine_add.png │ │ │ ├── b_routines.png │ │ │ ├── b_saveimage.png │ │ │ ├── b_save.png │ │ │ ├── b_sbrowse.png │ │ │ ├── b_search.png │ │ │ ├── b_select.png │ │ │ ├── b_snewtbl.png │ │ │ ├── b_spatial.png │ │ │ ├── b_sqlhelp.png │ │ │ ├── b_sql.png │ │ │ ├── b_table_add.png │ │ │ ├── b_tblanalyse.png │ │ │ ├── b_tblexport.png │ │ │ ├── b_tblimport.png │ │ │ ├── b_tblops.png │ │ │ ├── b_tbloptimize.png │ │ │ ├── b_tipp.png │ │ │ ├── b_trigger_add.png │ │ │ ├── b_triggers.png │ │ │ ├── b_undo.png │ │ │ ├── b_unique.png │ │ │ ├── b_usradd.png │ │ │ ├── b_usrcheck.png │ │ │ ├── b_usrdrop.png │ │ │ ├── b_usredit.png │ │ │ ├── b_usrlist.png │ │ │ ├── b_versions.png │ │ │ ├── b_view_add.png │ │ │ ├── b_view.png │ │ │ ├── b_views.png │ │ │ ├── centralColumns_add.png │ │ │ ├── centralColumns_delete.png │ │ │ ├── centralColumns.png │ │ │ ├── cleardot.gif │ │ │ ├── col_drop.png │ │ │ ├── col_pointer.png │ │ │ ├── col_pointer_ver.png │ │ │ ├── console.png │ │ │ ├── east-mini.png │ │ │ ├── error.ico │ │ │ ├── eye_grey.png │ │ │ ├── eye.png │ │ │ ├── hide.png │ │ │ ├── lightbulb_off.png │ │ │ ├── lightbulb.png │ │ │ ├── logo_left.png │ │ │ ├── logo_right.png │ │ │ ├── more.png │ │ │ ├── new_data_hovered.png │ │ │ ├── new_data.png │ │ │ ├── new_data_selected_hovered.png │ │ │ ├── new_data_selected.png │ │ │ ├── new_struct_hovered.png │ │ │ ├── new_struct.png │ │ │ ├── new_struct_selected_hovered.png │ │ │ ├── new_struct_selected.png │ │ │ ├── normalize.png │ │ │ ├── north-mini.png │ │ │ ├── pause.png │ │ │ ├── play.png │ │ │ ├── s_asci.png │ │ │ ├── s_asc.png │ │ │ ├── s_attention.png │ │ │ ├── s_cancel.png │ │ │ ├── s_cog.png │ │ │ ├── s_collapseall.png │ │ │ ├── s_db.png │ │ │ ├── s_desc.png │ │ │ ├── s_error2.png │ │ │ ├── s_error.png │ │ │ ├── s_fulltext.png │ │ │ ├── s_host.png │ │ │ ├── show.png │ │ │ ├── s_info.png │ │ │ ├── s_lang.png │ │ │ ├── s_link.png │ │ │ ├── s_lock.png │ │ │ ├── s_loggoff.png │ │ │ ├── s_notice.png │ │ │ ├── s_okay.png │ │ │ ├── south-mini.png │ │ │ ├── spacer.png │ │ │ ├── s_partialtext.png │ │ │ ├── s_passwd.png │ │ │ ├── sprites.png │ │ │ ├── s_really.png │ │ │ ├── s_reload.png │ │ │ ├── s_replication.png │ │ │ ├── s_rights.png │ │ │ ├── s_sortable.png │ │ │ ├── s_status.png │ │ │ ├── s_success.png │ │ │ ├── s_sync.png │ │ │ ├── s_tbl.png │ │ │ ├── s_theme.png │ │ │ ├── s_top.png │ │ │ ├── s_unlink.png │ │ │ ├── s_vars.png │ │ │ ├── s_views.png │ │ │ ├── toggle-ltr.png │ │ │ ├── toggle-rtl.png │ │ │ ├── vertical_line.png │ │ │ ├── west-mini.png │ │ │ ├── window-new.png │ │ │ ├── zoom-minus-mini.png │ │ │ ├── zoom-plus-mini.png │ │ │ └── zoom-world-mini.png │ │ ├── info.inc.php │ │ ├── jquery │ │ │ ├── images │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ └── jquery-ui.css │ │ ├── layout.inc.php │ │ ├── screen.png │ │ └── sprites.lib.php │ ├── pmahomme │ │ ├── css │ │ │ ├── codemirror.css.php │ │ │ ├── common.css.php │ │ │ ├── enum_editor.css.php │ │ │ ├── gis.css.php │ │ │ ├── jqplot.css.php │ │ │ ├── navigation.css.php │ │ │ ├── pmd.css.php │ │ │ ├── printview.css │ │ │ ├── resizable-menu.css.php │ │ │ └── rte.css.php │ │ ├── img │ │ │ ├── ajax_clock_small.gif │ │ │ ├── arrow_ltr.png │ │ │ ├── arrow_rtl.png │ │ │ ├── asc_order.png │ │ │ ├── b_bookmark.png │ │ │ ├── b_browse.png │ │ │ ├── b_calendar.png │ │ │ ├── b_chart.png │ │ │ ├── b_close.png │ │ │ ├── b_column_add.png │ │ │ ├── b_comment.png │ │ │ ├── bd_browse.png │ │ │ ├── b_dbstatistics.png │ │ │ ├── bd_deltbl.png │ │ │ ├── bd_drop.png │ │ │ ├── bd_edit.png │ │ │ ├── b_deltbl.png │ │ │ ├── bd_empty.png │ │ │ ├── bd_export.png │ │ │ ├── bd_firstpage.png │ │ │ ├── bd_ftext.png │ │ │ ├── bd_index.png │ │ │ ├── bd_insrow.png │ │ │ ├── bd_lastpage.png │ │ │ ├── bd_nextpage.png │ │ │ ├── b_docs.png │ │ │ ├── b_docsql.png │ │ │ ├── bd_prevpage.png │ │ │ ├── bd_primary.png │ │ │ ├── b_drop.png │ │ │ ├── bd_routine_add.png │ │ │ ├── bd_sbrowse.png │ │ │ ├── bd_select.png │ │ │ ├── bd_spatial.png │ │ │ ├── bd_unique.png │ │ │ ├── b_edit.png │ │ │ ├── b_empty.png │ │ │ ├── b_engine.png │ │ │ ├── b_event_add.png │ │ │ ├── b_events.png │ │ │ ├── b_export.png │ │ │ ├── b_favorite.png │ │ │ ├── b_find_replace.png │ │ │ ├── b_firstpage.png │ │ │ ├── b_ftext.png │ │ │ ├── b_globe.gif │ │ │ ├── b_group.png │ │ │ ├── b_help.png │ │ │ ├── b_home.png │ │ │ ├── b_import.png │ │ │ ├── b_index_add.png │ │ │ ├── b_index.png │ │ │ ├── b_info.png │ │ │ ├── b_inline_edit.png │ │ │ ├── b_insrow.png │ │ │ ├── b_key.png │ │ │ ├── b_lastpage.png │ │ │ ├── b_minus.png │ │ │ ├── b_more.png │ │ │ ├── b_move.png │ │ │ ├── b_newdb.png │ │ │ ├── b_newtbl.png │ │ │ ├── b_nextpage.png │ │ │ ├── b_no_favorite.png │ │ │ ├── b_pdfdoc.png │ │ │ ├── b_plugin.png │ │ │ ├── b_plus.png │ │ │ ├── b_prevpage.png │ │ │ ├── b_primary.png │ │ │ ├── b_print.png │ │ │ ├── b_props.png │ │ │ ├── b_relations.png │ │ │ ├── b_report.png │ │ │ ├── b_routine_add.png │ │ │ ├── b_routines.png │ │ │ ├── b_saveimage.png │ │ │ ├── b_save.png │ │ │ ├── b_sbrowse.png │ │ │ ├── b_sdb.png │ │ │ ├── b_search.png │ │ │ ├── b_select.png │ │ │ ├── b_snewtbl.png │ │ │ ├── b_spatial.png │ │ │ ├── b_sqldoc.png │ │ │ ├── b_sqlhelp.png │ │ │ ├── b_sql.png │ │ │ ├── b_table_add.png │ │ │ ├── b_tblanalyse.png │ │ │ ├── b_tblexport.png │ │ │ ├── b_tblimport.png │ │ │ ├── b_tblops.png │ │ │ ├── b_tbloptimize.png │ │ │ ├── b_tipp.png │ │ │ ├── b_trigger_add.png │ │ │ ├── b_triggers.png │ │ │ ├── b_undo.png │ │ │ ├── b_unique.png │ │ │ ├── b_usradd.png │ │ │ ├── b_usrcheck.png │ │ │ ├── b_usrdrop.png │ │ │ ├── b_usredit.png │ │ │ ├── b_usrlist.png │ │ │ ├── b_versions.png │ │ │ ├── b_view_add.png │ │ │ ├── b_view.png │ │ │ ├── b_views.png │ │ │ ├── centralColumns_add.png │ │ │ ├── centralColumns_delete.png │ │ │ ├── centralColumns.png │ │ │ ├── col_drop.png │ │ │ ├── col_pointer.png │ │ │ ├── col_pointer_ver.png │ │ │ ├── console.png │ │ │ ├── database.png │ │ │ ├── east-mini.png │ │ │ ├── error.ico │ │ │ ├── eye_grey.png │ │ │ ├── eye.png │ │ │ ├── hide.png │ │ │ ├── item.png │ │ │ ├── left_nav_bg.png │ │ │ ├── lightbulb_off.png │ │ │ ├── lightbulb.png │ │ │ ├── logo_left.png │ │ │ ├── logo_right.png │ │ │ ├── more.png │ │ │ ├── new_data_hovered.png │ │ │ ├── new_data.png │ │ │ ├── new_data_selected_hovered.png │ │ │ ├── new_data_selected.png │ │ │ ├── new_struct_hovered.png │ │ │ ├── new_struct.png │ │ │ ├── new_struct_selected_hovered.png │ │ │ ├── new_struct_selected.png │ │ │ ├── normalize.png │ │ │ ├── north-mini.png │ │ │ ├── pause.png │ │ │ ├── php_sym.png │ │ │ ├── play.png │ │ │ ├── pma_logo2.png │ │ │ ├── pmd │ │ │ │ ├── 1.png │ │ │ │ ├── 2leftarrow_m.png │ │ │ │ ├── 2leftarrow.png │ │ │ │ ├── 2.png │ │ │ │ ├── 2rightarrow_m.png │ │ │ │ ├── 2rightarrow.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ ├── 8.png │ │ │ │ ├── anchor.png │ │ │ │ ├── and_icon.png │ │ │ │ ├── ang_direct.png │ │ │ │ ├── bord.png │ │ │ │ ├── bottom.png │ │ │ │ ├── def.png │ │ │ │ ├── display_field.png │ │ │ │ ├── downarrow1.png │ │ │ │ ├── downarrow2_m.png │ │ │ │ ├── downarrow2.png │ │ │ │ ├── exec.png │ │ │ │ ├── exec_small.png │ │ │ │ ├── exitFullscreen.png │ │ │ │ ├── export.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── FieldKey_small.png │ │ │ │ ├── Field_small_char.png │ │ │ │ ├── Field_small_date.png │ │ │ │ ├── Field_small_int.png │ │ │ │ ├── Field_small.png │ │ │ │ ├── grid.png │ │ │ │ ├── Header_Linked.png │ │ │ │ ├── Header.png │ │ │ │ ├── help.png │ │ │ │ ├── help_relation.png │ │ │ │ ├── left_panel_butt.png │ │ │ │ ├── left_panel_tab.png │ │ │ │ ├── minus.png │ │ │ │ ├── or_icon.png │ │ │ │ ├── page_add.png │ │ │ │ ├── page_delete.png │ │ │ │ ├── page_edit.png │ │ │ │ ├── pdf.png │ │ │ │ ├── plus.png │ │ │ │ ├── query_builder.png │ │ │ │ ├── relation.png │ │ │ │ ├── reload.png │ │ │ │ ├── resize.png │ │ │ │ ├── resizeright.png │ │ │ │ ├── rightarrow1.png │ │ │ │ ├── rightarrow2.png │ │ │ │ ├── save_as.png │ │ │ │ ├── save.png │ │ │ │ ├── small_tab.png │ │ │ │ ├── table.png │ │ │ │ ├── toggle_lines.png │ │ │ │ ├── top_panel.png │ │ │ │ ├── uparrow2_m.png │ │ │ │ └── viewInFullscreen.png │ │ │ ├── s_asci.png │ │ │ ├── s_asc.png │ │ │ ├── s_attention.png │ │ │ ├── s_cancel2.png │ │ │ ├── s_cancel.png │ │ │ ├── s_cog.png │ │ │ ├── s_collapseall.png │ │ │ ├── s_db.png │ │ │ ├── s_desc.png │ │ │ ├── select_bg.png │ │ │ ├── s_error2.png │ │ │ ├── s_error.png │ │ │ ├── s_fulltext.png │ │ │ ├── s_host.png │ │ │ ├── show.png │ │ │ ├── s_info.png │ │ │ ├── s_lang.png │ │ │ ├── s_link.png │ │ │ ├── s_lock.png │ │ │ ├── s_loggoff.png │ │ │ ├── s_notice.png │ │ │ ├── s_okay.png │ │ │ ├── south-mini.png │ │ │ ├── spacer.png │ │ │ ├── s_partialtext.png │ │ │ ├── s_passwd.png │ │ │ ├── sprites.png │ │ │ ├── s_process.png │ │ │ ├── s_really.png │ │ │ ├── s_reload.png │ │ │ ├── s_replication.png │ │ │ ├── s_rights.png │ │ │ ├── s_sortable.png │ │ │ ├── s_status.png │ │ │ ├── s_success.png │ │ │ ├── s_sync.png │ │ │ ├── s_tbl.png │ │ │ ├── s_theme.png │ │ │ ├── s_top.png │ │ │ ├── s_unlink.png │ │ │ ├── s_vars.png │ │ │ ├── s_views.png │ │ │ ├── toggle-ltr.png │ │ │ ├── toggle-rtl.png │ │ │ ├── vertical_line.png │ │ │ ├── west-mini.png │ │ │ ├── window-new.png │ │ │ ├── zoom-minus-mini.png │ │ │ ├── zoom-plus-mini.png │ │ │ └── zoom-world-mini.png │ │ ├── info.inc.php │ │ ├── jquery │ │ │ ├── images │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ └── jquery-ui.css │ │ ├── layout.inc.php │ │ ├── screen.png │ │ └── sprites.lib.php │ └── svg_gradient.php ├── themes.php ├── transformation_overview.php ├── transformation_wrapper.php ├── url.php ├── user_password.php ├── vendor │ ├── autoload.php │ ├── bin │ │ ├── highlight-query -> ../phpmyadmin/sql-parser/bin/highlight-query │ │ └── lint-query -> ../phpmyadmin/sql-parser/bin/lint-query │ ├── composer │ │ ├── autoload_classmap.php │ │ ├── autoload_files.php │ │ ├── autoload_namespaces.php │ │ ├── autoload_psr4.php │ │ ├── autoload_real.php │ │ ├── autoload_static.php │ │ ├── ClassLoader.php │ │ ├── installed.json │ │ └── LICENSE │ ├── google │ │ └── recaptcha │ │ ├── composer.json │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── phpunit.xml.dist │ │ ├── README.md │ │ └── src │ │ ├── autoload.php │ │ └── ReCaptcha │ │ ├── ReCaptcha.php │ │ ├── RequestMethod │ │ │ ├── Curl.php │ │ │ ├── CurlPost.php │ │ │ ├── Post.php │ │ │ ├── Socket.php │ │ │ └── SocketPost.php │ │ ├── RequestMethod.php │ │ ├── RequestParameters.php │ │ └── Response.php │ ├── phpmyadmin │ │ ├── motranslator │ │ │ ├── CHANGES.md │ │ │ ├── codecov.yml │ │ │ ├── composer.json │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── PERFORMANCE.md │ │ │ ├── phpunit.xml │ │ │ ├── README.md │ │ │ └── src │ │ │ ├── functions.php │ │ │ ├── Loader.php │ │ │ ├── ReaderException.php │ │ │ ├── StringReader.php │ │ │ └── Translator.php │ │ ├── shapefile │ │ │ ├── CHANGELOG.md │ │ │ ├── codecov.yml │ │ │ ├── composer.json │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── phpunit.xml │ │ │ ├── README.md │ │ │ └── src │ │ │ ├── ShapeFile.php │ │ │ ├── ShapeRecord.php │ │ │ └── Util.php │ │ └── sql-parser │ │ ├── bin │ │ │ ├── highlight-query │ │ │ ├── lint-query │ │ │ └── tokenize-query │ │ ├── CHANGELOG.md │ │ ├── codecov.yml │ │ ├── composer.json │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE.txt │ │ ├── locale │ │ │ ├── af │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ar │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ast │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── az │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── be │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── be@latin │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── bg │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── bn │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── br │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── brx │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── bs │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ca │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ckb │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── cs │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── cy │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── da │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── de │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── el │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── en_GB │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── eo │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── es │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── et │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── eu │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── fa │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── fi │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── fr │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── fy │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── gl │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── gu │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── he │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── hi │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── hr │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── hu │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── hy │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ia │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── id │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── it │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ja │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ka │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── kk │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── km │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── kn │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ko │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ksh │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ky │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── li │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── lt │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── lv │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── mk │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ml │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── mn │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ms │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── nb │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ne │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── nl │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── pa │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── pl │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── pt │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── pt_BR │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ro │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ru │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── si │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sk │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sl │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sq │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sqlparser.pot │ │ │ ├── sr │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sr@latin │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── sv │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ta │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── te │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── th │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── tk │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── tr │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── tt │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ug │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── uk │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── ur │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── uz │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── uz@latin │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── vi │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── vls │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ ├── zh_CN │ │ │ │ └── LC_MESSAGES │ │ │ │ └── sqlparser.mo │ │ │ └── zh_TW │ │ │ └── LC_MESSAGES │ │ │ └── sqlparser.mo │ │ ├── phpunit.xml │ │ ├── README.md │ │ └── src │ │ ├── Component.php │ │ ├── Components │ │ │ ├── AlterOperation.php │ │ │ ├── Array2d.php │ │ │ ├── ArrayObj.php │ │ │ ├── CaseExpression.php │ │ │ ├── Condition.php │ │ │ ├── CreateDefinition.php │ │ │ ├── DataType.php │ │ │ ├── ExpressionArray.php │ │ │ ├── Expression.php │ │ │ ├── FunctionCall.php │ │ │ ├── GroupKeyword.php │ │ │ ├── IntoKeyword.php │ │ │ ├── JoinKeyword.php │ │ │ ├── Key.php │ │ │ ├── Limit.php │ │ │ ├── OptionsArray.php │ │ │ ├── OrderKeyword.php │ │ │ ├── ParameterDefinition.php │ │ │ ├── PartitionDefinition.php │ │ │ ├── Reference.php │ │ │ ├── RenameOperation.php │ │ │ ├── SetOperation.php │ │ │ └── UnionKeyword.php │ │ ├── Context.php │ │ ├── Contexts │ │ │ ├── ContextMySql50000.php │ │ │ ├── ContextMySql50100.php │ │ │ ├── ContextMySql50500.php │ │ │ ├── ContextMySql50600.php │ │ │ └── ContextMySql50700.php │ │ ├── Core.php │ │ ├── Exceptions │ │ │ ├── LexerException.php │ │ │ ├── LoaderException.php │ │ │ └── ParserException.php │ │ ├── Lexer.php │ │ ├── Parser.php │ │ ├── Statement.php │ │ ├── Statements │ │ │ ├── AlterStatement.php │ │ │ ├── AnalyzeStatement.php │ │ │ ├── BackupStatement.php │ │ │ ├── CallStatement.php │ │ │ ├── CheckStatement.php │ │ │ ├── ChecksumStatement.php │ │ │ ├── CreateStatement.php │ │ │ ├── DeleteStatement.php │ │ │ ├── DropStatement.php │ │ │ ├── ExplainStatement.php │ │ │ ├── InsertStatement.php │ │ │ ├── LoadStatement.php │ │ │ ├── MaintenanceStatement.php │ │ │ ├── NotImplementedStatement.php │ │ │ ├── OptimizeStatement.php │ │ │ ├── RenameStatement.php │ │ │ ├── RepairStatement.php │ │ │ ├── ReplaceStatement.php │ │ │ ├── RestoreStatement.php │ │ │ ├── SelectStatement.php │ │ │ ├── SetStatement.php │ │ │ ├── ShowStatement.php │ │ │ ├── TransactionStatement.php │ │ │ ├── TruncateStatement.php │ │ │ └── UpdateStatement.php │ │ ├── Token.php │ │ ├── TokensList.php │ │ ├── Translator.php │ │ ├── UtfString.php │ │ └── Utils │ │ ├── BufferedQuery.php │ │ ├── CLI.php │ │ ├── Error.php │ │ ├── Formatter.php │ │ ├── Misc.php │ │ ├── Query.php │ │ ├── Routine.php │ │ ├── Table.php │ │ └── Tokens.php │ ├── phpseclib │ │ └── phpseclib │ │ ├── AUTHORS │ │ ├── composer.json │ │ ├── composer.lock │ │ ├── LICENSE │ │ ├── phpseclib │ │ │ ├── bootstrap.php │ │ │ ├── Crypt │ │ │ │ ├── AES.php │ │ │ │ ├── Base.php │ │ │ │ ├── Random.php │ │ │ │ └── Rijndael.php │ │ │ └── openssl.cnf │ │ └── README.md │ ├── psr │ │ ├── cache │ │ │ ├── CHANGELOG.md │ │ │ ├── composer.json │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ └── src │ │ │ ├── CacheException.php │ │ │ ├── CacheItemInterface.php │ │ │ ├── CacheItemPoolInterface.php │ │ │ └── InvalidArgumentException.php │ │ ├── log │ │ │ ├── composer.json │ │ │ ├── LICENSE │ │ │ ├── Psr │ │ │ │ └── Log │ │ │ │ ├── AbstractLogger.php │ │ │ │ ├── InvalidArgumentException.php │ │ │ │ ├── LoggerAwareInterface.php │ │ │ │ ├── LoggerAwareTrait.php │ │ │ │ ├── LoggerInterface.php │ │ │ │ ├── LoggerTrait.php │ │ │ │ ├── LogLevel.php │ │ │ │ ├── NullLogger.php │ │ │ │ └── Test │ │ │ │ └── LoggerInterfaceTest.php │ │ │ └── README.md │ │ └── simple-cache │ │ ├── composer.json │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── src │ │ ├── CacheException.php │ │ ├── CacheInterface.php │ │ └── InvalidArgumentException.php │ ├── symfony │ │ ├── cache │ │ │ ├── Adapter │ │ │ │ ├── AbstractAdapter.php │ │ │ │ ├── AdapterInterface.php │ │ │ │ ├── ApcuAdapter.php │ │ │ │ ├── ArrayAdapter.php │ │ │ │ ├── ChainAdapter.php │ │ │ │ ├── DoctrineAdapter.php │ │ │ │ ├── FilesystemAdapter.php │ │ │ │ ├── MemcachedAdapter.php │ │ │ │ ├── NullAdapter.php │ │ │ │ ├── PdoAdapter.php │ │ │ │ ├── PhpArrayAdapter.php │ │ │ │ ├── PhpFilesAdapter.php │ │ │ │ ├── ProxyAdapter.php │ │ │ │ ├── RedisAdapter.php │ │ │ │ ├── SimpleCacheAdapter.php │ │ │ │ ├── TagAwareAdapterInterface.php │ │ │ │ ├── TagAwareAdapter.php │ │ │ │ ├── TraceableAdapter.php │ │ │ │ └── TraceableTagAwareAdapter.php │ │ │ ├── CacheItem.php │ │ │ ├── CHANGELOG.md │ │ │ ├── composer.json │ │ │ ├── DataCollector │ │ │ │ └── CacheDataCollector.php │ │ │ ├── DoctrineProvider.php │ │ │ ├── Exception │ │ │ │ ├── CacheException.php │ │ │ │ └── InvalidArgumentException.php │ │ │ ├── LICENSE │ │ │ ├── phpunit.xml.dist │ │ │ ├── README.md │ │ │ ├── Simple │ │ │ │ ├── AbstractCache.php │ │ │ │ ├── ApcuCache.php │ │ │ │ ├── ArrayCache.php │ │ │ │ ├── ChainCache.php │ │ │ │ ├── DoctrineCache.php │ │ │ │ ├── FilesystemCache.php │ │ │ │ ├── MemcachedCache.php │ │ │ │ ├── NullCache.php │ │ │ │ ├── PdoCache.php │ │ │ │ ├── PhpArrayCache.php │ │ │ │ ├── PhpFilesCache.php │ │ │ │ ├── Psr6Cache.php │ │ │ │ ├── RedisCache.php │ │ │ │ └── TraceableCache.php │ │ │ └── Traits │ │ │ ├── AbstractTrait.php │ │ │ ├── ApcuTrait.php │ │ │ ├── ArrayTrait.php │ │ │ ├── DoctrineTrait.php │ │ │ ├── FilesystemCommonTrait.php │ │ │ ├── FilesystemTrait.php │ │ │ ├── MemcachedTrait.php │ │ │ ├── PdoTrait.php │ │ │ ├── PhpArrayTrait.php │ │ │ ├── PhpFilesTrait.php │ │ │ └── RedisTrait.php │ │ └── expression-language │ │ ├── CHANGELOG.md │ │ ├── Compiler.php │ │ ├── composer.json │ │ ├── ExpressionFunction.php │ │ ├── ExpressionFunctionProviderInterface.php │ │ ├── ExpressionLanguage.php │ │ ├── Expression.php │ │ ├── Lexer.php │ │ ├── LICENSE │ │ ├── Node │ │ │ ├── ArgumentsNode.php │ │ │ ├── ArrayNode.php │ │ │ ├── BinaryNode.php │ │ │ ├── ConditionalNode.php │ │ │ ├── ConstantNode.php │ │ │ ├── FunctionNode.php │ │ │ ├── GetAttrNode.php │ │ │ ├── NameNode.php │ │ │ ├── Node.php │ │ │ └── UnaryNode.php │ │ ├── ParsedExpression.php │ │ ├── ParserCache │ │ │ ├── ArrayParserCache.php │ │ │ ├── ParserCacheAdapter.php │ │ │ └── ParserCacheInterface.php │ │ ├── Parser.php │ │ ├── phpunit.xml.dist │ │ ├── README.md │ │ ├── SerializedParsedExpression.php │ │ ├── SyntaxError.php │ │ ├── Token.php │ │ └── TokenStream.php │ └── tecnickcom │ └── tcpdf │ ├── CHANGELOG.TXT │ ├── composer.json │ ├── config │ │ └── tcpdf_config.php │ ├── fonts │ │ ├── dejavu-fonts-ttf-2.34 │ │ │ ├── AUTHORS │ │ │ ├── BUGS │ │ │ ├── langcover.txt │ │ │ ├── LICENSE │ │ │ ├── NEWS │ │ │ ├── README │ │ │ ├── status.txt │ │ │ └── unicover.txt │ │ ├── dejavusansb.ctg.z │ │ ├── dejavusansb.php │ │ ├── dejavusansb.z │ │ ├── dejavusans.ctg.z │ │ ├── dejavusans.php │ │ ├── dejavusans.z │ │ └── helvetica.php │ ├── include │ │ ├── barcodes │ │ │ ├── datamatrix.php │ │ │ ├── pdf417.php │ │ │ └── qrcode.php │ │ ├── tcpdf_colors.php │ │ ├── tcpdf_filters.php │ │ ├── tcpdf_font_data.php │ │ ├── tcpdf_fonts.php │ │ ├── tcpdf_images.php │ │ └── tcpdf_static.php │ ├── LICENSE.TXT │ ├── README.md │ ├── tcpdf_autoconfig.php │ ├── tcpdf_barcodes_1d.php │ ├── tcpdf_barcodes_2d.php │ ├── tcpdf_import.php │ ├── tcpdf_parser.php │ └── tcpdf.php ├── version_check.php ├── view_create.php └── view_operations.php 482 directories, 2336 files
grundlegende Konfiguration
Apache vHOST
Im ersten Konfigurationsbeispiel richten wir uns einen vHOST für unseren Apache-Webserver ein. Hier legen wir uns nachfolgende Konfigurationsdatei an und passen dieser entsprechend unserer Umgebung nach an.
# vim /etc/httpd/conf.d/phpMyAdmin.conf
- /etc/httpd/conf.d/phpMyAdmin.conf
# # Django : 2017-10-06 # vHost phpmyadmin # # Variablen der Hostvariablen Define vhost phpmyadmin Define errors_log logs/${vhost}_error.log Define access_log logs/${vhost}_access.log Define ssl_log logs/${vhost}_ssl_request.log <VirtualHost *:80> ServerAdmin webmaster@nausch.org ServerName ${vhost}.nausch.org # HTTP auf HTTPS umleiten RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.117" dontlog ErrorLog ${errors_log} CustomLog ${access_log} combined env=!dontlog </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@nausch.org ServerName ${vhost}.nausch.org ServerPath / # Wer soll Zugriff auf die Webseite(n) bekommen? <Location /> Options +FollowSymLinks +Multiviews -Indexes AllowOverride None AuthType Basic AuthName "Fuer den Zugriff auf den Webserver bitte Anmeldedaten eingeben!" AuthBasicProvider ldap AuthLDAPUrl ldaps://openldap.dmz.nausch.org:636/ou=People,dc=nausch,dc=org?uid AuthLDAPBindDN cn=Technischeruser,dc=nausch,dc=org AuthLDAPBindPassword "e1n531f!D4xIi57n38103034u!" AuthLDAPBindAuthoritative on Require ldap-user pma-admin </Location> # Welcher Inhalt soll angezeigt bzw. auf welchen Server sollen die HTTP-Requests weitergeleitet werden? DocumentRoot "/usr/share/phpMyAdmin/" DirectoryIndex index.php <Directory /usr/share/phpMyAdmin/> Options none AllowOverride Limit Require all granted </Directory> <LocationMatch "/(config.inc.php|configs|scripts|smarty|tests|users|VIRTUAL_VACATION)/"> Require all denied </LocationMatch> # Nutzung des PHP-FPM Interpreters <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9001" #SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.117" dontlog ErrorLog ${errors_log} CustomLog ${access_log} combined env=!dontlog CustomLog ${ssl_log} "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # Absicherung der Übertragung mit Hilfe von TLS # Django : 2015-10-04 - TLS-Verschlüsselung mit Hilfe von mod_ssl SSLEngine on # Definition der anzubietenden Protokolle SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 # Definition der Cipher SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384 # Schlüsseldatei, mit der der CSR erstellt wurde SSLCertificateKeyFile /etc/pki/tls/private/wildcard_2017.nausch.org.serverkey.pem # Zertifikatsdatei, die von der CA signiert wurde SSLCertificateFile /etc/pki/tls/certs/wildcard_2017.nausch.org.certificate_161118.pem # Zertifikatsdatei des bzw. der Intermediate-Zertifikate(s) SSLCertificateChainFile /etc/pki/tls/certs/AlphaSSL_Intermediate.certificate.pem # Änderung der Cipherorder der Clients verneinen SSLHonorCipherOrder on # TLS 1.0 Kompremmierung deaktivieren (CRIME attacks) SSLCompression off # Online Certificate Status Protocol stapling zum Prüfen des Gültigkeitsstatus des Serverzertifikats. SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off # HTTP Strict Transport Security (HSTS), bei dem der Server dem Client im HTTP-Header mitteilt, # dass dieser nur noch verschlüsselt mit dem Server kommunizieren soll. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # This header enables the Cross-site scripting (XSS) filter built into most recent web browsers. # It's usually enabled by default anyway, so the role of this header is to re-enable the filter for # this particular website if it was disabled by the user. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers #Header set X-XSS-Protection "1; mode=block" Header always set X-Xss-Protection "1; mode=block" # when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header, # to disable content-type sniffing on some browsers. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers # currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx # http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx # 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020 # Sofern die Datei auch den entsprechenden MIME-Typ "text/css" entspricht, soll der Browser # CSS-Dateien nur als CSS interprätieren. Header always set X-Content-Type-Options nosniff # config to don't allow the browser to render the page inside an frame or iframe # and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking # if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri # https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options ###header set X-Frame-Options SAMEORIGIN header always set X-Frame-Options DENY # hide server header (apache and php version) Header always unset Server # Only allow JavaScript from the same domain to be run. # don't allow inline JavaScript to run. Header always set X-Content-Security-Policy "allow 'self';" #Header always set Content-Security-Policy "default-src 'self'; report-uri https://nausch.report-uri.io/r/default/csp/enforce" # Add Secure and HTTP only attributes to cookies Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure # prevent Clickjacking Attack #Header always append X-Frame-Options SAMEORIGIN Header always set X-Frame-Options "SAMEORIGIN" # hkpk-stuff Header always set Public-Key-Pins "pin-sha256=\"nMiOpb6vUnjCoWCkPkDaxieG4ND8SNWzFTsQf2ZfruLno0=\"; pin-sha256=\"INhxSQ38nCS6ijaAAyo4xBabej9xeL3Xaak+GGiM2fo=\"; max-age=2592000; report-uri=\"https://nausch.report-uri.io/r/default/hpkp/enforce\"" </VirtualHost>
Haben wir die Konfigurationsdatei vervollständigt, prüfen wir diese noch auf syntaktische Fehler.
# apachectl -t
Syntax OK
Ein reload unseres Apache Webserver reicht nun aus, um den neuen vHOST verfügbar zu haben.
# systemctl reload httpd.service
Datenbankkonfiguration / User
In der Regel werden wir auf unserem Datenbank- keinen Webserver installiert haben, sondern hierzu zwei eigenständige Server verwenden. Im Kapitel Installation absichern hatten wir bei der Installation unseres MariaDB-Servers unter anderem den Remotezugang für den Datenbankuser root unterbunden.
Wir werden uns daher einen eigenen Datenbanknutzer anlegen, der die entsprechenden Rechte besitzt. Hierzu sind folgende Schritte notwendig:
- Anmelden auf dem Datenbankserver
- Neuen Benutzer anlegen
- Benutzerprivilegien setzen und zuweisen
- Rechte des Nutzers in der Datenbank neu laden
- Beenden der Verbindung zum Datenbankserver
- Anmelden auf dem Datenbankserver
Wir melden uns also als berechtigter Datenbankuser an der MariaDB an.
# mysql -h localhost -u root -p
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 42 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB>
- neuen Benutzer anlegen
Mit folgendem Befehl legen wir uns einen neuen Nutzer an:
MariaDB> CREATE USER 'databaseuser'@'vml000107.dmz.nausch.org' IDENTIFIED BY 'databasepassword';
Query OK, 0 rows affected (0.00 sec)
sowie
MariaDB> CREATE USER 'databaseuser'@'10.0.0.107' IDENTIFIED BY 'databasepassword';
Query OK, 0 rows affected (0.00 sec)
- Benutzerprivilegien setzen und zuweisen
Anschließend setzen wir die Benutzerrechte unseres gerade angelegten Datenbanknutzers.
MariaDB> GRANT ALL PRIVILEGES ON * . * TO 'databaseuser'@'vml000107.dmz.nausch.org' IDENTIFIED BY 'databasepassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Query OK, 0 rows affected (0.00 sec)
und
MariaDB> GRANT ALL PRIVILEGES ON * . * TO 'databaseuser'@'10.0.0.107' IDENTIFIED BY 'databasepassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Query OK, 0 rows affected (0.00 sec)
- Rechte des Nutzers in der Datenbank neu laden
Im letzten Schritt laden wir nun die Rechte unseres neuen Datenbankusers.
MariaDB> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
- Datenbankverbindung beenden
Unsere Konfiguration unseres neuen Datenbanknutzers ist hiermit beendet und wir können die Verbindung zur Datenbank wieder schließen.
MariaDB> exit
Bye
Zugriff testen
Zum Schluss überprüfen wir, ob der zuvor angelegt User/Zugang auch vom Webserver aus funktioniert.
# mysql -h mariadb.dmz.nausch.org -u databaseuser -p
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 1269396 Server version: 5.5.56 Source distribution Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+ | Database | +--------------------+ | information_schema | | cacti | | dmarc | | fhem | | horde | | mail | | mysql | | opendmarc | | postfix | | roundcubemail | | webstats | | wviewDB | +--------------------+ 12 rows in set (0.00 sec) MariaDB [(none)]>
Da der Test positiv ausgefallen ist, können wie uns wieder von unserem Datenbankserver abmelden.
MariaDB [(none)]> quit
Bye
PMADB
Mit Hilfe der PMADB1), einer internen Datenbanktabelle auf unserem Datenbankserver, können weitere Funktionen für phpMyAdmin zur Verfügung gestellt werden.
Folgende Zusatzfunktionen können Dank dieser Datenbanktabelle bei Bedarf genutzt werden:
- bookmarks - Lesezeichen
- comments - Kommentarmöglichkeiten
- SQL-history - Historie von SQL-Befehlen
- tracking mechanism - Aufzeichnungsmöglichkeiten und -funktionen
- PDF-generation - Erstellen von PDF-Dateien bei der Ausgabe
- column contents transformation - Umwandlung/Konvertierung von Inhalten einzelner Spalten
Für weitere detaillierte Informationen zu den Funktionen nutzt man am besten die Dokumente und Informationen auf der Wikiseite von phpMyAdmin.
Damit die oben aufgezeigten Zusatzfunktionen genutzt werden können, benötigen wir einen speziellen Nutzer, der vom Webserver aus auf die benötigte Tabelle zugreifen kann. Wir werden also die drei nötigen Schritte nacheinander vornehmen:
- Datenbanknutzer anlegen
- Datenbank(tabellen) erstellen
- phpMyAdmin konfigurieren
Datenbanknutzer anlegen
Im ersten Schritt legen wir uns unseren controluser an:
- Anmelden auf dem Datenbankserver
- Neuen Benutzer anlegen
- Beenden der Verbindung zum Datenbankserver
Haben wir mehr als einen Datenbank-Server, wen wir mit Hilfe unserer phpMyAdmin-Installation administrieren möchten, legen wir diesen Control-User auf allen MySQL/MariaDB-Servern entsprechend an.
- Anmelden auf dem Datenbankserver
Wir melden uns also als berechtigter Datenbankuser an der MariaDB an.
# mysql -h localhost -u root -p
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 42 Server version: 5.5.40-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB>
- neuen Benutzer anlegen
Mit folgendem Befehl legen wir uns einen neuen Nutzer an:
MariaDB> CREATE USER 'controluser'@'vml000107.dmz.nausch.org' IDENTIFIED BY 'controlpassword';
Query OK, 0 rows affected (0.00 sec)
sowie
MariaDB> CREATE USER 'controluser'@'10.0.0.107' IDENTIFIED BY 'controlpassword';
Query OK, 0 rows affected (0.00 sec)
- Datenbankverbindung beenden
Unsere Konfiguration unseres neuen Datenbanknutzers ist hiermit beendet und wir können die Verbindung zur Datenbank wieder schließen.
MariaDB> exit
Bye
Datenbank(tabellen) erstellen
Zum Erstellen der benötigten Tabelle greifen wir auf die Datei /usr/share/phpMyAdmin/examples/create_tables.sql zurück. Diese Musterdatei kopieren wir uns zunächst in das Verzeichnis /root/.
# cp /usr/share/phpMyAdmin/sql/create_tables.sql /root/create_pmadb_tables.sql
Vor dem Start des Scriptes, muss dieses unbedingt noch den lokalen Gegebenheiten nach angepasst werden!
Anschließend passen wir den Inhalt unseren lokalen Gegebenheiten an.
# vim /root/create_pmadb_tables.sql
Hier fügen wir beim Abschnitt – Privileges folgende Zeilen ein:
- -------------------------------------------------------- -- -- Privileges -- -- (activate this statement if necessary) -- GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO -- 'pma'@localhost; -- Grant privileges to phpMyAdmin controluser. GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO 'controluser'@'10.0.0.107'; GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO 'controluser'@'vml000107.dmz.nausch.org'; -- Reload privileges. FLUSH PRIVILEGES; -- --------------------------------------------------------
Somit ergibt sich folgende komplette Datei.
- /root/create_pmadb_tables.sql
-- -------------------------------------------------------- -- SQL Commands to set up the pmadb as described in the documentation. -- -- This file is meant for use with MySQL 5 and above! -- -- This script expects the user pma to already be existing. If we would put a -- line here to create him too many users might just use this script and end -- up with having the same password for the controluser. -- -- This user "pma" must be defined in config.inc.php (controluser/controlpass) -- -- Please don't forget to set up the tablenames in config.inc.php -- -- -------------------------------------------------------- -- -- Database : `phpmyadmin` -- CREATE DATABASE IF NOT EXISTS `phpmyadmin` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE phpmyadmin; -- -------------------------------------------------------- -- -- Privileges -- -- (activate this statement if necessary) -- GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO -- 'pma'@localhost; GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO 'controluser'@'10.0.0.107'; GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO 'controluser'@'vml000107.dmz.nausch.org'; -- -------------------------------------------------------- -- -- Table structure for table `pma__bookmark` -- CREATE TABLE IF NOT EXISTS `pma__bookmark` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `dbase` VARCHAR(255) NOT NULL DEFAULT '', `user` VARCHAR(255) NOT NULL DEFAULT '', `label` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', `query` text NOT NULL, PRIMARY KEY (`id`) ) COMMENT='Bookmarks' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__column_info` -- CREATE TABLE IF NOT EXISTS `pma__column_info` ( `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT, `db_name` VARCHAR(64) NOT NULL DEFAULT '', `table_name` VARCHAR(64) NOT NULL DEFAULT '', `column_name` VARCHAR(64) NOT NULL DEFAULT '', `comment` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', `mimetype` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', `transformation` VARCHAR(255) NOT NULL DEFAULT '', `transformation_options` VARCHAR(255) NOT NULL DEFAULT '', `input_transformation` VARCHAR(255) NOT NULL DEFAULT '', `input_transformation_options` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`) ) COMMENT='Column information for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__history` -- CREATE TABLE IF NOT EXISTS `pma__history` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL DEFAULT '', `db` VARCHAR(64) NOT NULL DEFAULT '', `table` VARCHAR(64) NOT NULL DEFAULT '', `timevalue` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `sqlquery` text NOT NULL, PRIMARY KEY (`id`), KEY `username` (`username`,`db`,`table`,`timevalue`) ) COMMENT='SQL history for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__pdf_pages` -- CREATE TABLE IF NOT EXISTS `pma__pdf_pages` ( `db_name` VARCHAR(64) NOT NULL DEFAULT '', `page_nr` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `page_descr` VARCHAR(50) COLLATE utf8_general_ci NOT NULL DEFAULT '', PRIMARY KEY (`page_nr`), KEY `db_name` (`db_name`) ) COMMENT='PDF relation pages for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__recent` -- CREATE TABLE IF NOT EXISTS `pma__recent` ( `username` VARCHAR(64) NOT NULL, `tables` text NOT NULL, PRIMARY KEY (`username`) ) COMMENT='Recently accessed tables' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__favorite` -- CREATE TABLE IF NOT EXISTS `pma__favorite` ( `username` VARCHAR(64) NOT NULL, `tables` text NOT NULL, PRIMARY KEY (`username`) ) COMMENT='Favorite tables' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__table_uiprefs` -- CREATE TABLE IF NOT EXISTS `pma__table_uiprefs` ( `username` VARCHAR(64) NOT NULL, `db_name` VARCHAR(64) NOT NULL, `table_name` VARCHAR(64) NOT NULL, `prefs` text NOT NULL, `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`username`,`db_name`,`table_name`) ) COMMENT='Tables'' UI preferences' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__relation` -- CREATE TABLE IF NOT EXISTS `pma__relation` ( `master_db` VARCHAR(64) NOT NULL DEFAULT '', `master_table` VARCHAR(64) NOT NULL DEFAULT '', `master_field` VARCHAR(64) NOT NULL DEFAULT '', `foreign_db` VARCHAR(64) NOT NULL DEFAULT '', `foreign_table` VARCHAR(64) NOT NULL DEFAULT '', `foreign_field` VARCHAR(64) NOT NULL DEFAULT '', PRIMARY KEY (`master_db`,`master_table`,`master_field`), KEY `foreign_field` (`foreign_db`,`foreign_table`) ) COMMENT='Relation table' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__table_coords` -- CREATE TABLE IF NOT EXISTS `pma__table_coords` ( `db_name` VARCHAR(64) NOT NULL DEFAULT '', `table_name` VARCHAR(64) NOT NULL DEFAULT '', `pdf_page_number` INT(11) NOT NULL DEFAULT '0', `x` FLOAT UNSIGNED NOT NULL DEFAULT '0', `y` FLOAT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`) ) COMMENT='Table coordinates for phpMyAdmin PDF output' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__table_info` -- CREATE TABLE IF NOT EXISTS `pma__table_info` ( `db_name` VARCHAR(64) NOT NULL DEFAULT '', `table_name` VARCHAR(64) NOT NULL DEFAULT '', `display_field` VARCHAR(64) NOT NULL DEFAULT '', PRIMARY KEY (`db_name`,`table_name`) ) COMMENT='Table information for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__tracking` -- CREATE TABLE IF NOT EXISTS `pma__tracking` ( `db_name` VARCHAR(64) NOT NULL, `table_name` VARCHAR(64) NOT NULL, `version` INT(10) UNSIGNED NOT NULL, `date_created` datetime NOT NULL, `date_updated` datetime NOT NULL, `schema_snapshot` text NOT NULL, `schema_sql` text, `data_sql` longtext, `tracking` SET('UPDATE','REPLACE','INSERT','DELETE','TRUNCATE','CREATE DATABASE','ALTER DATABASE','DROP DATABASE','CREATE TABLE','ALTER TABLE','RENAME TABLE','DROP TABLE','CREATE INDEX','DROP INDEX','CREATE VIEW','ALTER VIEW','DROP VIEW') DEFAULT NULL, `tracking_active` INT(1) UNSIGNED NOT NULL DEFAULT '1', PRIMARY KEY (`db_name`,`table_name`,`version`) ) COMMENT='Database changes tracking for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__userconfig` -- CREATE TABLE IF NOT EXISTS `pma__userconfig` ( `username` VARCHAR(64) NOT NULL, `timevalue` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `config_data` text NOT NULL, PRIMARY KEY (`username`) ) COMMENT='User preferences storage for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__users` -- CREATE TABLE IF NOT EXISTS `pma__users` ( `username` VARCHAR(64) NOT NULL, `usergroup` VARCHAR(64) NOT NULL, PRIMARY KEY (`username`,`usergroup`) ) COMMENT='Users and their assignments to user groups' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__usergroups` -- CREATE TABLE IF NOT EXISTS `pma__usergroups` ( `usergroup` VARCHAR(64) NOT NULL, `tab` VARCHAR(64) NOT NULL, `allowed` enum('Y','N') NOT NULL DEFAULT 'N', PRIMARY KEY (`usergroup`,`tab`,`allowed`) ) COMMENT='User groups with configured menu items' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__navigationhiding` -- CREATE TABLE IF NOT EXISTS `pma__navigationhiding` ( `username` VARCHAR(64) NOT NULL, `item_name` VARCHAR(64) NOT NULL, `item_type` VARCHAR(64) NOT NULL, `db_name` VARCHAR(64) NOT NULL, `table_name` VARCHAR(64) NOT NULL, PRIMARY KEY (`username`,`item_name`,`item_type`,`db_name`,`table_name`) ) COMMENT='Hidden items of navigation tree' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__savedsearches` -- CREATE TABLE IF NOT EXISTS `pma__savedsearches` ( `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL DEFAULT '', `db_name` VARCHAR(64) NOT NULL DEFAULT '', `search_name` VARCHAR(64) NOT NULL DEFAULT '', `search_data` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `u_savedsearches_username_dbname` (`username`,`db_name`,`search_name`) ) COMMENT='Saved searches' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__central_columns` -- CREATE TABLE IF NOT EXISTS `pma__central_columns` ( `db_name` VARCHAR(64) NOT NULL, `col_name` VARCHAR(64) NOT NULL, `col_type` VARCHAR(64) NOT NULL, `col_length` text, `col_collation` VARCHAR(64) NOT NULL, `col_isNull` BOOLEAN NOT NULL, `col_extra` VARCHAR(255) DEFAULT '', `col_default` text, PRIMARY KEY (`db_name`,`col_name`) ) COMMENT='Central list of columns' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__designer_settings` -- CREATE TABLE IF NOT EXISTS `pma__designer_settings` ( `username` VARCHAR(64) NOT NULL, `settings_data` text NOT NULL, PRIMARY KEY (`username`) ) COMMENT='Settings related to Designer' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- -- -- Table structure for table `pma__export_templates` -- CREATE TABLE IF NOT EXISTS `pma__export_templates` ( `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL, `export_type` VARCHAR(10) NOT NULL, `template_name` VARCHAR(64) NOT NULL, `template_data` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `u_user_type_template` (`username`,`export_type`,`template_name`) ) COMMENT='Saved export templates' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Unser angepasstes Script laden wir dann auf unserem Datenbankhost mit nachfolgendem Befehl.
# mysql -h 127.0.0.1 -u root -p < /root/create_pmadb_tables.sql
Enter password:
Haben wir mehr als einen Datenbank-Server, wen wir mit Hilfe unserer phpMyAdmin-Installation administrieren möchten, laden wir unser vorbereitetes Script in alle MySQL/MariaDB-Server hoch.
Zugriff testen
Zum Schluß überprüfen wir, ob der zuvor angelegt User/Zugang auch vom Webserver aus funktioniert.
# mysql -h mariadb.dmz.nausch.org -D phpmyadmin -u controluser -p
Enter password:
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 444660 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [phpmyadmin]> show tables; +------------------------+ | Tables_in_phpmyadmin | +------------------------+ | pma__bookmark | | pma__central_columns | | pma__column_info | | pma__designer_settings | | pma__export_templates | | pma__favorite | | pma__history | | pma__navigationhiding | | pma__pdf_pages | | pma__recent | | pma__relation | | pma__savedsearches | | pma__table_coords | | pma__table_info | | pma__table_uiprefs | | pma__tracking | | pma__userconfig | | pma__usergroups | | pma__users | +------------------------+ 19 rows in set (0.00 sec) MariaDB [phpmyadmin]>
Da der Test positiv ausgefallen ist, können wie uns wieder von unserem Datenbankserver abmelden.
MariaDB [phpmyadmin]> exit
Bye
Anwendungskonfiguration
manueller Weg
Der schnellste und auch einfachste Weg phpMyAdmin zu konfigurieren, ist das manuelle Editieren der Konfigurationsdatei; dazu benutzt man seinen Editor der Wahl. Hilfreiche Informationen zu den möglichen Konfigurationsoptionen findet man dazu in der Onlinedokumentation im Verzeichnis doc/html/, also erreichbar über http://phpmyadmin.nausch.org/doc/html/index.html
$ firefox http://phpmyadmin.nausch.org/doc/html/index.html
Weitere Informationen zum Aufbau und Inhalt findet man auch in der aktuell(st)en Dokumentation von phpMyAdmin.
Die Konfigurationsdatei liegt im Hauptverzeichnis von phpMyAdmin, in unserem Fall also /usr/share/phpMyAdmin. Dort liegt eine Vorlagedatei /usr/share/phpMyAdmin/config.sample.inc.php. Diese Datei kopieren wir nun zur weiteren manuellen Bearbeitung erst einmal.
# cp -a /usr/share/phpMyAdmin/config.sample.inc.php /usr/share/phpMyAdmin/config.inc.php
Zum Bearbeiten der Konfigurationsdatei nutzen wir z.B. vim.
# vim /usr/share/phpMyAdmin/config.inc.php
- /usr/share/phpMyAdmin/config.inc.php
<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * phpMyAdmin sample configuration, you can use it as base for * manual configuration. For easier setup you can use setup/ * * All directives are explained in documentation in the doc/ folder * or at <https://docs.phpmyadmin.net/>. * * @package PhpMyAdmin */ /** * This is needed for cookie based authentication to encrypt password in * cookie. Needs to be 32 chars long. */ $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ /** * Servers configuration */ $i = 0; /** * First server */ $i++; /* Authentication type */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['AllowNoPassword'] = false; /** * phpMyAdmin configuration storage settings. */ /* User used to manipulate with storage */ // $cfg['Servers'][$i]['controlhost'] = ''; // $cfg['Servers'][$i]['controlport'] = ''; // $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]['table_uiprefs'] = 'pma__table_uiprefs'; // $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; // $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; // $cfg['Servers'][$i]['recent'] = 'pma__recent'; // $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; // $cfg['Servers'][$i]['users'] = 'pma__users'; // $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; // $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; // $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; // $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; // $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; // $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; /** * End of servers configuration */ /** * Directories for saving/loading files from server */ $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; /** * Whether to display icons or text or both icons and text in table row * action segment. Value can be either of 'icons', 'text' or 'both'. * default = 'both' */ //$cfg['RowActionType'] = 'icons'; /** * Defines whether a user should be displayed a "show all (records)" * button in browse mode or not. * default = false */ //$cfg['ShowAll'] = true; /** * Number of rows displayed when browsing a result set. If the result * set contains more rows, "Previous" and "Next". * Possible values: 25, 50, 100, 250, 500 * default = 25 */ //$cfg['MaxRows'] = 50; /** * Disallow editing of binary fields * valid values are: * false allow editing * 'blob' allow editing except for BLOB fields * 'noblob' disallow editing except for BLOB fields * 'all' disallow editing * default = 'blob' */ //$cfg['ProtectBinary'] = false; /** * Default language to use, if not browser-defined or user-defined * (you find all languages in the locale folder) * uncomment the desired line: * default = 'en' */ //$cfg['DefaultLang'] = 'en'; //$cfg['DefaultLang'] = 'de'; /** * How many columns should be used for table display of a database? * (a value larger than 1 results in some information being hidden) * default = 1 */ //$cfg['PropertiesNumColumns'] = 2; /** * Set to true if you want DB-based query history.If false, this utilizes * JS-routines to display query history (lost by window close) * * This requires configuration storage enabled, see above. * default = false */ //$cfg['QueryHistoryDB'] = true; /** * When using DB-based query history, how many entries should be kept? * default = 25 */ //$cfg['QueryHistoryMax'] = 100; /** * Whether or not to query the user before sending the error report to * the phpMyAdmin team when a JavaScript error occurs * * Available options * ('ask' | 'always' | 'never') * default = 'ask' */ //$cfg['SendErrorReports'] = 'always'; /** * You can find more configuration options in the documentation * in the doc/ folder or at <https://docs.phpmyadmin.net/>. */
menügeführte Konfiguration
Die komfortablere Variante ist sicherlich der Weg über die Webanwendung selbst. Die Konfigurationsseite von phpMyAdmin ist Dank unserer vHOST-Konfiguration an unserem Apache-Webserver,unter folgender URL erreichbar: http://phpmyadmin.nausch.org/setup/
$ firefox http://phpmyadmin.nausch.org/setup/
Als erstes definieren wir unseren Datenbank-Server. Hierzu klicken wir auf die Schaltfläche [ Neuer Server ].
Haben wir die entsprechenden Daten eingegeben, klicken wir auf die grün markierte Schaltfläche [ Übernehmen ].
Beim Reiter Serverkonfiguration können wir festlegen, wie wir auf den Server zugreifen und welche Datenbank(tabellen) angezeigt werden sollen. Den Haken ✔ beim Punkt Erlaube root login entfernen wir!
Die Einstellungen zum Konfigurationsspeicher PMADB legen wir auf dem Reiter Konfigurationsspeicher fest. Dort tragen wir folgende (entsprechende individuelle) Werte ein.
Datenbankname phpmyadmin
pmadb Host [ ]
Kontroll-Port [ ]
pmadb Benutzer controluser
pmadb Benutzer Passwort controlpassword
Lesezeichen Tabelle pma__bookmark
Relation Tabelle pma__relation
Tabelle für Benutzereinstellungen pma__userconfig
Benutzer-Tabelle pma__users
Benutzergruppen-Tabelle pma__usergroups
Tabelle für ausgeblendete Navigations-Elemente pma__navigationhiding
Tabelle für Anzeigespalten pma__table_info
Spalten Informationen Tabelle pma__column_info
SQL Abfragehistorien Tabelle pma__history
Kürzlich verwendete Tabellen pma__recent
Tabelle für Oberflächeneinstellungen pma__table_uiprefs
Tabelle mit Verfolgung der SQL-Abfragen pma__tracking
Designer- und PDF Schema: Tabellenkoordinaten pma__table_coords
PDF-Schema: Seiten-Tabelle pma__pdf_pages
Beispielabfragentabelle pma__savedsearches
Central columns tabele pma__central_columns
Maximale Anzahl der zu speichernden Tabelleneinstellungen 100
Auf dem Reiter Grundeinstellungen setzen wir den Haken ✔ beim Punkt Benutze SSL.
Wie haben den Konfigurationspunkte Übersicht erfolgreich fertiggestellt. Nun Wählen wir den nächsten Konfigurationskapitel Funktionen am linken Bildschirmrand an. Auf dem Reiter Import/Export legen wir die beiden Verzeichnisse zum Upload Verzeichnis und Speicher Verzeichnis fest.
Upload Verzeichnis /var/lib/phpMyAdmin/upload Speicher Verzeichnis /var/lib/phpMyAdmin/save
Auf den Reiter Sicherheit setzen wir den Haken ✔ beim Punkt SSL-Verbindung erzwingen.
Beim Konfigurationskapitel SQL-Abfragen setzen wir den ✔ beim Punkt Abfragelog speichern.
Auf den Reitern des Konfigurationskapitel Navigationspanel übernehmen wir die Defaultwerte.
Reiter Navigationspanel:
Reiter Server:
Reiter Datenbanken:
Reiter Tabellen:
Wie auch schon beim Kapitel Navigationspanel übernehmen wir beim Kapitel Hauptpanel die Defaultwerte.
Zum Speichern der Konfigurationswerte klicken wir im Konfigurationskapitel Übersicht auf die schaltfläche [ Speichern ] am unteren linke ende des Fensters.
Wollen wir die Konfigurationsdatei gesondert sichern, klicken wir auf die Schaltfläche [ Download ]. Bei Bedarf können wir uns die erstellte und gespeicherte Konfigurationsdaten auch anzeigen lassen; hierzu klicken wir auf die Schaltfläche [ Anzeigen ].
Die mit der Web-GUI erstellte Konfigurationsdatei legen wir im Verzeichnis /usr/share/phpMyAdmin/ ab.
# vim /usr/share/phpMyAdmin/config.inc.php
- /usr/share/phpMyAdmin/config.inc.php
<?php <?php /* * Generated configuration file * Generated by: phpMyAdmin 4.7.4 setup script * Date: Fri, 06 Oct 2017 14:02:06 +0000 */ /* Servers configuration */ $i = 0; /* Server: mariadb.dmz.nausch.org [1] */ $i++; $cfg['Servers'][$i]['verbose'] = ''; $cfg['Servers'][$i]['host'] = 'mariadb.dmz.nausch.org'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; $cfg['Servers'][$i]['AllowRoot'] = false; $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['controluser'] = 'controluser'; $cfg['Servers'][$i]['controlpass'] = 'controlpassword'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; $cfg['Servers'][$i]['ssl'] = false; /* End of servers configuration */ $cfg['blowfish_secret'] = 'bXFjY/D4GAfy1RsAfQ4NVGZ9xGNTovM2Zn)OJQfyo'; $cfg['UploadDir'] = '/usr/share/phpMyAdmin/upload/'; $cfg['SaveDir'] = '/usr/share/phpMyAdmin/save/'; $cfg['ProxyUser'] = 'databaseuser'; $cfg['ProxyPass'] = 'databasepassword'; $cfg['QueryHistoryDB'] = true; $cfg['DefaultLang'] = 'de'; $cfg['ServerDefault'] = 1; ?>
abschließende Konfiguration
Für die Import / Export Funktion benötigen wir noch die RPM-Pakete recode und php-recode; diese installieren wir nun unter Zuhilfenahme von yum.
# yum install recode php70u-recode -y
Programmstart/-aufruf
Nun können wir die Applikation phpMyAdmin mit dem Browser unserer Wahl starten.
$ firefox http://phpmyadmin.nausch.org/setup/
Nach erfolgter Anmeldung befinden wir uns im Hauptadministrationsfenster von phpMyAdmin.
Programm-Upgrade
Da wir uns bei der Installation für den direkten Weg über die Quellen gewählt hatten, müssen wir uns natürlich selbst um entsprechende Upgrades bemühen.
Download
Zunächst wechseln wir in unser lokales Programm-Archiv-Verzeichnis.
# cd /usr/local/src/packages/
Anschliessend holen wir uns das aktuelle Paket (ZIP-Archiv und dessen zugehörige sha512 Prüfsumme) von der Projektwebseite auf unseren Server.
# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-4.8.4-all-languages.zip
# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-4.8.4-all-languages.zip.sha256
Vom heruntergeladenen Archiv phpMyAdmin-5.0.4-all-languages.zip generieren wir einen eigenen Hash-Wert und legen diesen in einer lokalen Datei ab.
# sha256sum phpMyAdmin-5.0.4-all-languages.zip > phpMyAdmin-5.0.4-all-languages.zip.sha256.local
Nun können wir die beiden Hash-Werte vergleichen und somit prüfen, ob dem Archiv soweit vertraut werden kann.
# diff phpMyAdmin-5.0.4-all-languages.zip.sha256.local phpMyAdmin-5.0.4-all-languages.zip.sha256
Sind beide Werte identisch, erfolgt keine Ausgabe - wir können also mit der Installation und Konfiguration fortschreiten.
Entpacken
Nun entpacken wir das heruntergeladene ZIP-Archiv an Ort und Stelle, in unserem Konfigurationsbeispiel also in das Verzeichnis /usr/share/.
# unzip /usr/local/src/packages/phpMyAdmin-5.0.4-all-languages.zip -d /usr/share/
Zielverzeichnis (umbenennen)
In der offiziellen Dokumentation finden wir einen wichtigen Hinweis zur Upgradeprozedur:
Warnung
Never extract the new version over an existing installation of phpMyAdmin, always first remove the old files keeping just the configuration.
Auf diese Art bleibt kein alter, nicht länger funktionierender Code im Verzeichnis, der zu schweren Sicherheitslücken oder Fehlern führen kann.
Wir werden also demnach erst einmal eine Sicherung unserer bestehenden Installation vornehmen, bevor wir uns eingehender mit der zuvor entpackten aktuellste Version beschäftigen.
# mv /usr/share/phpMyAdmin /usr/share/phpMyAdmin.backup
Anschließend benennen wir das aktuellste Programverzeichnis um.
# mv /usr/share/phpMyAdmin-5.0.4-all-languages/ /usr/share/phpMyAdmin/
Da wir den Alternativer FastCGI Process Manager einsetzen passen wir noch die Verzeichnis und Dateirechte entsprechend an.
# chown -R php-fpm: /usr/share/phpMyAdmin/
Konfiguration zurücksichern
Wie in der originalen Upgradedokumentation vermerkt, sichern wir nun die Konfiguration unserer bestehenden Installation zurück. Hierzu kopieren wir die Konfigurationsdatei config.inc.php Aus dem Backup-Verzeichnis zurück in das aktuellste Verzeichnis.
# cp -a /usr/share/phpMyAdmin.backup/config.inc.php /usr/share/phpMyAdmin/