Posts tagged ‘MySQL’

Zugriff aus dem lokalen Netz auf die Nordwind-DB

Um aus dem lokalen Netz Zugriff auf die Nordwind-DB zu erhalten, muss man folgendes tun:

  • die Datei 50-server.cnf in /etc/mysql/mariadb.conf.d bearbeiten. Hier statt 127.0.0.1 die IP-Adresse des Servers eingeben. An dieses Interface wird MariaDB gebunden.
  • einen neuen Nutzer anlegen:

    CREATE USER 'nwread' IDENTIFIED BY 'northwind';

  • Zugriff aus dem Netz für diesen User erteilen:

    GRANT USAGE ON *.* TO 'nwread'@'%' IDENTIFIED BY 'northwind';

    Kann sein, dass dieses Statement schon ausreichend ist, das werde ich noch überprüfen. Ich habe aber zusätzlich noch ausgeführt:

  • Zugriff auf die Datenbank geben:

    GRANT ALL privileges ON `northwind`.* TO 'nwread'@'%';

Nach dem Neustarts des MariaDB-Servers klappt der Zugriff, beispielsweise über HeidiSQL, das ich sehr empfehlen kann.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Die Nordwind-Datenbank für MySQL nutzen

Mit der Nordwind (Northwind) Datenbank gibt es eine ursprünglich für MS Access entwickelte Datenbank, an der sich viele SQL-Konstrukte üben lassen. Die Datenbank gibt es auch für MySQL, unter anderem unter https://github.com/dalers/mywind.

Hier nun die notwendigen Schritte für das Einspielen in eine MySQL/MariaDB-Datenbank:

  • git clone https://github.com/dalers/mywind.git
  • cd mywind
  • sudo mariadb < northwind.sql
  • sudo mariadb < northwind-data.sql

Mittels SQL kann man jetzt prüfen, ob die Daten vollständig geladen wurden:

  • sudo mariadb
  • use northwind
  • select count(*) from products;

bringt eine Zeilenzahl von 45 Zeilen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Beispiel für eine MySQL Funktion

Ich bereite momentan die Spendenquittungen der Dingfabrik mit Python, Jinja2, MySQL und LaTeX auf. Um den SQL Code sauber zu halten, lagere ich einiges aus dem Python-Code in MySQL Funktionen aus.

Hier ein einfaches Beispiel, das basierend auf Parametern für Mitglieds-ID und Namenstyp entweder der Vornamen, Nachnamen oder kompletten Namen eines Mitglieds zurückgibt.

DROP FUNCTION IF EXISTS fs_getname;
DELIMITER $$
CREATE FUNCTION fs_getname(nummer INT, typ CHAR)
 RETURNS VARCHAR(100)
 NOT DETERMINISTIC
 BEGIN
	IF typ = 'c' THEN
		RETURN (SELECT TRIM(CONCAT(COALESCE(Vorname,"")," ",COALESCE(Name," "))) FROM Stammdaten WHERE  ID = nummer);
	ELSEIF typ = 'f' THEN
		RETURN (SELECT COALESCE(Vorname,"") FROM Stammdaten WHERE  ID = nummer);
	ELSEIF typ = 'l' THEN
		RETURN (SELECT COALESCE(Name,"") FROM Stammdaten WHERE  ID = nummer);		
	END IF;
END$$
DELIMITER ;

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Temperatur und Luftfeuchtigkeit messen mit dem Arduino Teil II – Speicherung der Messdaten

Nachdem das Messen und Anzeigen der DHT22 Daten recht einfach war, geht es in diesem Posting um die Speicherung der Daten. Ich habe es technisch so gelöst, dass der Arduino über das Ethernet-Shield eine URL aufruft und per Parameter die entsprechenden Variablen übergibt.

Hier der passende Arduino-Code. Der Ethernet Shield holt sich per DHCP eine IP-Adresse vom Server und ruft eine URL auf. Hinter der URL liegt ein PHP Skript, das die Daten mit SensorID und Zeitstempel in eine MySQL Datenbank schreibt. Ich nutze den Zeitstempel des Servers, dadurch spare ich es mir, eine RTC in die Schaltung einzubauen.

#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"
 
bool connected = false;
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x22, 0x81};
byte serverIP[] = {123,123,123,123}; // Server IP address
 
EthernetClient client;
 
#define SENSORID 1
#define DHTPIN  5     // input pin 5
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);
 
 
void setup()
{
  Ethernet.begin(mac); // no IP => DHCP
  Serial.begin(9600);
  Serial.println("setup done");
  dht.begin();
}
 
void loop()
{
  Serial.println("Entered loop");
if (!connected){ 
   Serial.println("Not connected");
  if (client.connect(serverIP,80)){
      connected = true;
      Serial.println("Connected to Server");
      Serial.println("Sending request to server");
      client.print("GET /somedir/someurl.php?s=");
      client.print(SENSORID);      
      client.print("&t=");
      client.print(dht.readTemperature());
      client.print("&h=");
      client.print(dht.readHumidity());
      client.println("HTTP/1.1");
      client.println("Host: www.uweziegenhagen.de");
      client.println("User-Agent: Arduino");
      client.println("Accept: text/html");
      client.println();
     } else {
        Serial.println("Cannot connect to server");
      }
    }   
  else {
    delay(500);
    while (client.connected() && client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      Serial.println();
       client.stop(); 
       connected=false;
}
 
  Serial.println("Done now");
  delay(60000);
}

Hier noch das entsprechende PHP-Skript:

<?php
header('Content-type: text/plain');
echo "Sensor:" . $_GET['s'] . "Temperature= " . $_GET['t'] . " Humidity= " . $_GET['h'];
 
$link = mysql_connect("<server>", "<user>", "password") or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("<database>") or die("Auswahl der Datenbank fehlgeschlagen");
$query = "INSERT INTO data values(" $_GET['s'] . "," . $_GET['t'] . "," . $_GET['h'] . ",NOW())";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
 
mysql_close($link);
?>

Datenbank-Setup:

CREATE TABLE IF NOT EXISTS `data` (
  `sensor` tinyint(1) NOT NULL,
  `temperature` float NOT NULL,
  `humidity` float NOT NULL,
  `timestamp` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

IMG_8334

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website