Poster Tagged med ‘MySQL’

Erstat ord i stor .sql fil

Igår skrev jeg lidt om hvordan jeg havde trukket tabeldata ud fra en stor database ved hjælp af mysqldump-funktionen.

Nu indelholder den tabel over 400.000 rækker og det var vigtigt at alle data blev flyttet over i en anden tabel. Jeg skulle derfor rette omkring 400.000 prefix navne, og til det formål valgte jeg at bruge SED (Stream EDitor) i Ubuntu.

Formen er som følger:

sed -i 's/original_ord/nyt_ord/g' fil1.sql

I dette tilfælde blev det til:

sed -i 's/gt_/ec_/g' tabel1.sql

Og på mindre en 5 sek havde den skiftet alle de steder ud hvor der stod “gt_” med “ec_” istedet. Der er masser af muligheder med denne funktion og mange af dem kan sagtens gøres automatisk, jeg påtænker i hvert fald at arbejde lidt videre med automatisk oprettelse af nye tabeller som allerede indeholder tidligere gemte data.

MySQL dump af tabel

Jeg har her til aften sat og arbejdet lidt på et af mine sites OgameGT.dk (en side som indeholder en kæmpe database med masser af info omkring spillet Ogame.dk). Jeg sørger selvfølgelig for løbende at lave backup af databasen, men her til aften havde jeg brug for at trække en enkelt tabel ud til en .sql fil for derefter at arbejde lidt videre med den.

MySQL serveren har heldigvis det rette værktøj med sig – MYSQLDUMP

mysqldump -uBRUGERNAVN -pKODEORD mindatabase tabel1 > tabel1.sql

Med denne kode trækker dump-funktionen alle data ud af tabel1 som ligger i mindatabase. Den sørger også selv for at tilføje en “If table exits = Dump table” og derefter indsætte den på ny med alle data.

I morgen skriver jeg lidt om hvordan man kan arbejde med filen bagefter…

MySQL fejlkoder

Nogle gange har du brug for en god reference, og dette er en af de gange. MySQL PERROR kommando returnerer mange fejlkoder, og jeg har angivet en liste her. For at finde fejl individuelt, bare kør:

# perror 110
OS error code 110:  Connection timed out

Herunder er en liste med alle fejlkoderne.

OS error code   1:  Operation not permitted
OS error code   2:  No such file or directory
OS error code   3:  No such process
OS error code   4:  Interrupted system call
OS error code   5:  Input/output error
OS error code   6:  No such device or address
OS error code   7:  Argument list too long
OS error code   8:  Exec format error
OS error code   9:  Bad file descriptor
OS error code  10:  No child processes
OS error code  11:  Resource temporarily unavailable
OS error code  12:  Cannot allocate memory
OS error code  13:  Permission denied
OS error code  14:  Bad address
OS error code  15:  Block device required
OS error code  16:  Device or resource busy
OS error code  17:  File exists
OS error code  18:  Invalid cross-device link
OS error code  19:  No such device
OS error code  20:  Not a directory
OS error code  21:  Is a directory
OS error code  22:  Invalid argument
OS error code  23:  Too many open files in system
OS error code  24:  Too many open files
OS error code  25:  Inappropriate ioctl for device
OS error code  26:  Text file busy
OS error code  27:  File too large
OS error code  28:  No space left on device
OS error code  30:  Read-only file system
OS error code  31:  Too many links
OS error code  32:  Broken pipe
OS error code  33:  Numerical argument out of domain
OS error code  34:  Numerical result out of range
OS error code  35:  Resource deadlock avoided
OS error code  36:  File name too long
OS error code  37:  No locks available
OS error code  38:  Function not implemented
OS error code  39:  Directory not empty
OS error code  40:  Too many levels of symbolic links
OS error code  42:  No message of desired type
OS error code  43:  Identifier removed
OS error code  44:  Channel number out of range
OS error code  45:  Level 2 not synchronized
OS error code  46:  Level 3 halted
OS error code  47:  Level 3 reset
OS error code  48:  Link number out of range
OS error code  49:  Protocol driver not attached
OS error code  50:  No CSI structure available
OS error code  51:  Level 2 halted
OS error code  52:  Invalid exchange
OS error code  53:  Invalid request descriptor
OS error code  54:  Exchange full
OS error code  55:  No anode
OS error code  56:  Invalid request code
OS error code  57:  Invalid slot
OS error code  59:  Bad font file format
OS error code  60:  Device not a stream
OS error code  61:  No data available
OS error code  62:  Timer expired
OS error code  63:  Out of streams resources
OS error code  64:  Machine is not on the network
OS error code  65:  Package not installed
OS error code  66:  Object is remote
OS error code  67:  Link has been severed
OS error code  68:  Advertise error
OS error code  69:  Srmount error
OS error code  70:  Communication error on send
OS error code  71:  Protocol error
OS error code  72:  Multihop attempted
OS error code  73:  RFS specific error
OS error code  74:  Bad message
OS error code  75:  Value too large for defined data type
OS error code  76:  Name not unique on network
OS error code  77:  File descriptor in bad state
OS error code  78:  Remote address changed
OS error code  79:  Can not access a needed shared library
OS error code  80:  Accessing a corrupted shared library
OS error code  81:  .lib section in a.out corrupted
OS error code  82:  Attempting to link in too many shared libraries
OS error code  83:  Cannot exec a shared library directly
OS error code  84:  Invalid or incomplete multibyte or wide character
OS error code  85:  Interrupted system call should be restarted
OS error code  86:  Streams pipe error
OS error code  87:  Too many users
OS error code  88:  Socket operation on non-socket
OS error code  89:  Destination address required
OS error code  90:  Message too long
OS error code  91:  Protocol wrong type for socket
OS error code  92:  Protocol not available
OS error code  93:  Protocol not supported
OS error code  94:  Socket type not supported
OS error code  95:  Operation not supported
OS error code  96:  Protocol family not supported
OS error code  97:  Address family not supported by protocol
OS error code  98:  Address already in use
OS error code  99:  Cannot assign requested address
OS error code 100:  Network is down
OS error code 101:  Network is unreachable
OS error code 102:  Network dropped connection on reset
OS error code 103:  Software caused connection abort
OS error code 104:  Connection reset by peer
OS error code 105:  No buffer space available
OS error code 106:  Transport endpoint is already connected
OS error code 107:  Transport endpoint is not connected
OS error code 108:  Cannot send after transport endpoint shutdown
OS error code 109:  Too many references: cannot splice
OS error code 110:  Connection timed out
OS error code 111:  Connection refused
OS error code 112:  Host is down
OS error code 113:  No route to host
OS error code 114:  Operation already in progress
OS error code 115:  Operation now in progress
OS error code 116:  Stale NFS file handle
OS error code 117:  Structure needs cleaning
OS error code 118:  Not a XENIX named type file
OS error code 119:  No XENIX semaphores available
OS error code 120:  Is a named type file
OS error code 121:  Remote I/O error
OS error code 122:  Disk quota exceeded
OS error code 123:  No medium found
OS error code 124:  Wrong medium type
OS error code 125:  Operation canceled
MySQL error code 126: Index file is crashed
MySQL error code 127: Record-file is crashed
MySQL error code 128: Out of memory
MySQL error code 130: Incorrect file format
MySQL error code 131: Command not supported by database
MySQL error code 132: Old database file
MySQL error code 133: No record read before update
MySQL error code 134: Record was already deleted (or record file crashed)
MySQL error code 135: No more room in record file
MySQL error code 136: No more room in index file
MySQL error code 137: No more records (read after end of file)
MySQL error code 138: Unsupported extension used for table
MySQL error code 139: Too big row
MySQL error code 140: Wrong create options
MySQL error code 141: Duplicate unique key or constraint on write or update
MySQL error code 142: Unknown character set used
MySQL error code 143: Conflicting table definitions in sub-tables of MERGE table
MySQL error code 144: Table is crashed and last repair failed
MySQL error code 145: Table was marked as crashed and should be repaired
MySQL error code 146: Lock timed out; Retry transaction
MySQL error code 147: Lock table is full;  Restart program with a larger locktable
MySQL error code 148: Updates are not allowed under a read only transactions
MySQL error code 149: Lock deadlock; Retry transaction
MySQL error code 150: Foreign key constraint is incorrectly formed
MySQL error code 151: Cannot add a child row
MySQL error code 152: Cannot delete a parent row

UBUNTU: MySQL backup via Cron job

Når man har prøvet at miste data, f.eks. fra sin MySQL-database, så lærer man at lave sikkerhedskopier mere regelmæssigt og jeg har leget med CRON i Ubuntu for at konfigurere automatisk backup af alle mine databaser. Her er en kort how-to, som jeg håber kan hjælpe lidt på vej:

Jeg starter med at oprette en fil /home/ubuntu/scripts/mysql_backup.sh
Filen skal indeholde nedenstående:

dato=`date -I`
mysqldump -uroot -pDitPassword --all-databases > /home/ubuntu/backups/mysql_backup_$dato.sql;
gzip /home/ubuntu/backups/mysql_backup_$date.sql

Øverst danner jeg en variable der hedder dato den henter den aktuelle dato i formatet yyyy-mm-dd. Derefter kalder jeg mysqldump med parametrene -u efterfulgt af brugernavnet (jeg bruger root). Det er vigtigt at der ikke er mellemrum mellem -u og brugernavnet, derefter parametret -p efterfulgt af dit password, og igen er det vigtigt at det er uden mellemrum. Jeg har valgt at lave en total backup af alle databaser, så jeg tilføjer –all-databases. Herefter fortæller jeg hvor .sql filen skal gemmes og det er her jeg også bruger $dato variablen på den måde kan jeg nemt gemme en backup pr. dag. Til sidst Gzip’er jeg filen ind i en .gz fil. Mine databaser fylder pt. omkring 150MB og det tager ca. 45 sek. at trække dem ud og pakke dem sammen (efter pakning fylder filen 23,4MB).

Nu har du filen som nemt danner en backup, men den slags glemmer mennesker, så derfor skal det automatiseres.

CRON er en planlægning værktøj til Linux, det giver dig mulighed for at angive, hvornår et program eller script skal køres. Når du skal redigere i din CRON tabel, skal du indtaste

crontab -e

fra en terminal. Dette vil indlæse dine nuværende CRON tabel i din standard teksteditor (jeg synes NANO er nemmest), når du gemme og afslutte redigering af CRON tabellen vil den automatisk blive indlæst og klar til brug.

0 2 * * * /home/ubuntu/scripts/mysql_backup.sh
0 5 * * 0 /home/ubuntu/scripts/rsync_remote.sh

Ovenstående eksempel viser min nuværende CRON tabel. Filen har to indgange, en for hvert script jeg ønsker at køre. Den første post fortæller CRON at den skal kører mysql_backup.sh scriptet hver morgen kl 2:00. Den anden post kører mit rsync script hver søndag morgen kl 05:00 for at sikre data på en ekstern makskine.

UBUNTU: LAMP installation

Indledning

Jeg har for nyligt købt mig en rigtig rack-server… Meningen er selvfølgelig at min lille serverfarm herhjemme skal udbygges lidt, men samtidig vil jeg også blogge lidt omkring hvad jeg foretager mig på den. Det første var selvfølgelig at smide et OS på den, det kan du læse om her.

Nu er jeg så nået til det punkt hvor der skal lidt funktionsdygtige programmer på den. I denne guide vil jeg vise dig, hvordan du installerer et LAMP system. LAMP står for Linux, Apache, MySQL, PHP. Guiden er beregnet til at hjælpe dem, der har meget lidt viden om at bruge Linux (som jeg selv ;-D)

I denne guide jeg bruger værtsnavnet server1.backupsolutions.dk med IP-adressen 192.168.1.100. Disse indstillinger kan variere for dig, så du er nødt til at erstatte dem når du selv skal igang.

Jeg kører alle trinene i denne guide med root-privilegier, så sørg for du er logget ind som root:

sudo su

Installering af MySQL

Først skal vi installere MySQL 5.1:

apt-get install mysql-server mysql-client

Du skal undervejs angive dit root-password til MySQL serveren…

Installering af Apache2

Apache2 er også tilgængelig som en Ubuntu-pakke, derfor kan vi installere det på denne måde:

apt-get install apache2

Når den er færdig skriver du http://192.168.0.100 i din browser (f.eks. FireFox som følger med Ubuntu), og du bør se Apache2 standardsiden. (IT WORKS!)

Apache’s default dokument root er /var/www på Ubuntu, og opsætningsfilen finder du i /etc/apache2/apache2.conf. Yderligere konfigurationer gemmes i undermapper under/etc/apache2 som f.eks. /etc/apache2/mods-enabled (for Apache-moduler) og /etc/apache2/sites-enabled (for virtuelle værter)

Installering af PHP5

Vi kan installere PHP5 og Apache PHP5-modul således:

apt-get install php5 libapache2-mod-php5

Når dette er installeret skal Apache genstartes:

/etc/init.d/apache2 restart

eller blot

service apache2 restart

Test af installationen

Vi har nu installeret det vi skal bruge for at have en fornuftig LAMP-server kørende, men for at teste om det hele virker kan du prøve at oprette en ny fil:

gedit /var/www/phpinfo.php

Dette vil oprette en ny fil samt åbne den i en editor så du kan redigerer den. Skriv følgende:

<?php
phpinfo();
?>

Gem og luk den grafiske editor. Herefter skal du prøve at åbne siden http://192.168.1.100/phpinfo.php
Den skulle meget gerne vise en masse informationer om din server konfiguration.

Installer MySQL understøttelse i PHP5

For at få MySQL understøttelse i PHP, kan vi installere php5-mysql pakken. Det er en god ide at installere nogle andre PHP5 moduler som du måske brug for dem. Du kan søge efter PHP5 moduler ved at skrive:

apt-cache seacrch php5

Derefter vælger du bare dem du vil have:

apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Genstart herefter Apache igen:

service apache2 restart

Genindlæs nu http://192.168.0.100/phpinfo.php i din browser, og rul ned til modulerne afsnittet igen. Du kan nu finde alle de nye moduler, herunder MySQL-modulet.

Ændre opsætning af Apache2

Det er upraktisk at biblioteket /var/www/ er skrivebeskyttet, så derfor skal vi idag ændre lidt på noget der hedder SymLinks.

Start med at skrive:

gedit /etc/apache2/sites-available/default

Min fil ser således ud (men du skal måske rette den til med dine egne variabler):

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName backupsolutions.dk
  DocumentRoot "/home/martin/websites/backupsolutions.dk/"
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory /home/martin/websites/backupsolutions.dk/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog /var/log/apache2/error.log
  LogLevel warn
  CustomLog /var/log/apache2/access.log combined

  Alias /doc/ "/usr/share/doc/"
  <Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
  </Directory>
</VirtualHost>

Det der i hovedtræk står er at der skal laves en virtuel mappe på serveren som henter siderne fra /home/martin/websites/ og dernæst lidt omkring hvor log’s osv. skal gemmes på serveren.

Herefter skal du sætte tilladelserne på dit website-bibliotek således:

chmod 755 /home/martin/websites/

Og endelig skal serveren lige genstartes:

service apache2 restart

Hvis du åbner din browser og skriver http://localhost/ eller den IP du nu har tildelt serveren (i mit tilfælde http://192.168.1.100/) vil du kunne se en liste over de filer der ligger i biblioteket /home/martin/websites/

Installering af phpMyAdmin

phpMyAdmin er et web-interface, hvorigennem du kan administrere dine MySQL-databaser. Det er en god ide at installere det:

apt-get install phpmyadmin

Du vil se følgende spørgsmål:
Internetserver der skal sættes op automatisk: <– Apache2
Configure database for phpmyadmin with dbconfig-common? <– No

Forhåbentlig ligger phpMyAdmin nu i /home/martin/websites/ dog kunne jeg ikke finde mine filer nogen steder, så jeg hentede dem selv på www.phpMyAdmin.net og smed dem i /home/martin/websites/phpmyadmin/ og derefter kan du logge ind via http://192.168.1.100/phpmyadmin/

Nu er du så småt ved at være klar med din LAMP-server… Jeg vil i de følgende dage komme med flere spændende how-to-guides omkring den spændende verden af Ubuntu / Linux.

Jeg har lavet lidt flere guides efterfølgende, hvis du mangler noget så tjek nedenstående:

Pure-FTPd Installation

Bluefish Editor Installation

Return top

MartinBonde.dk Bloggen

Denne blog handler om hverdagens gang. Der vil være tekniske indlæg som hovedsageligt vil være en hjælp til mig selv næste gang jeg står i samme situation.. Følg med... Det kunne være du kunne lære noget ;-)