Uninteressantes von einem Anwendungsentwickler aus Linse
 

Beiträge mit dem Tag "MySQL"

 

Die neusten Blog Einträge

 
Seite 1 von 2

phpMyAdmin, HTTP Authentifizierung und FastCGI

Kategorie "Linux" Linux  Verfasst am 24.02.2012 22:43 24.02.2012 22:43  0 Kommentare 0 Kommentare  

Wenn man phpMyAdmins HTTP Authentifizierung auf einem Apache Webserver mit FastCGI nutzen möchte, muss man ein paar Dinge beachten. Tut man dies nicht, schlägt jeglicher Loginversuch fehl.

Es wird mod_rewrite benötigt. Falls also nicht schon aktiv, muss das Apache Modul aktiviert werden. Danach im vHost für phpMyAdmin die AllowOverride Optionen AuthInfo, FileInfo und Limit freischalten. Nicht vergessen die Konfiguration vom Apache neu zu laden. ;)

Nun im Hauptverzeichnis von phpMyAdmin eine .htaccess Datei mit folgendem Inhalt anlegen:

RewriteEngine On
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

Thats it. :)

via phpMyAdmin Wiki

 

MySQL Berechtigungen und Hostnames

Kategorie "Linux" Linux  Verfasst am 24.02.2012 22:25 24.02.2012 22:25  0 Kommentare 0 Kommentare  

Auf einem Server mit VMWare ESXi habe ich intern ein privates Netz zwischen den virtuellen Maschinen aufgebaut. Das Netz besitzt einen eigenen DNS Server, sodass alle Maschinen auch mit dem Namen angesprochen werden können.

Nun wollte ich diese DNS Namen auch im MySQL Server als Host für die Benutzerkonten verwenden. Der MySQL Client versuchte allerdings immer die Anmeldung via IP Adresse Adresse auszuführen.

mysql -u blog -h mysql.esxvm.local -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'blog'@'192.168.101.105' (using password: YES)

Hier hatte sich ein kleiner Denkfehler eingeschlichen. Der MySQL Server nutzt nicht den DNS Namen zur Anmeldung, sondern den Reverse DNS Namen! Wenn man darüber Nachdenkt ist das sogar logisch. Denn den Namen kann man "von außen" ja nicht ohne weiteres fälschen.

Reverse DNS im bind9 gesetzt und schon funktionierte es:

mysql -u blog -h mysql.esxvm.local -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11856

So einfach... :)

 

In einem MySQL Query select und update/insert

Kategorie "Programmieren" Programmieren  Verfasst am 03.04.2011 17:04 03.04.2011 17:04  2 Kommentare 2 Kommentare  

In einem Projekt stand ich vor dem Problem, dass über eine API verschiedene Clients auf die gleichen Tabellen zugreifen. Damit die Tabellen sauber bleiben, darf allerdings immer nur ein Client gleichzeitig schreibende Operationen ausführen. 

Auch muss es weiterhin möglich sein, dass interne Scripte die Tabellen lesen und schreiben dürfen. LOCK TABLES kommt dadurch also nicht in Frage.

Die einfachste Lösung war eine Tabelle mit zwei Spalten. Einem Identifier und dem Status. Der Identifier muss dabei natürlich einzigartig (UNIQUE) sein. Außerdem darf in der Tabelle nur ein Datensatz gleichzeitig den Status 1 (gesperrt) haben.

Folgendes Query führt dann alle nötigen Prüfungen und Aktionen aus:

INSERT INTO LockTable
   (name, status, createdBy, creationTime) 
SELECT 
   '$name', '$lock_status', '11', NOW() 
FROM 
   LockTable 
WHERE '1' NOT IN ( SELECT status
FROM LockTable
WHERE status = '1'
) OR '$lock_status'='0'
ON DUPLICATE KEY UPDATE status = '$lock_status',
lastModifiedBy='1', lastModifiedTime=NOW()

Das Query führt drei Aktionen auf einen Rutsch aus:

  • Ist für $name kein Datensatz vorhanden, wird dieser erstellt.
  • Ein Datensatz wird nur gesperrt, wenn es keinen anderen gibt, der gesperrt (auf 1 gesetzt) ist.
  • Existiert bereit ein Datensatz für $name, wird dieser aktualisiert.

Würde man diese Aktionen nun in einzelne Querys aufteilen, bestünde die Gefahr, dass sich zwischen SELECT und INSERT/UPDATE eine weitere Verbindung zwischen schaltet und sich dort als gesperrt markiert. Im schlimmsten Fall wären dann zwei Verbindungen gleichzeitig gesperrt.

In der Anwendung kann man dann über den Affected Rows Zähler (der muss >0 sein) sehen, ob die sperre erfolgreich gesetzt wurde.

Wichtig: In der Tabelle muss sich IMMER mindestens ein Datensatz befinden. Ansonsten funktioniert das erste Select, welches die Daten für den Insert zusammenbaut nicht!

 

mysql_real_escape_string() in Java JDBC

Kategorie "Programmieren" Programmieren  Verfasst am 24.10.2010 15:24 24.10.2010 15:24  0 Kommentare 0 Kommentare  

Die JDBC Lib von MySQL bietet auch eine Klasse um Strings für die Nutzung in Statements escapen kann.

Die Klasse funktioniert ähnlich wie Zend_Db, allerdings wird hier zusätzlich noch der Datentyp berücksichtigt. Ein Beispiel wie das ganze funktioniert gibt es in meiner Schnipseldatenbank.

Have fun. ;)

 

MySQL Dumpfiles verketten

Kategorie "Programmieren" Programmieren  Verfasst am 23.07.2010 23:21 23.07.2010 23:21  0 Kommentare 0 Kommentare  

Ein Datenbank Layout welches mit DBDesigner4 entwickelt wird, soll mit einigen Optionen importiert werden.

Da DBDesigner allerdings bei jedem Export die komplette SQL File überschreibt, müsste man bei jedem Export die Befehle erneut in das SQL File tippen. Hierfür stellt MySQL den Befehl source zur Verfügung.

Es lassen sich also über die MySQL Kommandozeile SQL Files importieren. So kann man auch mehrere Dumps miteinander verketten.

mydb_import.sql

drop database if exists mydb;
create database mydb;
use mydb;
SET foreign_key_checks = 0;

source mydbscheme.sql;

SET foreign_key_checks = 1;

mydbscheme.sql

CREATE TABLE groups (
  group_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  group_name INTEGER UNSIGNED NULL,
  group_description TEXT NULL,
  group_active ENUM('Y', 'N') NULL DEFAULT 'N',
  PRIMARY KEY(group_id)
)
TYPE=InnoDB;

Erspart eine Menge Zeit während der Entwicklung des Datenbank Layouts. ;)

 

MySQL Groß- und Kleinschreibung

Kategorie "Programmieren" Programmieren  Verfasst am 05.06.2010 19:11 05.06.2010 19:11  0 Kommentare 0 Kommentare  

 Bei einem Projekt habe ich festgestellt das bei einem varchar gar nicht auf Groß- und Kleinschreibung geachtet wird. Definiert man Beispielsweise einen natürlichen Primärschlüssel und verwendet dabei MySQL und mysql jeweils als einen Schlüssel, wird es beim Anlegen von mysql Fehler hageln.

Wie man dies ändern kann, ist in der Dokumentation von MySQL beschrieben. Man muss nur eine spezielle Collation verwenden. Nutzt man normal latin1_general_ci, nutzt man in dem Fall einfach latin1_bin.

⇒ http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

Und schon sollte es Funktionieren. ;)

 

MySQL und Referenzierung

Kategorie "Programmieren" Programmieren  Verfasst am 19.05.2010 13:51 19.05.2010 13:51  0 Kommentare 0 Kommentare  

 Bei einem größeren MySQL Projekt mit InnoDB und Referenzierung gab es einige Probleme, die ich hier einmal klären möchte. Vielleicht hilft es dem einen oder anderen ja weiter.

Zirkuläre Referenz

Diese Fehlermeldung warf mir DBDesigner4 an den Kopf, als ich versuchte den SQL Code zu exportieren. Dieser Fehler tritt auf wenn man den Haken Order Tables by Foreign Key drin lässt, und gleichzeitig zwei Tabellen hat die gegenseitig auf einander verweisen.

Circular Reference

Beim Export kann man dieses Problem durch das Entfernen des Hakens umgehen. Allerdings nicht beim Import in den MySQL Server. Dort würde immer die Meldung erscheinen, dass die Referenzierte Tabelle vermisst wird. Das kann man mit einem SQL Befehl aber auch umgehen.

SET foreign_key_checks = 0;

Dadurch wird die Überprüfung der Referenzen temporär deaktiviert und alle Tabellen können angelegt werden. Ist das Anlegen abgeschlossen, sollte dies unbedingt wieder aktiviert werden. Ansonsten können Inkonsistenzen in der Datenbank die Folge sein.

MySQL Error Number 1005 Can’t create table

Hier gibt es viele Ursachen. Eine Liste von Ursachen gibt es im Blog VerySimple (thx!). Die Fehlermeldung enthält immer eine errno. Diese Error-Nummer kann man mit folgendem Befehl "lesbar" machen:

perror 150

Unter Linux befindet sich das Programm in $PATH und kann direkt im Terminal ausgeführt werden. Unter Windows müsste man evtl erst in das bin/ - Verzeichnis von MySQL wechseln.

Der Fehlercode 150 erzeugt die Fehlermeldung Foreign key constraint is incorrectly formed. Diese wurde durch einen FK ausgelöst, der kein NULL zuließ. Kurz das NOT NULL aus dem SQL Code entfernt und schon ging es. :)

 

SSH Tunnel aufbauen

Kategorie "Linux" Linux  Verfasst am 27.04.2010 12:35 27.04.2010 12:35  0 Kommentare 0 Kommentare  

Hatten wir glaube ich schon einmal hier in einem User Kommentar, aber ich poste das noch mal als kleines Memo für mich und vielleicht für den einen oder anderen Besucher.

Einfacher Verbindungsaufbau:

ssh sim4000@example.com -L 55555:192.168.1.1:3306 -N

Verbindungsaufbau mit Key und anderem SSH Port:

ssh sim4000@example.com -p 1234 -i .ssh/key -L 55555:192.168.1.1:3306 -N

Das Beispiel zeigt, wie man via SSH einen Tunnel zu einem anderen Server aufbaut. Über diesen Tunnel kann man eine Verbindung zu einem Dienst aufbauen, der sonst nur in einem anderen Netz erreichbar ist.

In dem Beispiel oben würde ein Verbindungsaufbau mit einem MySQL Client zu localhost:55555 im Netz von example.com auf dem Rechner 192.168.1.1 rauskommen. Man hat also Verbindung zu einem Serverdienst, der sonst nur im lokalen Netz von example.com erreichbar wäre.

Nebeneffekt dabei ist, dass die Verbindung vom eigenen Rechner bis ins fremde Netzwerk komplett verschlüsselt ist. Hat zum Beispiel in öffentlichen WLAN Netzen enorme Vorteile.

Was die einzelnen Parameter bedeuten, kann man in »man ssh« nachlesen.

 

SQL Query mit zwei Limits

Kategorie "Programmieren" Programmieren  Verfasst am 18.04.2010 08:11 18.04.2010 08:11  0 Kommentare 0 Kommentare  

Wer schon mal versucht hat mit SQL eine Blätterfunktion zu basteln kennt das Problem: Man hat ein Query wo bereits ein LIMIT drin ist, und will nun wegen dem Blättern ein weiteres einfügen und evtl noch anders sortieren. Hier kann man sich eines Subquerys bedienen.

SELECT
   *
FROM (
   SELECT * FROM real_table WHERE field='xyz' ORDER BY field2 DESC LIMIT 0 , 150
) AS vtable
ORDER BY field ASC
LIMIT 0 , 10

http://snippets.sim4000.de/show/15/

 

Navicat - MySQL GUI mit SSH Tunnel Feature

Kategorie "Linux" Linux  Verfasst am 12.01.2010 22:06 12.01.2010 22:06  3 Galeriebilder 3 Galeriebilder  2 Kommentare 2 Kommentare  

Navicat kann auch Verbindungen zu MySQL Servern über einen SSH Tunnel aufbauen. In den Einstellungen kann man sogar einen Public Key mit Passwort verwenden.

Allgemeine EinstellungenSSH EinstellungenAbfrage des Passworts für den Public Key

Echt super Klasse. So kann man auch Live auf einem entfernten Server arbeiten ohne den SQL Server nach außen hin zu öffnen.

Ich habe zwar nur die Lite Version von Navicat, ist aber trotzdem ein tolles Tool. Diagramme und weiterer Luxus gibt es nur in der Pro Version. Zur Administration reicht das Tool aber allemal. Benutzer Verwalten, Tabellen anlegen und bearbeiten, ...

Funktioniert alles. Und das über SSH. ;)

Seite 1 von 2

Tag Cloud

28c3   3D   ASCII   Akismet   Allgemein   Animation   Apache   Arbeit   Arch Linux   Archos 5   Asterix & Obelix   Audio   Auto   BOINC   Bash   Bitlbee   Blog v2.0   Bluetooth   Bodenwerder   Bouncer (BNC)   Bundestagswahl 09   Bücher   CCC   Chromium   Comics   Computerspiele   Content Managment System   Creative Commons   CyanogenMod   Cybton   DAU Alarm   DLRG   Datenbanken   Datenschutz   Debian   Deutsches Rotes Kreuz   Domains   Drucken   EZFlash Vi   Eclipse   Eingabegeräte   Ekelhaft   Email   Essen   Ethernet   Evernote   ExtJS   Facebook   Fail2Ban   Fanartikel   Feiertage   Fernsehn   Firefox   Flash   Flattr   Fotografie   Fritz!Box   Fun   Fußball   GEZ   GPS   Gameboy Advance   Games   Git   Gnome   Google   Google Android   Google Android Hacking   Google+   Grafiken   Grand Theft Auto IV   HTC   HTC Desire Z   HTML   Handhelds   Handy   Handy Apps   Hardware   Hardware Hacking   Homebrew   ICQ   IRC   ImapFilter   Internet   Internet Explorer   Internet Relay Chat (IRC)   Internetzensur   Java   JavaScript   JeeGeek   Justiz   Kino   Konzert   Kultur   Kumpels   Legend of Zelda   Linux   Linux Mint   MS SQL Server   Marilyn Manson   Microsoft .NET   Minecraft   Mobile   Mozilla   Music Player Daemon (MPD)   Musik   MySQL   NPD   Natur   Netbeans   Netbooks   Netzwerk   Nintendo   Nintendo DS   Nintendo DSi   Nintendo Wii   Notebook   OpenOffice   OpenOffice Impress   OpenWRT   PC Hardware   PHP   Pandora   Papierkorb   Patentrecht   Pidgin   Piratenpartei   Piwik   Politik   Privat   Programmieren   Projekte   PulseAudio   QR-Code   RSS   Rammstein   Root   SD-Karte   SOGo Scalable OpenGroupware   SSH   SVN   Schlüsselband   Schule   Seagate Freeagent Dockstar   Server   Serversicherheit   Sesamstraße   Shellscripting   Shopping   Shortlinker   Skype   Social Networks   Software   Spam   Spenden   Spongebob   Straßenverkehr   Support   TV   Tablets   Technik   Textverarbeitung   Thunderbird   Truecrypt   Twitter   Typo3   UMTS   USA   USB   Ubuntu   Underground Shopping   Urheberrecht   Urlaub   VMWare   VNC   Vereine   Verkaufen   Verstärker   Videorecorder   Viren und andere Schädlinge   Virtual Box   Vorratsdatenspeicherung   WLAN   Wahlen   Webspace   Wehrdienst   Weserbergland   Willkommen   Windows   Windows 7   X11   XFCE   XML   XStylus   Zeitschriften   Zensur   bind9   ffmpeg   netcup   openSSL   r0ket   sim4000.de   vim   Überwachung   Überwachungsstaat   üäx.de   1337