Forbered MySQL- eller MariaDB-databasen

Forbered MySQL- eller MariaDB-databasen

Forbered MySQL- eller MariaDB-databasen

IoT webserverHTTP POST IoT Web ServerMySQL-database. IoT webserverPHP Language IoT Web Server

Konfigurer databaseserveren

Når settet med tjenester er installert LAMP, WAMP, MAMP o XAMPP Som forklart i den første artikkelen i serien eller ganske enkelt etter installasjon på maskinen som vil fungere som en server summen av applikasjoner som implementerer de tilsvarende tjenestene, er det nødvendig å justere noen aspekter av databaseserverkonfigurasjonen MySQL samt å lage databasene og tabellene som skal brukes på webserveren for å lagre data fra tingenes Internett-enheter.

Hvis en offentlig server brukes, vil leverandøren helt sikkert ha levert en type panel for å formidle mellom brukeren og den "virkelige" konfigurasjonen av databasen for å forsterke sikkerheten i operasjonen. I så fall må du se instruksjonene som denne leverandøren tilbyr. Når det gjelder en ekte eller virtuell server som er vert i fasilitetene til en tredjepart, kan en tilsvarende omstendighet oppstå når leverandøren administrerer den; Hvis en ikke-administrert server er inngått kontrakt (av leverandøren, administrert av brukeren), vil følgende informasjon gjelde.

Siden det viktige er å kjenne til instruksjonene som må gis til databasebehandleren, og det er forstått at det brukes som et middel til å støtte enheter for tingenes internett, som vil være objektet for prosjektet, kan det være nok til å bruke konsollen siden arbeidet på selve databaseserveren vil være sporadisk. Hvis ledelsesarbeidsmengden begynner å øke, kan det være verdt det, fordi det er mer praktisk, å bruke en leder på selve serveren, for eksempel den populære phpMyAdmin (fra en nettleser) eller lokalt, men selvfølgelig tilgang til databaseserveren, med en administrator som f.eks MySQL arbeidsbenk hvorfra å utføre i en avansert GUI operasjonene som skal forklares og mange andre som er utenfor denne artikkelen og som fortjener en hel serie.

MySQL Workbench Admin Panel

I tillegg til de mer eller mindre automatiske operasjonene som kan gjøres med MySQL arbeidsbenk på serveren, databaser eller tabeller er det også mulig å utføre oppgaver "manuelt" ved å skrive og utføre komplette skript eller uavhengige kommandoer i SQL. Samme som med verktøyet MySQL arbeidsbenk, SQL krever et eget kapittel og som vil være vesentlig å kjenne til i dybden når den delen av IoT-nettarbeidet som utføres innebærer mer seriøs oppmerksomhet til backend enn det som er forklart her.

MySQL Workbench SQL Query Editor

I alle fall, og selvfølgelig for å løse den nødvendige konfigurasjonen av IoT-databasen som behandles, kan konsollen brukes.

Konfigurer root, den viktigste MySQL-administratoren

Hvis databaseserveren er på sin egen maskin, er den første tingen å gjøre å konfigurere tjenesteadministratortillatelsene til å kunne opprette, ved å bruke disse privilegiene, andre brukere (som igjen kan ha dem) og, hvis aktuelt, databasene og tabellene for å lagre informasjonen som Internet of Things-systemet trenger.

Det er viktig å ivareta installasjonsprosessen av settet med tjenester eller serveren MySQL, avhengig av prosessen som følges, siden i mange tilfeller vil installatøren selv være ansvarlig for å utføre dette trinnet og andre, og det vil ikke være nødvendig å gjenta dem unntatt når du vil endre konfigurasjonen.

For å utføre disse oppgavene jobber du vanligvis med konsollen. MySQL som administrator. For å få tilgang til denne modusen, bruk kommandoen mysql -u root -p o sudo mysql -u root hvis den brukes for første gang og under installasjonen, er brukeren ikke konfigurert root

Konfigurere MySQL root-bruker fra konsollen

Inn til ordenen mysql -u root -p angitt med alternativet -u brukernavnet (root) og med alternativet -p (passord) at nøkkelen må bes om når du får tilgang til konsollen MySQL. For å gå tilbake til systemkonsollen kan du bruke kommandoen quit å gå ut

Som vist på skjermbildet ovenfor, før du forlater konsollen MySQL, for å angi brukerens rettigheter root kommandoen er brukt:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
der:

  • alle privilegier er gitt GRANT ALL PRIVILEGES
  • i alle tabeller i alle databaser ON *.*
  • til brukeren root tilgang fra maskinen som kjører serveren MySQL TO 'root'@'localhost'
  • bruker 1234 som passord IDENTIFIED BY '1234'
  • med tillatelse til å autorisere andre brukere WITH GRANT OPTION

For å administrere databasen eksternt, må privilegier gis til den tilsvarende brukeren fra andre lokasjoner. I forrige eksempel var det tillatt root tilgang fra maskinen som databaseserveren kjører på (localhost) med 'root'@'localhost', hvis brukt 'root'@'%' Tilgang vil bli tillatt fra hvilken som helst maskin.

Hvis du har administratorrettigheter på systemet, kan du reetablere brukerpassordet root de MySQL. For å gjøre det, er det nødvendig å stoppe tjenesten (mysql o mysqld, avhengig av distribusjonen), start opp uten nøkkel, sett den nye nøkkelen root og start den på nytt. Ved å gå inn uten passord er det også mulig å gi rettighetene beskrevet ovenfor.

  • stoppe tjenesten sudo /etc/init.d/mysql stop
  • lanseringen MySQL uten nøkkel og lås opp konsollen sudo mysqld_safe --skip-grant-tables &
  • tilgang som «root» mysql -u root
  • endre passordet:
    • få tilgang til databasen «mysql' USE mysql;
    • tilordne til «root» nøkkelen «1234»: UPDATE user SET authentication_string=PASSWORD("1234") WHERE user="root";
    • bruk de nye rettighetene: FLUSH PRIVILEGES;
    • gå ut av konsollen mysql og gå tilbake til systemet: quit
  • start tjenesten på nytt sudo /etc/init.d/mysql restart

Konfigurer ekstern databasetilgang

Av sikkerhetsgrunner, den første konfigurasjonen av databasebehandleren MySQL tillater ikke ekstern tilgang, for å endre det er det nødvendig å redigere konfigurasjonsdokumentet, normalt my.cnf, som vanligvis finnes på ruten /etc/mysql.

Hvis brukt mariadb, som nå er den "friere" versjonen av MySQL, sikkert my.cnf vil være en lenke til /etc/alternatives/my.cnf som igjen vil laste inn konfigurasjonen ved å bruke !includedir, fra rutedokumentene /etc/mysql/mariadb.conf.d, sannsynligvis fra dokumentet 50-server.cnf

Ressursen som databaseserveren bruker for å ikke ivareta eksterne forespørsler består av å "lytte" kun til forespørsler fra et bestemt sted. IP adresse som uttrykkes som verdien av parameteren bind-address (som erstatter klassikeren skip-networking) Når adressen er 127.0.0.1 (localhost) bare forespørsler fra den lokale maskinen blir behandlet. Hvis kommentert med # eller om verdien er 0.0.0.0, vi betjener enhver adresse. For å tillate ekstern tilgang, er det sikreste å angi IP adresse (som kan være offentlig eller privat) på datamaskinen den er tilgjengelig fra, vanligvis noe sånt som bind-address = 192.168.1.74. I ditt tilfelle kan dette utstyret fungere som en tunnel (omdirigerer med SSH) eller som en gangvei (med kjerne ip-tabeller) for å unngå å eksponere serveren utenfor et kontrollert område av nettverket.

MySQL-databasekonfigurasjon ved å redigere my.cnf-filen (i etc mysql)

På skjermbildet over kan du se at det er redigert my.cnf med konfigurasjonen MySQL bruke bestillingen sudo nano /etc/mysql/my.cnf. Ved arbeid med mariadb Med den vanlige konfigurasjonen vil rekkefølgen være noe sånt som sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. Som nevnt ovenfor, når det er tilgang med administrative rettigheter, a GUI som MySQL arbeidsbenk for vanlig databasebehandling.

Lag databasene

Når databaseserveren er konfigurert, kan databasene og tabellene der IoT-dataene skal lagres, opprettes. For å gjøre dette kan du bruke kommandoer SQL fra konsollen eller fra GUI av en leder.

Rekkefølgen CREATE DATABASE temperaturas; oppretter "temperaturer"-databasen. For å unngå feil kan skjemaet brukes CREATE DATABASE IF NOT EXISTS base_datos_temperaturas; som ville opprette databasen "temperature_database" bare hvis den ikke eksisterer for øyeblikket.

Lag tabellene

Siden det i forskjellige databaser kan være tabeller med samme navn, kan du referere til en av dem ved å gå foran navnet på databasen og skille begge med et punktum, noe sånt som base_datos.tabla Denne notasjonen kan også utvides til navnene på feltene base.tabla.campo

Hvis databasenavnet utelates når du opererer på en tabell (i dette tilfellet når du oppretter det), anses det som det refereres til den sist valgte. For å uttrykkelig velge en bestemt, kan du bruke kommandoen USE og angi navnet ditt USE base_datos_temperaturas;

Når du oppretter tabeller i databaser, i samme operasjon, legges vanligvis informasjonen til feltene som danner dem til (selv om det også er mulig å endre dem senere) Som det gjøres med databasen, kan tabellen bare opprettes hvis den gjør det. eksisterer ikke ved å legge til klausulen IF NOT EXISTS eller tvert imot, sørg for å slette tabellen før du oppretter den bare hvis den eksisterer med DROP TABLE IF EXISTS valor_temperaturas;

For å tillate navn på tabeller eller databaser som kan komme i konflikt med kommandoer eller prosedyrer, kan det graverende aksentmerket, noen ganger kalt et invertert komma, brukes til å omgi navnet og unngå konflikter eller feil i kommandoene. SQL.

Definer feltene

Feltene som legges til ved opprettelse av tabellen indikeres ved å sette dem i parentes og angi hvilken type data de lagrer. Datatypene som vanligvis brukes i en database for å lagre informasjon fra enheter koblet til tingenes internett er heltall (INT o BIGINT) desimaler (DECIMAL, DOUBLE o FLOAT) av tid (DATE, TIME, DATETIME o TIMESTAMP) og tekst (hovedsakelig VARCHAR selv om det finnes andre som TEXT men de brukes ikke til IoT) Etter datatypen, og i parentes, er lengden på dataene og eventuelt formatet eller presisjonen lagt til.

Ved å legge til AUTO_INCREMENT Definisjonen av et felt indikerer for databasebehandleren at, hvis ikke annet er angitt, når du oppretter en ny post, må verdien av den siste pluss den tilsvarende økningen automatisk lagres (som normalt er 1). Den er vanligvis inkludert i felt som brukes som numeriske indekser for postene.

Koden NOT NULL indikerer at et felt i en post ikke kan være tomt, det må lagre en verdi.

Ved bruk DEFAULT Når du oppretter et felt i en tabell, indikeres det MySQL en standardverdi for feltet forutsatt at når du legger til en ny post eller endrer den, er en annen verdi ikke uttrykkelig angitt. En ofte brukt standardverdi, i dette tilfellet for å overvåke IoT-verdier, er CURRENT_TIMESTAMP som lar deg automatisk registrere gjeldende tid i et felt når du oppretter en ny post, slik at data automatisk identifiseres i tid.

For å optimere ytelsen til databasen, er det praktisk å inkludere på slutten av definisjonen av tabellfeltene et som brukes som en indeks med klausulen PRIMARY KEY (ID) ID er feltet som er valgt som indeks.

På slutten av definisjonen av en tabell kan du angi databasemotoren som den administreres med som parameterverdi ENGINE med formatet ENGINE=InnoDB; være InnoDB motoren som er valgt i dette tilfellet.

Lag databaser, tabeller og konfigurer felt i en SQL-økt

Koden i følgende eksempel samler ordrene, trinnene som må tas, for å lage en database med en minimumstabell.

Lag sikkerhetskopier av databaser

Når serveren er konfigurert og databasen og dens tabeller er opprettet, vil alt være klart til å lagre informasjonen hentet av IoT-nodene. Selv om fokuset i denne artikkelserien ikke inkluderer vedlikehold, er det ett kritisk administrativt problem som er viktig å ta tak i: sikkerhetskopiering. Fra de fleste ledere, inkludert phpMyAdmin y MySQL arbeidsbenk, sikkerhetskopier kan lages og gjenopprettes, men det er vanlig å inkludere dem i et skript som automatiserer dem (sannsynligvis sammen med konfigurasjonen og mange andre dokumenter), så det er mer praktisk å bruke verktøyet MySQLDump, en klient som vanligvis er en del av en konvensjonell installasjon av MySQL, eller et alternativ som MySQL Data Dumper Hva inkluderer bestillingen? mydumper å lage kopien og myloader for å gjenopprette den

MySQLDump

Ordreformatet mysqldump Det er veldig enkelt, du må bare angi brukernavnet user, Passord password og databasen du vil kopiere eller --all-databases for å sikkerhetskopiere alle databaser som i følgende eksempel:

mysqldump --opt --user=pelaez --password=1234 --all-databases > copia.sql

Det forrige eksemplet genererer dokumentet copia.sql som inneholder ordrene SQL (dvs. tekst) nødvendig for å gjenoppbygge alle databaser. Ved lagring i tekstformat tar kopien mye mer enn nødvendig, derfor komprimeres den også vanligvis for å spare plass på enheten den er lagret på.

Sikkerhetskopien generert med eksempelkommandoen kan gjenopprettes hvis informasjonen gikk tapt på grunn av en feil med kommandoen nedenfor som utfører operasjonene SQL av dokumentet copia.sql

mysql --user=pelaez --password=1234 < copia.sql

MySQL Data Dumper

Selv om de tidligere operasjonene ville være tilstrekkelig, er det veldig vanlig å bruke MySQL Data Dumper, allerede nesten en standard for ytelsen, selv om den ikke er en del av basisverktøyene som følger med MySQL

Følgende er alternativene for mydumper mest brukt som, logisk sett, skal skrives som en del av den samme kommandoen, atskilt med mellomrom, selv om de i denne teksten er delt inn i linjer for å lette lesingen:

--host polaridad.es "polaridad.es" er navnet på databaseserveren
--port 3306 "3306" er portnummeret som serveren lytter til (som standard er det 3306)
--user pelaez "pelaez" er navnet på brukeren som databasen har tilgang til
--password 1234 "1234" er passordet til brukeren som har tilgang til databasen
--database temperaturas "temperaturer" er navnet på databasen som sikkerhetskopieres
--no-locks ikke lås databasen under kopieringen (som standard låser den)
--build-empty-files kopier også tomme tabeller
--compress-input komprimere inndata
--compress komprimere utdata (den resulterende sikkerhetskopien)

For å gjenopprette sikkerhetskopien oppnådd med mydumper den er brukt myloader som primært brukes med følgende alternativer, som må inkluderes i samme rekkefølge atskilt med mellomrom:

--host polaridad.es "polaridad.es" er navnet på databaseserveren
--port 3306 "3306" er portnummeret som serveren lytter til (som standard er det 3306)
--user pelaez "pelaez" er navnet på brukeren som databasen har tilgang til
--password 1234 "1234" er passordet til brukeren som har tilgang til databasen
--directory=copia_iot «iot_copy» er mappen som kopien generert med ligger mydumper
--overwrite-tables overskrive tabeller selv om de allerede eksisterer
--verbose 3 "3" er graden av informasjon om prosessen (høyere, flere meldinger)
-C bruke komprimering på datastrømmen

Den neste (og siste) artikkelen i denne serien forklarer hvordan bruke PHP-programmeringsspråket til å lagre informasjonen innhentet av enheter koblet til tingenes internett i databaser som er omtalt i denne teksten.

Legg inn kommentar

Du kan ha gått glipp av