Tag-arkiv: Database

MySQL – Eksport og import via kommandopromt

phpMyAdmin hjælper med administration af mysqldatabaser. Det kan også importere og eksportere databaserne, men begynder de at blive for store, kan phpMyAdmin ikke håndtere det mere. Det kan man så bruge eksempelvis Windows’ kommandopromt til. Følgende er en guide til hvordan.

For at følgende kan fungere, skal man finde sin mysql fil, som hvis man bruger XAMPP ligger i (alt efter hvor xampp er installeret, men fx direkte på c drevet) c:/xampp/mysql/bin

For at havne i denne mappe skrives i kommandopromt (som åbnes ved at trykke window + r og skrive ”cmd” eller ved at finde den i startmenuen)

cd c:/xampp/mysql/bin

Herefter er man klar til nedenstående kommandoer.

I det følgende anvendessom noget der skal skiftes ud med relevant værdi, mens [tekst] er noget der kan udelades.

Eksport af eksisterende tabel/database/databaser

Kommandoen til eksport af mysql i komandopromt hedder mysqldump. Til den følger en masse mulige parametre. Indledningsvis drejer det sig om at oprette forbindelse til serveren.
Der skal angives et brugernavn, et password, og i nogle tilfælde også et servernavn. De angives på følgende vis:

  • Brugernavnet:
     –u
  • Password:
     -p

    (bemærk det manglende mellemrum mellem –p og  Det skal være der!) eller blot –p for at blive promtet.

  • Hvis man ønsker at ramme en anden server end den lokale, kan man (såfremt den tillader ekstern tilgang) skrive
     –h

Derefter skal man angive hvad man ønsker at eksportere. Man kan vælge mellem hele samlingen, en enkelt database, eller blot en enkelt tabel:

  • For at eksportere alle databaser i samlingen,  skrives
    –-all-databases
  • For at vælge flere databaser skrives
    ––databases   ...
  • For at vælge en database skrives blot
    
    
  • For at vælge en eller flere tabeller i en database skrives
      [ ..]

Til sidste skal man angive, hvor man ønsker at gemme det henne. Det gøres ved at tilføje:

> .sql

For at eksportere en enkelt database fra en ekstern server til en fil skal man altså skrive:

Mysqldump –u  [-p[]] [–h ]  > <sti/til/fil/filnavn>.sql

Se flere parametre på: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

Import af eksporterede sqlfil

For at importere den dannede sql fil, bruges komandoen mysql.

For at bruge den, skal der også angives brugernavn, password og evt servernavn. Det gøres på samme måde, som ved eksport (se ovenfor).

Så for at få adgang til mysql panelet (MySQL monitor) skrives:

Mysql –u  [-p[]] [–h ]

Herefter kan standard mysql komandoer bruges (Alle komandoer bør afsluttes med ”;” ) Den vigtigeste i denne sammenhæng er kommandoen

source [<fil/sti/>].sql

Den bruges til at udføre koden fra en sql-fil. Alt efter indholdet af den udvalgte sql-fil, skal forskellige ting defineres inden brug. Hvis sql-filen indholder en eksport af alle/flere databaser, kan source blot udføres  lige efter man har fået adgang til mysql. Det kræver selvfølgeligt at man benytter en bruger med de nødvendige privillegier. Man skal samtidig passe på ved import af en hel samling databaser, da den vil overskrive eksisterende tabeller i databaser, hvis der er navnesammenfald.

Har man kun eksporteret fra en database, skal man selv oprette/vælge den database man ønsker at importere til. Inden man gør det kan komandoen

show databases;

være praktisk. Den viser de allerede eksisterende databaser (som man har adgang til).

Hvis den ønskede database ikke eksisterer, kan den oprettes ved at skrive:

create database ;

Hvis man vil være sikker på at man får en “ren” database, kan man slette den først, for derefter at oprette den igen, vha tidligere komando. Man sletter en database ved at skrive

drop database ;

Når man har fundet/oprettet den database man ønsker at bruge vælges den ved at skrive

use ;

Derefter kan source komandoen bruges, og tabellerne importeres ind i den valgte database.
Processen for en import af en database kunne se sådan ud:

shell>mysql -u  -p
show databases;
drop database ;
create database ;
use ;
source [path/to/sqlfile/].sql;

Multiple redigerbare overlays til Google Maps API

Jeg har dags dato lagt sidste hånd på et lidt spændende proof-of-concept eksperiment. Vi skal til en opgave kunne vise valgfrie polygoner over et zoombart verdenskort. Disse opsatte og redigerbare kort-koordinat polygoner (længde og breddegrader) skal derefter nemt kunne anvendes som søgekriterier i en MS SQL database indeholdende en datatabel med blandt andet en GPS koordinat kolonne.

Google Maps virkede som et fornuftigt udgangspunkt hertil, så der gik jeg igang.

Den indledende øvelse, du kan se resultatet af herunder, gik på at lave en minimalistisk webside hvor en bruger nemt kan opsætte en eller flere regioner og her skal være istand til at redigere og slette disse. Polygonerne skal slutteligt kunne “oversættes” til en række kort-koordinater til den videre database behandling (der ligger udenfor proof-of-concept eksemplets omfang).

Multiple redigerbare overlays til Google Maps...

Prøv selv dette eksempel med multiple editerbare overlays.

Hvert polygon brugeren definerer i ovenstående eksempel kan udtrækkes på JSON form, indeholdende alle koordinater som længde- og breddegrader, som for eksempel:

{
  'points': [
    { 'lat': 55.70685277146149, 'lng': 12.535314559936523 },
    { 'lat': 55.70685277146149, 'lng': 12.538447380065918 },
    { 'lat': 55.70571631025774, 'lng': 12.540678977966308 },
    { 'lat': 55.705184338337496, 'lng': 12.538447380065918 },
    { 'lat': 55.70426546069018, 'lng': 12.53763198852539 },
    { 'lat': 55.705184338337496, 'lng': 12.535314559936523 },
    { 'lat': 55.70685277146149, 'lng': 12.535314559936523 }
]};

Disse koordinat data kan nu anvendes server-side som søgekriterier i MS SQL 2005, for eksempel ved brug af MsSqlSpatial udvidelsen. Eksempler på MS SQL GIS data indsættelse og forespørgsler findes på MsSqlSpatial siden. MS SQL 2008 har indbygget understøttelse af GIS datatyper og søgning heri – Geometry (planar) og Geography (geodetic).

MS SQL tilgang fra Ruby og Watir

Watir er et framework til automatiserede unit tests af webapplikationer ved brug af et automatiseringslag rettet imod Internet Explorer. Der er tiltag igang for at kunne benytte Watir i Firefox og Safari browserne.

I forbindelse med implementering af adskillige unit tests for en kunde opstod behovet for at kunne checke både datamodel og web-snitfalde imod hinanden. Dataene for de web applikationer der løbende skal kunne testes er placeret i en større SAN baseret MS SQL database.

Ruby har et helt fortrinligt database API, kaldet dbi, som kan anvendes til formålet. Man skal blot installere en ADO wrapper først, da denne ikke som standard medfølger seneste Ruby installationspakke (v186-26). Dette gøres ved først at hente denne dbi pakke indeholdende alle wrappere:
http://rubyforge.org/frs/download.php/655/ruby-dbi-all-0.0.23.tar.gz.

Udpak herfra filen “ruby-dpi-all/lib/dbd_ado/ADO.rb” og kopier denne fil til en nyoprettet “ADO” mappe i din Ruby installationssti, således den endelige placering for wrapper filen bliver “/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb”.

Det er sådanset alt der skal til. Du er nu istand til at tilgå MS SQL databaser fra Ruby, og dermed også fra Watir.

Eksempel:

require 'test/unit'
require 'watir'
require "dbi"

ConnectionString =
  "Provider=SQLOLEDB;" +
  "Data Source=DBSOURCE;" +
  "Initial Catalog=CATALOG;" +
  "User ID=USERNAME;" +
  "Password=PASSWORD;" +
  "Application name=RubyWatir;" +
  "Connection Timeout=0"

class MyTestClass < Test::Unit::TestCase
  ...
  def test_database
    ...
    db = DBI.connect("DBI:ADO:" + ConnectionString)
    sql = "select product, price, description from t_products"
    sth = db.prepare(sql)
    sth.execute
    row = sth.fetch
    puts row
    product = row[0]
    price = row[1]
    description = row[2]
    sth.finish
    db.disconnect
    ...
   end
   ...
end