Está en la página 1de 77

Manual de Supervivencia del

Administrador de MySQL
En gnu/Linux, por supuesto
6 de abril de 2007
Autor: Miguel Jaque Barbero
3 Manual de Supervivencia del Administrador de MySQL
ndice de Contenidos
Presentacin...........................................................................................................................................5
1.1. Contenido....................................................................................................................................
1.2. Li!en!ia.......................................................................................................................................
1.". #esponsabilidad...........................................................................................................................6
1.$. %!er!a del %utor..........................................................................................................................6
Captulo 1. ntroduccin.......................................................................................................................!
1.1. La &istoria de M'()L................................................................................................................7
1.2. Cara!ter*sti!as..............................................................................................................................+
1.". ,nstala!i-n....................................................................................................................................+
1.$. Con.igura!i-n B/si!a..................................................................................................................0
Captulo ". Conceptos de #ases de $atos..........................................................................................1%
2.1. 1o!abulario...............................................................................................................................1"
2.2. La %rquite!tura de M'()L.......................................................................................................1"
2.". Con!urren!ia, ,ntegridad ' #endi2iento...................................................................................1$
2.$. 3ransa!!iones............................................................................................................................17
2.. Bloqueos....................................................................................................................................10
2.6. Motores de %l2a!ena2iento.....................................................................................................10
Captulo %. #enc&mar'in(.................................................................................................................."%
".1. La 4e!esidad del Ben!52ar6ing...............................................................................................2"
".2. Estrategias..................................................................................................................................2"
".". &erra2ientas..............................................................................................................................2$
Captulo ). Administracin................................................................................................................"!
$.1. Co2andos..................................................................................................................................27
$.2. (iste2as de %d2inistra!i-n 7r/.i!os........................................................................................20
Captulo 5. Se(uridad..........................................................................................................................%!
.1. Con!eptos de (eguridad............................................................................................................"7
.2. (enten!ias 7#%43 ' #E189E...............................................................................................$0
.". Logs...........................................................................................................................................$2
.$. (eguridad en el (iste2a 8perati:o............................................................................................$"
.. (eguridad Externa......................................................................................................................$$
.6. En!ripta!i-n de ;atos................................................................................................................$7
.7. M'()L !on !5root....................................................................................................................$0
.+. Copias de (eguridad..................................................................................................................0
Captulo *. +ptimi,acin....................................................................................................................55
6.1. <ndi!es........................................................................................................................................
6.2. Consultas...................................................................................................................................0
6.". #endi2iento del (er:idor..........................................................................................................6
Captulo !. -eplicacin.......................................................................................................................!1
7.1. Con!epto....................................................................................................................................71
7.2. Con.igura!i-n............................................................................................................................72
7.". %rquite!turas.............................................................................................................................7"
Captulo .. #i/lio(ra0a.......................................................................................................................!!
5 Manual de Supervivencia del Administrador de MySQL
Presentacin
1.1. Contenido
Este do!u2ento no es un 2anual !o2pleto de M'()L. 3a2po!o es una gu*a para
progra2adores ()L ni, 2u!5o 2enos, para quienes deseen !olaborar en el desarrollo de
M'()L. (i2ple2ente es una 7u*a #/pida de #e.eren!ia para quienes tengan la suerte de
ad2inistrar un (er:idor de Bases de ;atos M'()L.
4atural2ente, este do!u2ento !ontiene errores =' supongo que 2u!5os>. ?ero puedes
a'udar2e a 2e@orarlo en:i/ndo2e un !orreo !on las erratas, pi.ias ' sugeren!ias
=2@aqueAil6ebenson.!o2>. 3e lo agradeB!o de ante2ano.
1a2os a lo tC!ni!o.
Este do!u2ento est/ basado en M'()L . ?ara todos los puntos, sal:o el apartado de
,nstala!i-n en DindoEs, utiliBarC un siste2a operati:o gnu/Linux. En !on!reto, ;ebian
".1. 3endr/s que adaptar lo que 5a' a la distribu!i-n o el siste2a operati:o que utili!es.
1.2. Licencia
Los dere!5os de reprodu!!i-n =!op'rig5t> de este do!u2ento pertene!en a su autor,
Miguel Jaque Barbero F 2007.
Este do!u2ento se distribu'e ba@o Li!en!ia #e!ono!i2ientoGCo2partir ba@o la 2is2a
li!en!ia 2. EspaHa Li!ense de Creati:e Co22ons. ?uede en!ontrar 2/s in.or2a!i-n
sobre esta li!en!ia en 5ttpI//!reati:e!o22ons.org/li!enses/b'Gsa/2./es/.
B/si!a2ente, usted puede !opiar, 2odi.i!ar, distribuir ' !o2uni!ar pJbli!a2ente esta
obra, in!lu'endo un uso !o2er!ial de la 2is2a, ba@o las siguientes !ondi!ionesI
-econocimiento. ;ebe re!ono!er 2i autor*a de este do!u2ento =pero no de una
2anera que sugiera que tiene 2i apo'o al uso que 5aga de su obra>.
Compartir /a1o la misma licencia. (i altera o trans.or2a esta obra, o genera una
obra deri:ada, s-lo puede distribuir la obra generada ba@o una li!en!ia idCnti!a a
Csta.
Los tCr2inos legales !o2pletos de esta li!en!ia pueden !onsultarse en
5ttpI//!reati:e!o22ons.org/li!enses/b'Gsa/2./es/legal!ode.es
3odos los dere!5os de reprodu!!i-n =!op'rig5t> ' 2ar!as registradas pertene!en a sus
respe!ti:os dueHos. El uso de !ualquier tCr2ino en este do!u2ento no se 5a realiBado !on
inten!i-n de !ontra:enir ninguno de estos dere!5os. (i !onsideras que alguno de sus
dere!5os de reprodu!!i-n o 2ar!a registrada 5an sido :ulnerados por este do!u2ento, o
para !ualquier pregunta o duda, por .a:or ponte en !onta!to !on el autor en
in.oAil6ebenson.!o2.
Miguel Jaque Barbero (mjaqueil!ebenson"com# $
1.3. Responsabilidad
4o se asu2e ninguna responsabilidad por los !ontenidos de este do!u2ento. El le!tor
asu2e el riesgo deri:ado del uso de los !on!eptos, e@e2plos ' !ualquier otro !ontenido.
%l tratarse de una nue:a edi!i-n, este do!u2ento puede !ontener errores e i2pre!isiones.
1.4. Acerca del Autor
Miguel Jaque Barbero na!i- en Bar!elona en 106+. Es ,ngeniero (uperior de
3ele!o2uni!a!i-n por la Kni:ersidad ?olitC!ni!a de Madrid ' M/ster en %d2inistra!i-n
de E2presas por el ,nstituto de E2presa de Madrid.
&a desarrollado toda su !arrera pro.esional en el se!tor de la ingenier*a de so.tEare ',
desde 1000 !entrado ex!lusi:a2ente en te!nolog*as de so.tEare libre a tra:Cs de ,l6e
Benson =EEE.il6ebenson.!o2>.
(u a!ti:idad pro.esional se !entra desde enton!es en el desarrollo de pro'e!tos, .or2a!i-n
' !onsultor*a, utiliBando ex!lusi:a2ente estas te!nolog*as.
?ara !onta!tar !on el autorI 2@aqueAil6ebenson.!o2
% Manual de Supervivencia del Administrador de MySQL
Captulo 1. Introduccin
1.1. La Historia de My!L
&o', M'()L es uno de los gestores de bases de datos rela!ionales =(7B;#> 2/s
utiliBado en el 2undo, !on 2/s de 10 2illones de instala!iones.
M'()L tu:o su origen en en el intento de 2e@orar la rapideB ' .lexibilidad de otra base
de datosI 2()L.
2()L era =' es> propiedad de &ug5es 3e!5nologies, ' no se distribu'e !o2o so.tEare
libre. (in e2bargo, !ubr*a bastante bien el 5ue!o de 2er!ado entre base de datos
pequeHas ' !on po!as !ara!ter*sti!as rela!ionales =!o2o %!!ess o ;BL> ' las bases de
datos rela!ionales pro.esionales =!o2o 8ra!le e ,n.or2ix>. M'()L 5ered- ese
posi!iona2iento.
En 100, dos sue!os ' un .inCs =Mi!5ael Didenius, ;a:id %x2ar6 ' %llan Larsson>
.undan en (ue!ia la e2presa M'()L %B para apro:e!5ar !o2er!ial2ente este
desarrollo.
El origen del no2bre no est/ 2u' !laro. ?or una parte, gran parte del !-digo original
ten*a el pre.i@o M2'N =2io en inglCs> !o2o una .or2a de distinguirlo del !-digo de
2()L. ?ero ta2biCn es !ierto que uno de lo !o.undadores de M'()L =Mont' Didenius>
tiene una 5i@a lla2ada MM'N.
La pri2era :ersi-n de M'()L :io la luB en 2a'o de 100 ' 'a desde enton!es se
distribu'- ba@o los tCr2inos de la li!en!ia 7?L. &o', se en!uentra en la :ersi-n ' tiene
una !uota de 2er!ado =segJn Join1ision O Julio de 2006> superior al de !ualquier otra
base de datos.
%de2/s, M'()L es una pieBa .unda2ental en las arquite!turas L%M? de ser:idores de
apli!a!iones ba@o gnuLinux.
Miguel Jaque Barbero (mjaqueil!ebenson"com# &
%!tual2ente, M'()L es propiedad de la e2presa (ue!a M'()L %B. MEs propiedadN
signi.i!a que esta e2presa es dueHa del !op'rig5t de la 2a'or*a del !-digo, quien lo
distribu'e ba@o li!en!ia 7?L.
El nego!io de M'()L %B, !o2o el de otras 2u!5as !o2paH*as de so.tEare libre, se basa
en una !o2bina!i-n de li!en!ia dual ' ser:i!ios aso!iados. %s*, 2ientras M'()L %B
distribu'e gratuita2ente su :ersi-n 7?L del gestor de base de datos, ta2biCn
!o2er!ialiBa :ersiones ba@o li!en!ia tradi!ional ' o.re!e ser:i!ios de soporte tC!ni!o,
.or2a!i-n ' !erti.i!a!i-n.
El logo de M'()L es un del.*n, de no2bre M(a6ilaN.
1.2. Caractersticas
Estas son las prin!ipales !ara!ter*sti!as de M'()LI
Es!rita en C/CPP.
2unciona en m3ltiples plata0ormas: (nuLinu4 y 5indo6s7 pero ta2biCn en
%,Q, %2iga, LreeB(;, ...
Es 2ultit5read ' puede apro:e!5ar la disponibilidad de 2ultipro!esadores.
8s so0t6are li/re 9licencia :PL; ' ta2biCn est/ disponible ba@o li!en!ia
!o2er!ial =por e@e2plo, para integra!i-n>.
<iene distintos motores de almacenamiento =tipos de tablas>, algunos !on
soporte transa!!ional ' otro no.
8s muy7 muy r=pida... si se utiliBan 2otores de al2a!ena2iento no
transa!!ionales.
7ran soporte del est/ndar ()L.
>umerosas opciones de cone4in =?&?, 8;BC, so!6ets 3C?/,?, J;BC, %?, de
C/CPP...>
(oporte 2ultilengua@e.
2=cil de instalar7 usar y administrar.
1.3. Instalacin
La instala!i-n de M'()L es, !o2o para !asi todos los progra2as 5o' en d*a, real2ente
sen!illa. ?ode2os !onseguir la :ersi-n de M'()L para nuestro siste2a operati:o en
5ttpI//de:.2'sql.!o2
1.3.1. En gnuLinux
(i est/s utiliBando ;ebian, ni siquiera ne!esitar/s :isitar la p/gina de 2'sql.!o2.
?uedes instalarte M'()L utiliBando el siste2a apt de ;ebian.
?ara ello, e@e!uta el siguiente !o2ando !o2o rootI
#> apt-get install mysql-server
' Manual de Supervivencia del Administrador de MySQL
Con este !o2ando instalar/s el gestor de base de datos rela!ionales.
3a2biCn !on:iene que instales las 5erra2ientas de !liente. ?uedes 5a!erlo !on el
siguiente !o2andoI
#> apt-get install mysql-client
(i utiliBas otras distribu!iones de gnuLinux, podr/s des!argarte de la p/gina de
de:.2'sql.!o2 el !-digo en paquete #?M, bien genCri!o o en :ersiones espe!*.i!as
para (u(E, #ed &at ' Kbuntu. 3a2biCn podr/s en!ontrar all* el !-digo .uente de
M'()L.
1.3.2. En Windows
La instala!i-n en DindoEs ta2biCn es sen!illa. Basta !on ba@arse M'()L
,nstallation DiBard ' e@e!utarlo. Las op!iones por de.e!to son :/lidas para la
2a'or*a de usos de M'()L.
El pro!eso de instala!i-n es el siguiente =!uidado, puede !a2biar en .uturas
:ersiones>I
1. ;es!argar M'()L Co22unit' (er:er desde 5ttpI//de:.2'sql.!o2/doEnloads/
2. Es!oger el e@e!utable MDindoE Essentials =x+6>N
". %!eptar todas las op!iones por de.e!to ex!eptoI
(ign KpI &aB lo que quieras. ?uedes registrarte o no.
Con@unto de Cara!teresI Elegir MBest (upport .or Multilinguis2N, que nos
per2itir/ utiliBar los !ara!teres Mtipi!al (panis5N =H, /, C, *, R...> en los no2bres
de tablas ' !olu2nas.
Modo de E@e!u!i-nI Elegir ta2biCn M,n!lude Bin ;ire!tor' in DindoEs
?at5S ade2/s de la e@e!u!i-n !o2o (er:i!io DindoEs. %s* podre2os utiliBar
la !onsola ()L.
3ras la instala!i-n, re:isa que el ser:i!io M'()L estC .un!ionando.
1.4. Con"i#uracin $%sica
%l arran!ar, M'()L lee el .i!5ero my.cnf para estable!er distintas :ariables del
siste2a.
4or2al2ente no es ne!esario 2odi.i!ar este .i!5ero, pero s* !on:iene saber quC es ' para
quC se usa. (olo en !aso de tener que opti2iBar el rendi2iento de nuestro ser:idor
ne!esitare2os 2eternos en este beren@enal.
1.4.1. Situacin
El siste2as ;ebian gnu/Linux, este .i!5ero se en!uentra en /etc/mysql.
En siste2as DindoEs, se en!uentra en el dire!torio de instala!i-n, ?ero su
situa!i-n puede 2odi.i!arse !on el progra2a de !on.igura!i-n.
Miguel Jaque Barbero (mjaqueil!ebenson"com# ()
1.4.2. Variables del Sistema
Cada :ariable del siste2a tiene un :alor por de.e!to. T, aunque su :alor se
estable!e al arran!ar el ser:idor, 2u!5as de ellas pueden 2odi.i!arse en tie2po de
e@e!u!i-n 2ediante el !o2ando SET.
El !o2ando SHOW VARIABLES, 2uestra el :alor de estas.
%lgunas de las :ariables sonI
auto?increment?increment: estable!e el in!re2ento para !olu2nas
autoin!re2entadas. ?or de.e!to tiene el :alor 1.
auto?increment?o00set: estable!e el :alor ini!ial para las !olu2nas
autoin!re2entadas.
/ac'?lo(: ta2aHo de la !ola de espera de !onexiones 3C?/,?.
/asedir: dire!torio de instala!i-n del ser:idor.
/inlo(?cac&e?si,e: ta2aHo de la !a!5C binaria para senten!ias ()L de
transa!!iones.
c&aracter?set?client: !on@unto de !ara!teres para senten!ias de !liente.
c&aracter?set?data/ase: !on@unto de !ara!teres por de.e!to para las
bases de datos.
c&aracter?set?results: !on@unto de !ara!teres para los !on@untos de
resultados.
c&aracter?set?server: !on@unto de !ara!teres por de.e!to para el
ser:idor.
connect?timeout: tie2po de espera en segundos de los paquetes de
!onexi-n.
data?dir: dire!torio de datos del ser:idor.
e4pire?lo(s?days: 4J2ero de d*as para la eli2ina!i-n auto2/ti!a de
logs binarios.
0t?/oolean?synta4: operadores l-gi!os per2itidos en las bJsquedas de
texto !o2pleto.
0t?ma4?6ord?len(t&: longitud 2/xi2a de las palabras indexadas por
texto !o2pleto.
0t?min?6ord?len(t&: longitud 2*ni2a de las palabras indexadas por
texto !o2pleto.
&ave?/d/: indi!a si el ser:idor dispone de soporte para 2otores de
al2a!ena2iento B;B.
&ave?arc&ive: indi!a si el ser:idor dispone de soporte para 2otores de
al2a!ena2iento %#C&,1E.
&ave?openssl: indi!a si el ser:idor dispone de soporte para !onexiones
((L.
init?connect: !o2ando a e@e!utar en las !onexiones de !lientes =sal:o
(K?E#>. 3a2biCn puede ser un !o2ando o un .i!5ero de !o2andos ()L.
(( Manual de Supervivencia del Administrador de MySQL
init?0ile: .i!5ero a e@e!utar en el arranque del ser:idor.
innod/?444: :ariables del 2otor de al2a!ena2iento ,nno;B.
interactive?tiemout: tie2po de expira!i-n de las !onexiones
intera!ti:as.
1oin?/u00er?si,e: ta2aHo del bu..er para las opera!iones de @oin que no
utili!en *ndi!es.
et!.
3odas las :ariables est/n des!ritas en el Manual de M'()L, en la se!!i-n
M('ste2 1ariablesN.
1.4.3. Otras Variables y Secciones
Las :ariables anteriores !orresponden !on la se!!i-n [mysqld] del .i!5ero
my.cnf ' son las que pueden :erse !on el !o2ando SHOW VARIABLES.
?ero el .i!5ero de !on.igura!i-n in!lu'e otras se!!iones e in!luso otras :ariables
no a!!esibles por estos 2Ctodos.
Entre las :ariables de la se!!i-n [mysqld] que no podre2os !onsultar ni
a!!eder 2ediante (E3 ' (&8D, est/nI
user: usuario del siste2a !on el que se e@e!utar/ M'()L.
pid@0ile: .i!5ero del siste2a que al2a!enar/ el nJ2ero del pro!eso del
ser:idor.
soc'et: .i!5ero del siste2a que al2a!enar/ el nJ2ero del so!6et 3C?/,?
del ser:idor.
port: puerto 3C?/,? en el que es!u!5ar/ el ser:idor.
/ind@address: dire!!i-n ,? en la que es!u!5ar/ el el ser:idor.
%de2/s, el .i!5ero in!lu'e las siguientes se!!iones de !on.igura!i-nI
AclientB O (e!!i-n para la !on.igura!i-n de a!!eso de los !lientes.
AmysCld?sa0eB O (e!!i-n para la e@e!u!i-n del ser:idor en 2odo seguro.
AmysCldumpB O Con.igura!i-n para el :ol!ado de bases de datos.
Aisamc&'B O Con.igura!i-n para la !o2proba!i-n de tablas M',(%M.
AMDSQL?CLES<8-B O Con.igura!i-n de Clusters de M'()L.
%de2/s, el .i!5ero de !on.igura!i-n suele 5a!er re.eren!ia a un dire!torio de
!on.igura!i-n en el que podr*an en!ontrarse !on.igura!iones espe!*.i!as requeridas
por otras apli!a!iones.
(3 Manual de Supervivencia del Administrador de MySQL
Captulo 2. Conceptos de $ases de &atos
2.1. 'ocabulario
(olo para a!larar !on!eptos. El tCr2ino MBase de ;atosN se utiliBa para 5a!er re.eren!ia a
dos realidades distintas. (e trata de las siguientesI
Sistema :estor de #ases de $atos -elacionales 9S:#$-;I Con este tCr2ino 2e
re.iero al progra2a en!argado de gestionar los datos, pro!esar las !onsultas, et!.
&a' 2u!5osI ?osgre()L, 8ra!le, ,n.or2ix, %dabas, ()L (er:er ', natural2ente,
M'()L.
#ase de $atos -elacional 9#$-;: Este tCr2ino 5a!e re.eren!ia a los datos, a
!ada uno de los !on@untos de tablas =entidades ' rela!iones> aso!iados a un
proble2a. (on !readas por los usuarios quienes les asignan sus no2bres =test,
ban!o, usuarios, n-2inas, et!>.
4or2al2ente el !ontexto expli!ar/ de quC signi.i!ado se trata.
2.2. La Ar(uitectura de My!L
?ode2os i2aginar la arquite!tura interna de M'()L di:idida en tres !apas. (e trata de
una di:isi-n l-gi!a, que no !oin!ide ne!esaria2ente !on la di:isi-n interna del !-digo,
pero nos a'udar/ a entender los !on!eptos.
Las tres !apas sonI
1. Capa de Cone4inI En la que reside la .un!ionalidad que !one!ta M'()L !on
otros siste2as ' lengua@es =%?,s, so!6ets, 8;BC, et!.>
2. Capa de L(icaI En la que reside la l-gi!a para pro!esar !onsultas ()L =parseo
de senten!ias, plani.i!a!i-n, e@e!u!i-n, !a!5Cs, et!.>
". Capa de AlmacenamientoI En la que reside la l-gi!a para al2a!enar ' a!!eder a
los datos de las tablas.
Kna !ara!ter*sti!a de M'()L es que puede utiliBar distintos motores de almacenamiento
(
.
Es de!ir, que la !apa de al2a!ena2iento dispone de :arios subni:eles, uno por !ada tipo
de 2otor soportado.
La siguiente .igura nos a!larar/ un po!o 2/s las !osasI
1 %ntes, los 2otores de al2a!ena2iento se deno2inaban MtablasN. ?ero a5ora se !a2biado la ter2inolog*a para dar 2/s Cn.asis a
su l-gi!a de al2a!ena2iento ' e:itar !onsiderarlos !o2o ele2entos pasi:os.
Miguel Jaque Barbero (mjaqueil!ebenson"com# (*
?ode2os :er que M'()L soporta !uatro 2otores de al2a!ena2iento b/si!os. &a' que
desta!ar que una base de datos puede al2a!enar sus datos utiliBando una !o2bina!i-n de
distintos 2otores. Es de!ir, parte de los datos pueden estar en una tabla M',(%M ' otra
parte en una tabla ,nno;B.
Enseguida :ere2os las di.eren!ias entre los distintos 2otores, pero antes tene2os que
repasar algunos !on!eptos b/si!os.
2.3. Concurrencia) Inte#ridad y Rendi*iento
El dile2a de todo al2a!ena2iento de datos, 'a sea una base de datos rela!ional o un
si2ple .i!5ero de dis!o, es la ele!!i-n entre !on!urren!ia e integridad.
?or un lado, nos gustar*a o.re!er la 2/xi2a !on!urren!ia, per2itiendo que 2Jltiples
usuarios a!!edieran a los datos si2ult/nea2ente, 'a sea para leerlos, es!ribirlos o
2odi.i!arlos sin su.rir penaliBa!iones de tie2po.
?ero ta2biCn so2os !ons!ientes que 5a' que garantiBar que los datos le*dos por !ada
usuario sean *ntegros. Es de!ir, que no 5a'an sido !orro2pidos en el pro!eso de a!!eso.
%2bos !on!eptos son in!o2patibles entre s*.
Esto no le o!urre s-lo a M'()L, !o2o :ere2os, es un proble2a general, de pura l-gi!a.
(i per2iti2os la 2/xi2a !on!urren!ia, dos usuarios pueden intentar es!ribir el 2is2o
dato al 2is2o tie2po ', !o2o !onse!uen!ia, tendr*a2os un gali2at*as in!ongruente. ?or
e@e2plo, si se tratara de un buB-n de !orreo ele!tr-ni!o, podr*a2os a!abar !on una
2eB!la de dos 2ensa@es re!ibidos por distintas :*as.
%l 2is2o tie2po, UquC o!urrir*a si un usuario le'era un 2ensa@e 2ientras otro lo est/
2odi.i!andoV ?odr*a e2peBar le'endo la pri2era parte del 2ensa@e original ' la Jlti2a
parte del 2ensa@e 2odi.i!ado... ,n!ongruente.
(5 Manual de Supervivencia del Administrador de MySQL
La solucin est en la implementacin de semforos
2
3ene2os que garantiBar que un usuario no es M2olestadoN por otros usuarios !uando
a!!eda a los datos ' para ello, i2ple2enta2os un siste2a de se2/.oros que regular/ el
a!!eso de los usuarios a los datos.
%.ortunada2ente no es ne!esario i2pedir todas las opera!iones. Las Jni!as que !ausan
proble2as son las opera!iones que 2odi.i!an los datos. Los le!tores, !o2o no alteran los
datos, pueden !o2partir a!!eso !on otros le!tores sin 2olestarse.
2.3.1. i!os de Sem"#oros
?ode2os as* i2ple2entar dos tipos de se2/.oros, de le!tura ' de es!ritura.
Sem=0oros de Lectura 9o Compartidos;: (on los se2/.oros que
obtienen los usuarios !uando pretenden leer datos. Este se2/.oro
garantiBa que ningJn usuario 2odi.i!ar/ los datos durante la le!tura. 8,
di!5o de otra 2anera, que ningJn usuario obtendr/ un se2/.oro de
es!ritura sobre esos datos. ?ero otros usuarios s* podr/n obtener
se2/.oros de le!tura sobre los 2is2os datos, in!re2entando as* la
!on!urren!ia al per2itir opera!iones de le!tura si2ult/neas. El
se2/.oro no se retira 5asta que el Jlti2o le!tor 5a ter2inado su
opera!i-n.
Sem=0oros de 8scritura 9o 84clusivos;: (on los que obtienen los
usuarios al 2odi.i!ar los datos. Este se2/.oro i2pide a !ualquier otro
usuario =le!tor o es!ritor> a!!eder a los datos 2ientras dura la
opera!i-n.
El proble2a de los se2/.oros :uel:e a ser el rendi2iento.
Mientras un usuario obtiene un se2/.oro sobre los datos, el resto =sal:o que se
trate de dos le!tores> deber/n esperar, redu!iendo as* el rendi2iento de todo el
siste2a.
(in e2bargo, este proble2a puede 2itigarse 2odi.i!ando la granularidad de los
se2/.oros.
2.3.2. $ranularidad
Entende2os por 7ranularidad el ta2aHo de los datos que se :en a.e!tados por el
se2/.oro.
4o es lo 2is2o !ontrolar el a!!eso a toda la base de datos !uando quere2os
es!ribir un Jni!o registro, que li2itar el a!!eso ex!lusi:a2ente al registro a.e!tado.
(i li2ita2os toda la tabla, el rendi2iento e2peorar/, pues otros usuarios !u'as
opera!iones no estu:ieran dirigidas sobre datos a los a!!edidos por el pri2er usuario
pero pertene!ieran a la 2is2a tabla, tendr*an aun as* que esperar a que Cste ter2inase
porque el se2/.oro a.e!ta a los datos que intentan a!!eder.
2 Lla2ados Mlo!6sN en inglCs.
Miguel Jaque Barbero (mjaqueil!ebenson"com# ($
(in e2bargo, aunque en prin!ipio, pare!er*a que un se2/.oro por .ilas 2e@orar*a el
rendi2iento, no sie2pre es as*. Kna estrategia de se2/.oros de Mba@a granularidadN
!onsu2e 2u!5o tie2po de gesti-n. La !o2proba!i-n, obten!i-n ' libera!i-n de
se2/.oros, !uando son por .ilas, !onsu2e 2u!5os re!ursos del ser:idor ' puede llegar
a dar al traste !on el rendi2iento.
%s* que, es ne!esario al!anBar el equilibrio.
%.ortunada2ente, M'()L es 2u' bueno para eso. ?uedes elegir entre distintos
2otores de al2a!ena2iento ' tener distintos ni:eles de se2/.oros segJn las
ne!esidades de !ada !aso.
La siguiente tabla 2uestra las estrategias de se2/.oros de !ada 2otor de
al2a!ena2iento de M'()L ' sus !ara!ter*sti!asI
Sem=0oros Concurrencia So/recar(a de :estin Motores
?or 3abla La 2/s ba@a La 2/s ba@a M',(%M, &eap
' Merge
?or ?/gina Media Media B;B
?or Lila
=Con Multi:ersioning>
La 2/s alta La 2/s alta ,nno;B
Control de Concurrencia por Multiversin 9multiversionin(;
Este siste2a, ta2biCn lla2ado =M1CC O MultiG1ersion Con!urren!'
Control> es utiliBado en :arias bases de datos, !o2o 8ra!le ' ?ostgre()L.
(upone una 2e@ora a los se2/.oros por .ila 2e@orando su !on!urren!ia.
1ea2os !o2o .un!iona.
Con!eptual2ente, !ualquier transa!!i-n debe :er los datos de las tablas !on
la 2is2a in.or2a!i-n que ten*an !uando la transa!!i-n se ini!i-, aunque la
transa!!i-n tarde 5oras en !o2pletarse. Este es un requeri2iento para
garantiBar la integridad de las transa!!iones.
En un siste2a de :ersiones, a !ada .ila de la tabla se le aHaden dos datos
o!ultosI un identi.i!ador de !rea!i-n ' otro de borrado. Los identi.i!adores se
to2an de un !ontador in!re2ental, que !re!e !ada :eB que se ini!ia una
transa!!i-n.
Cuando se !rea una .ila, su identi.i!ador de !rea!i-n to2a el :alor del
M!ontadorN.
Cuando una .ila se borra, su identi.i!ador de borrado to2a el :alor del
M!ontadorN. ;e 5e!5o la .ila no es borrada real2ente 5asta que no queda
abierta ninguna transa!!i-n !on identi.i!ador 2enor o igual que el identi.i!ador
de borrado.
(% Manual de Supervivencia del Administrador de MySQL
%5ora, es ./!il entender la l-gi!a de las opera!iones ()LI
S8L8C<: %l realiBar un sele!t, el ser:idor de:uel:e s-lo las .ilas
queI
a> 3engan un identi.i!ador de !rea!i-n 2enor o igual que el
!ontador de la transa!!i-n ' que no perteneB!a a ninguna
transa!!i-n en e@e!u!i-n.
b> (i tienen identi.i!ador de borrado no nulo, sea 2a'or que el
!ontador de la transa!!i-n.
>S8-<: %l realiBar un ,4(E#3, el ser:idor pone el identi.i!ador
de !rea!i-n de la .ila al :alor del !ontador de la transa!!i-n.
$8L8<8: %l borrar una .ila, el ser:idor pone el identi.i!ador de
borrado al :alor del !ontador de la transa!!i-n.
EP$A<8: %l 2odi.i!ar una .ila, el ser:idor pone !o2o
identi.i!ador de borrado el :alor a!tual del identi.i!ador de !rea!i-n '
pone !o2o identi.i!ador de !rea!i-n el !ontador de la transa!!i-n.
Co2o resultado, las !onsultas de le!tura nun!a bloquean los datos. ?ero el
ser:idor debe al2a!enar 2/s in.or2a!i-n ' realiBar !/l!ulos adi!ionales para
todas las opera!iones.
2.4. +ransacciones
(e deno2ina transa!!i-n a un !on@unto de opera!iones ()L que, auto2/ti!a2ente, se
e@e!utan !o2o una Jni!a unidad de traba@o.
El e@e2plo t*pi!o es el de la !uenta ban!aria. (uponga2os que un usuario quiere realiBar
una trans.eren!ia ban!aria entre dos de sus !uentas. El !on@unto de opera!iones ()L a
e@e!utar podr*a ser algo !o2oI
SELECT saldo FROM cuenta !ERE numero"cuenta # $% cuenta origen&
'compro(ar que tiene saldo su)iciente*
SELECT saldo FROM cuenta !ERE numero"cuenta # $% cuenta destino&
'sumar el saldo de destino con la cantidad trans)erida*
+,-.TE cuenta SET saldo # $uevo Saldo !ERE numero"cuenta # $% cuenta
destino&
'restar el saldo de destino con la cantidad trans)erida*
+,-.TE cuenta SET saldo # $uevo Saldo !ERE numero"cuenta # $% cuenta
origen&
,2ag*nate el !aos si esta opera!i-n se detu:iera antes de realiBar el Jlti2o ,4(E#3. (e
5abr*a 5e!5o un abono sin realiBar el !argo. 3a2biCn podr*a o!urrir que, entre la pri2era
le!tura de saldo ' su a!tualiBa!i-n, otra opera!i-n 5ubiera liquidado el saldo de la !uenta.
Miguel Jaque Barbero (mjaqueil!ebenson"com# (&
4atural2ente, los ban!os desean que esta opera!i-n se e@e!ute !o2pleta2ente o no se
e@e!ute en absoluto, pero nun!a que se quede a 2edias =T el 2is2o interCs tene2os los
usuarios si se !a2bia el orden de las a!tualiBa!iones de saldo>.
?ara e:itar esto existen las transa!!iones.
2.4.1. %ro!iedades &'()
Es 5abitual exigir que los gestores de bases de datos rela!ionales superen lo que
se !ono!e !o2o M3est %C,;N, que !onsta de las siguientes propiedadesI
Atomicidad: Las transa!!iones son indi:isibles, o bien se e@e!utan
!o2pleta2ente o no se e@e!utan en absoluto. 4o 5a' tCr2inos 2edios.
Consistencia: La base de datos e:olu!iona de un estado !onsistente
a otro. En ningJn 2o2ento per2ane!e en estados in!onsistentes =!on
transa!!iones a 2edias>. (i una transa!!i-n no se !o2pleta, sus
!a2bios nun!a se re.le@an en la base de datos.
ndependencia
%
: Las opera!iones de una transa!!i-n son
Mnor2al2enteN in:isibles para el resto de transa!!iones 5asta que esta
se !o2pleta.
$ura/ilidad: Kna :eB !o2pletada una transa!!i-n, los !a2bios en
la base de datos son per2anentes ' no pueden perderse =bueno, sal:o si
el dis!o .alla, ob:ia2ente>.
;ebe2os de nue:o seHalar que las transa!!iones no son gratuitas. %portan
seguridad a la progra2a!i-n e:itando tener que aHadir !-digo para el !ontrol de
errores, re!upera!i-n de !a*das, et!. pero a !a2bio requieren un gran !onsu2o de
C?K, 2e2oria ' dis!o en el ser:idor. 3odo esto, debe tenerse en !uenta al diseHar
nuestro siste2a ' e:itarlo !uando nuestra apli!a!i-n no lo requiera.
>iveles de ndependencia
La independen!ia de transa!!iones es algo 2/s !o2pli!ada. El est/ndar
()L de.ine !uatro ni:eles distintos, segJn los datos que resulten :isibles desde
.uera ' desde dentro de una transa!!i-n. (on los siguientesI
-ead Encommitted 9dirty reads;I En este ni:el, las transa!!iones
pueden :er datos 2odi.i!ados por transa!!iones sin ter2inar. Es 2u'
peligroso por la in!onsisten!ia de los datos ' apenas se utiliBa.
-ead CommittedI Es el ni:el por de.e!to en 2u!5os ser:idores.
Las transa!!iones s-lo :en los datos de otras transa!!iones que 5a'an
.inaliBado antes de su ini!io. El proble2a es que este ni:el no garantiBa
la integridad de le!turas repetidas, ' eso, puede dar algJn proble2a
$
.
" En inglCs, el tCr2ino es M,solationN =aisla2iento>. Lo 5e tradu!ido !o2o ,ndependen!ia para 2antener la , de %C,;.
$ ?or e@e2plo, si realiBa2os una transa!!i-n que lea :alores de una tabla ' los inserte en otra por su !la:e pri2aria, puede o!urrir
que, entre a2bas opera!iones, otra transa!!i-n 2odi.ique las !la:es =o in!luso eli2ine algJn ele2ento>, !on:irtiendo en absurda
el resultado de la inser!i-n de la pri2era.
(' Manual de Supervivencia del Administrador de MySQL
-epeata/le -eadI En este ni:el, las .ilas le*das en una transa!!i-n
son bloqueadas 5asta la .inaliBa!i-n de la 2is2a. %unque, poniCndonos
paranoi!os, toda:*a tiene el proble2a de las +ilas +antasmas
5
.
Seriali,a/leI En este ni:el, las transa!!iones se e@e!utan de una en
una, e:itando !ualquier proble2a de integridad, pero redu!iendo al
2*ni2o la !on!urren!ia ' el rendi2iento del ser:idor.
2.,. $lo(ueos
(in e2bargo, es posible que si :arias transa!!iones obtienen se2/.oros sobre los 2is2os
datos, se produB!a un bloqueo.
(uponga2os las siguientes transa!!ionesI
#Transacci/n 0
1E23$
+,-.TE cuenta SET saldo # . !ERE numero"cuenta # $0&
+,-.TE cuenta SET saldo # 1 !ERE numero"cuenta # $4&
COMM3T
#Transacci/n 4
1E23$
+,-.TE cuenta SET saldo # C !ERE numero"cuenta # $4&
+,-.TE cuenta SET saldo # - !ERE numero"cuenta # $0&
COMM3T
Con un po!o de 2ala suerte, la pri2era transa!!i-n bloquear/ los datos de la !uenta 41 '
la segunda los de la 42, !on lo que ninguna podr/ !o2pletar su segunda opera!i-n.
4or2al2ente los gestores de base de datos i2ple2entan siste2as de dete!!i-n de
bloqueos ' ti2eouts. Este es el !aso del 2otor de al2a!ena2iento ,nno;B.
2.-. Motores de Al*acena*iento
%l diseHar una base de datos !on M'()L ser/ ne!esario de!idir quC 2otores de
al2a!ena2iento :a2os a utiliBar.
M'()L dispone, a!tual2ente, de los siguientes 2otores de al2a!ena2ientoI
MySAM: Es el 2otor por de.e!to. Es 2u' r/pido pero no transa!!ional.
nno$#: Es transa!!ional, in!lu'endo integridad re.eren!ial.
Memory 9Feap;: Es una tabla M',(%M, pero al2a!enada en 2e2oria, no en
dis!o. Es toda:*a 2/s r/pida.
Arc&ive: Es una tabla M',(%M, pero !o2pri2ida ' de s-lo le!tura.
M-:?MySAM: Es una agrega!i-n de tablas M',(%M. Las tablas agregadas
deben ser exa!ta2ente iguales.
(uponga2os que una transa!!i-n realiBa dos !onsultas sobre los 2is2os datos =por e@e2plo, D&E#E aW10>. Las .ilas le*das por
la pri2era !onsulta son bloqueadas. ?ero si antes de la segunda !onsulta, otra transa!!i-n insertara en la tabla nue:as .ilas que
!u2plieran la !ondi!i-n, estas no 5abr*an sido bloqueadas en la pri2era !onsulta =porque no exist*an> ' el resultado de la
segunda !onsulta ser*a distinto del de la pri2era. % estas .ilas Mque apare!en repentina2enteN se les deno2ina +ilas +antasma.
,nno;B resuel:e este proble2a bloqueando el siguiente :alor de la !la:e pri2aria de la tabla.
Miguel Jaque Barbero (mjaqueil!ebenson"com# ,)
CSG: Es una tabla que se al2a!ena en un .i!5ero de :alores separados por !o2as.
28$8-A<8$: (e trata de una tabla que, real2ente, reside en otro ser:idor
M'()L.
#lac'&oleI Esta es una base de datos en la que todo lo que 2etes, desapare!e.
4atural2ente es posible utiliBar distintos 2otores en una 2is2a base de datos, in!luso
pueden ser utiliBados en una 2is2a transa!!i-n =!on las !onsidera!iones que se exponen
2/s adelante>.
;esgra!iada2ente, la de!isi-n !orre!ta depende en gran parte del uso .uturo que tendr/ la
base de datos. T eso, suele ser di.*!il saberlo !on exa!titud durante el diseHo.
;e todas .or2as, estos son algunos de los !riterios a !onsiderarI
2.*.1. ransacciones y 'oncurrencia
(i :a2os a ne!esitar transa!!iones ' alta !on!urren!ia de usuarios,
probable2ente ,nno;B ser/ la 2e@or op!i-n. Es de!ir, que obtendre2os 2e@ores
!ondi!iones de rendi2iento si las tablas que se :a'an a :er in:olu!radas
.re!uente2ente en !onsultas transa!!iones ' que su.ran una alta !on!urren!ia de
usuarios se basan en el 2otor ,nno;B.
(i la !on!urren!ia no es tan alta, pero segui2os ne!esitando transa!!iones, tanto
,nno;B !o2o B;B pueden ser la solu!i-n.
El 2otor M',(%M no soporta transa!!iones. ?ero si no las ne!esita2os,
M',(%M ser/ !on toda probabilidad la 2e@or op!i-n.
2.*.2. 'o!ias de Seguridad
La realiBa!i-n de !opias de seguridad ta2biCn !ondi!iona la ele!!i-n de tablas.
(i pode2os detener peri-di!a2ente la base de datos para realiBarlas, !ualquier
2otor ser:ir/. ?ero si debe2os realiBarlas Men !alienteN la ele!!i-n ser/ 2u!5o 2/s
!o2pli!ada.
%bordare2os este asunto en el !ap*tulo de Copias de (eguridad.
2.*.3. 'aracter+sticas Es!eciales
?or Jlti2o, las !ara!ter*sti!as espe!iales de nuestra apli!a!i-n pueden obligarnos
a re!urrir a un tipo deter2inado de 2otor de al2a!ena2iento.
En !on!reto, si nuestra apli!a!i-n depende de la !apa!idad para !ontar
r/pida2ente el nJ2ero de registros de una tabla =SELECT CO+$T'5* FROM>
re!urrire2os a M',(%M, que sie2pre sabe !uantos registros tiene sin ne!esidad de
!ontarlos. (in e2bargo, ,nno;B debe realiBar la !uenta.
%s* 2is2o, re!urrire2os a M',(%M si ne!esita2os realiBar e.i!iente2ente
bJsquedas por texto !o2pleto =!ERE notas L36E 78999>.
?ero sin e2bargo, ,nno;B ser/ la solu!i-n en los !asos en los que ne!esite2os
disponer de integridad re.eren!ial.
,( Manual de Supervivencia del Administrador de MySQL
2.*.4. ,esumen de 'aracter+sticas
La siguiente tabla resu2e las !ara!ter*sti!as de los 2otores de al2a!ena2ientoI
Caracterstica MySAM Memory #$# nno$#
3ransa!!iones 4o 4o (* (*
7ranularidad 3abla 3abla ?/gina =+9B> Lila
%l2a!ena2iento Li!5eros
(eparados
En
Me2oria
Kn Li!5ero
por 3abla
3ablespa!e
6
4i:eles de %isla2iento 4inguno 4inguno #ead
Co22ited
3odos
Lor2ato ?ortable (* 4/% 4o (*
,ntegridad #e.eren!ial 4o 4o 4o (*
Cla:e ?ri2aria !on ;atos 4o 4o (* (*
Ca!5C 4o (* (* (*
6 Kn Mtablespa!eN =espa!io de tabla en inglCs> es un /rea !ontinua de dis!o que es gestionada dire!ta2ente por el gestor de base de
datos para al2a!enar sus datos.
,3 Manual de Supervivencia del Administrador de MySQL
Captulo 3. $enc.*ar/in#
3.1. La 0ecesidad del $enc.*ar/in#
#eal2ente, !o2o ad2inistrador de bases de datos, s-lo tienes dos op!ionesI o esperas a
que algo :a'a 2al para lanBarte a arreglarlo a toda prisa, o te preparas analiBando tus
bases de datos para !ono!er sus l*2ites ' estar preparado.
La pri2era op!i-n es la 2/s !-2oda. La segunda, aunque ideal, requiere de2asiado
tie2po ' no garantiBa resultados... Uo s*V
La di.eren!ia est/ en si quieres dor2ir tranquilo por las no!5es o no. 1ea2os !o2o
puedes !onseguir !on!iliar el sueno ' :i:ir tranquilo sabiendo que tus bases de datos no
estallar/n de la no!5e a la 2aHana.
3.1.1. -.u/ !uedo es!erar0
Con una buena estrategia de Ben!52ar6ing podr/s saber !osas !o2oI
U)uC tie2po de respuesta tendr/n 2is !onsultas !uando el nJ2ero de
registros se 2ultiplique por 10V
UC-2o 2e@orar/ el siste2a si in!re2ento la 2e2oria #%MV
Este nue:o ser:idor... Ues 2/s r/pido que el anteriorV UCu/ntoV
U)uC pasar*a si des5abilito la !a!5CV UT si la in!re2entoV
U)uC es 2/s r/pido, utiliBo un sele!t anidado o dos sub!onsultasV
El ben!52ar6ing !onsiste en plantearse preguntas, !o2parar situa!iones ' sa!ar
!on!lusiones. %5ora, el ob@eti:o es 5a!erlo de .or2a sen!illa.
3.2. 1strate#ias
En pri2er lugar, debe2os distinguir entre dos tipos de testI tests de rendi2iento ' tests de
estrCs.
3.2.1. ests de ,endimiento
(u ob@eti:o es !o2parar entre dos op!iones. UEs 2e@or la !on.igura!i-n % o la
BV U8btendre2os 2e@or rendi2iento !on la !onsulta % o !on la BV
Con este tipo de tests, no nos i2porta tanto el resultado =Q segundos> !o2o la
!o2para!i-n =la op!i-n % es 20 :e!es 2/s r/pida que la B>.
3.2.2. ests de Estr/s
?ero los tests de rendi2iento no nos per2iten saber !-2o se !o2portar/ el
siste2a en situa!iones reales =o 5ipotCti!as>. ?ara eso ne!esita2os los tests de
estrCs.
En los tests de estrCs bus!a2os el resultado absoluto. UCu/l es el tie2po de
Miguel Jaque Barbero (mjaqueil!ebenson"com# ,*
respuesta !on 100 :e!es 2/s registros que los a!tualesV UT si tu:iCra2os pi!os de
2 usuarios si2ult/neosV
3.2.3. 'onsideraciones
%2bos tipos de tests son ne!esarios. ?ero antes, toda:*a tene2os que estable!er
algunas !onsidera!iones i2portantesI
-eali,a los Cam/ios de Eno en Eno. ;e lo !ontrario, no sabr/s que es
lo que 5a ido bien o 2al.
Prue/a :radualmente. 4o in!re2entes los :alores brus!a2ente. &aB
pequeHos !a2bios ' obser:a las tenden!ias. En lugar de tripli!ar el nJ2ero
de registros, sube un 10X !ada :eB. En lugar de a@ustar los bu..ers en un
200X, 5aBlo de 10X en 10X.
-epite Siempre los <ests. ,ndependiente2ente de lo bien o 2al que
5a'an salido los resultados, rep*telos. ?uede que ol:idaras desa!ti:ar el
!ron, o que algJn pro!eso ini!iara una tarea intenso traba@o de dis!o...
asegJrate repitiendo los tests al 2enos !uatro :e!es.
Etili,a $atos -eales. ;e lo !ontrario, los resultados no ser/n rele:antes.
(i tu base de datos espera que tenga 2 2illones de registros, Ude quC te sir:e
probar !on 2.000V )uiB/s tu ser:idor pueda !a!5ear 2.000 registros '
o.re!er 2agn*.i!os tie2pos de repuesta, pero puede !olapsarse !on 00.000.
>o te Pases con los Clientes. )uiB/s 2ole 2u!5o saber que tu ser:idor
puede aguantar 100 !lientes si2ult/neos. ?ero ser/ una pCrdida de tie2po si
no pre:Cs tener 2/s de 10.
Separa el Cliente del Servidor. (i utiliBas la 2is2a 2/quina para
lanBar los tests ' albergar el ser:idor, puede que los resultados se :ean
in.luen!iados por el !onsu2o de re!ursos del !liente.
3.3. Herra*ientas
Existen :arias 5erra2ientas que te a'udar/n al realiBar ben!52ar6ing.
3.3.1. 1yS.L 2enc3mar4 Suite
3odas las distribu!iones de M'()L :ienen !on un !on@unto est/ndar de tests. Est/n
es!ritos en perl ' puedes en!ontrarlos en el subdire!torio sqlGben!5 del dire!torio de
instala!i-n
7
.
Esta suite no est/ diseHada para !o2parar distintas !on.igura!iones de un 2is2o ser:idor,
sino para !o2parar el rendi2iento de distintos ser:idores. ?or e@e2plo, te a'udar/ a
de!idir !u/l es la arquite!tura 5ardEare 2/s !on:eniente para tu ser:idor. T !o2o
ta2biCn puede e@e!utarse para otros ser:idores de base de datos no M'()L, !o2o
%dabas, 8ra!le, ;B2, M( ()L, et!. te puede ser:ir para !o2probar las di.eren!ias.
Estos tests no apro:e!5an las posibilidades del 2ultipro!eso.
7 En ;ebian gnu/Linux este es /usr/s5are/2'sql/sqlGben!5
,5 Manual de Supervivencia del Administrador de MySQL
La .or2a 2/s !-2oda de e@e!utarlos es 2ediante el !o2andoI
perl run!lltests ser"er#$yS%L user#r&&t p!ss'&rd#secret!
?ero, si lo pre.ieres, puedes e@e!utar s-lo los tests que te interesen =!onexi-n, insert,
sele!t, transa!!iones, et!.>.
La e@e!u!i-n !onsu2e 2u!5a C?K ', en algunos de ellos, ta2biCn es 2u' intensi:a en
dis!o.
Los resultados se guardan en el subdire!torio &utput ' dispone de 5erra2ientas para
auto2atiBar la !o2para!i-n de resultados.
3.3.2. Su!er5smac4
(e trata de una 5erra2ienta 2u!5o 2/s !o2pli!ada, pero que per2ite so2eter al ser:idor a
tests de !arga !on :arios usuarios.
Lun!iona para M'()L ' para ?ostgre()L. ,n!luso tiene un soporte 2*ni2o para 8ra!le.
Lue ini!ial2ente desarrollada por un e2pleado de M'()L, %.B. =(as5a ?a!5e:>. ;espuCs
pas- a 2anos de Jere2' YaEodn', un !onsultor ' es!ritor espe!ialiBado en M'()L ',
a!tual2ente, la 2antiene 3on' Bour6e, un ad2inistrador de siste2as neo'or6ino.
En de.initi:a, que 5o' el !-digo de (uperGs2a!6 est/ en 5ttpI//:egan.net/ton'/supers2a!6/
pero puede que 2aHana tengas que bus!arlo algo 2/s.
nstalacin
3ras ba@ar el !-digo, la instala!i-n es 2u' sen!illa, utiliBa auto!on. de
74K.
() t!r *"+f supersm!c,"ers-.n.t!r./+
() cd supersm!c,"ers-.n
() ./c&nf-/ure 0'-t1mysql
() m!,e
() su
2) m!,e -nst!ll
81ecucin
E@e!utar los tests de superGs2a!6 es sen!illo. ?or e@e2plo, el !o2ando
() supersm!c, upd!teselect.sm!c, 34 54444
si2ula "0 usuarios si2ult/neos !ada uno e@e!utando 10.000 :e!es el test
updateGsele!t.
La es!ritura de los tests requiere algo 2/s de 5abilidad. Con:iene leer el
3utorial in!luido ' !onsultar los tests de e@e2plo.
(uperGs2a!6 ta2biCn in!lu'e la 5erra2ienta genGdata, que .a!ilita 2u!5o la
!rea!i-n de datos de e@e2plo para !argar las bases de datos.
Miguel Jaque Barbero (mjaqueil!ebenson"com# ,$
3.3.3. Soluciones & 1ano
?ero si real2ente quere2os probar el rendi2iento de nuestra base de datos !on intensidad,
tendre2os que pensar en desarrollar nuestro propio !on@unto de pruebas.
(uperGs2a!6 puede ser una solu!i-n, pero es 5abitual que los ad2inistradores de bases de
datos progra2en ' e@e!uten sus propios s!ripts de prueba.
,% Manual de Supervivencia del Administrador de MySQL
Captulo 4. Ad*inistracin
?ara la ad2inistra!i-n de un ser:idor M'()L dispone2os de dos tipos de 5erra2ientas.
?or un lado est/n las 5erra2ientas de !onsola, que se e@e!utan !o2o !o2andos del
siste2a operati:o ' tienen la gran :enta@a de que pueden e@e!utarse a tra:Cs de una si2ple
!onexi-n ss5. (in e2bargo, puede resultar !o2pli!ado re!ordar sus op!iones ' su
sintaxis.
?or otro lado est/n las 5erra2ientas gr/.i!as, 2u!5o 2/s intuiti:as ' :istosas, pero que
pueden resultar inJtiles !uando no dispone2os de nuestro entorno de traba@o 5abitual o
.allan otros ele2entos =entorno gr/.i!o, !o2uni!a!iones, et!.>. Claro, que suele ser en
estas situa!iones !uando un ad2inistrador de siste2as tiene 2/s traba@o.
%s* que, ne!esita2os aprender a 2ane@ar los dos tipos.
4.1. Co*andos
Los !o2andos de ad2inistra!i-n de M'()L est/n disponibles tras instalar el paquete
2'sqlG!lient. 4o ol:ides que todas ellas :ienen !on su !orrespondiente p/gina de Manual,
a!!esible 2ediante m!n n&m6re7c&m!nd&. ?r/!ti!a2ente ningJn ad2inistrador, por
a:anBado que sea, re!uerda la sintaxis exa!ta de !ada !o2ando ni, 2u!5o 2enos, todas
sus op!iones.
%s* que, Zno te !ortes[ !onsulta el 2anual antes de e@e!utar el !o2ando para asegurarte.
Los prin!ipales !o2andos de ad2inistra!i-n de M'()L sonI
4.1.1. mys6l
,ni!ia una sesi-n de !onsola en M'()L.
Este !o2ando o.re!e un intCrprete de ()L en l*nea. ?er2ite lanBar !onsultas,
2odi.i!ar tablas, !rear bases de datos, !a2biar per2isos... pr/!ti!a2ente todo,
desde una sen!illa l*nea de !o2andos.
%l ini!iar, se le puede indi!ar tanto la base de datos a la que quere2os
!one!tarnos !o2o el usuario ' su !ontraseHa. ?or e@e2plo,
mysql -u root -p (anco
abrir/ la sesi-n !one!t/ndonos !o2o root a la base de datos Mban!oN. El
par/2etro p indi!a que el a!!eso est/ protegido por !ontraseHa ' el !o2ando nos la
pedir/ antes de intentar !one!tar.
El !o2ando 2'sql se utiliBa .re!uente2ente para realiBar s!ripts que traba@en
!on la base de datos. ?ara ello, se aHade !o2o entrada al !o2ando un .i!5ero que
!ontenga senten!ias ()L. ?or e@e2plo, el !o2ando
Miguel Jaque Barbero (mjaqueil!ebenson"com# ,&
mysql -u root --pass:ord#di);cil (anco < (anco9sql
abrir/ la sesi-n !one!t/ndonos a la base de datos ban!o !o2o root ' utiliBando la
!la:e Mdi.*!ilN =en este !aso no nos la pedir/>. El !o2ando to2ar/ !o2o entrada el
.i!5ero ban!o.sql que podr*a ser un !on@unto de senten!ias ()L para !rear las tablas
e insertar los datos en esa base de datos.
4.1.2. mys6ladmin
&a' algunas tareas que resultan in!-2odas de realiBar en ()L. E in!luso otras,
po!as, que no pueden 5a!erse dire!ta2ente !on ()L.
?ara realiBarlas dispone2os de 2'sqlad2in.
Este !o2ando per2ite !rear ' eli2inar bases de datos =ta2biCn puede 5a!erse
!on C#E%3E/;#8? ;%3%B%(E>, :er el estado del ser:idor =esto no puede
5a!erse !on ()L>, !a2biar la !ontraseHa del ad2inistrador =root>, o in!luso
arran!arlo ' !errarlo.
4.1.3. myisamc34
?ropor!iona in.or2a!i-n sobre las tablas de tipo M',(%M ' per2ite
!o2probarlas, repararlas ' opti2iBarlas.
2'isa2!56 se utiliBa !on el ser:idor detenido, pues realiBa sus .un!iones sobre
los .i!5eros que sir:en de al2a!ena2iento l-gi!o de las tablas e *ndi!es. Estos
.i!5eros, que est/n en el dire!torio /:ar/lib/2'sql/no2bre\base\datos =en ;ebian>,
tienen extensiones .MT; para las tablas ' .MT, para los *ndi!es>.
2'isa2!56 utiliBa los no2bres de .i!5eros =op!ional2ente !on ]> !o2o
par/2etro, no utiliBa el no2bre de la base de datos ni de las tablas.
4.1.4. mys6lc3ec4
Este !o2ando ta2biCn per2ite !o2probar, reparar ' opti2iBar las tablas. ?ero lo
5a!e !on el ser:idor en 2ar!5a.
En este !aso, los par/2etros que utiliBa s* son los no2bres de las bases de datos
' las tablas del ser:idor, ' no los .i!5eros de al2a!ena2iento que los soportan.
2'sql!5e!6 .un!iona !on distintos tipos de 2otores de al2a!ena2iento, sie2pre
que estos soporten los !o2andos C&EC9 3%BLE, #E?%,# 3%BLE, %4%L,YE
3%BLE ' 8?3,M,YE 3%BLE que est/n real2ente detr/s del !o2ando.
4.1.7. mys6ldum! y mys6lim!ort
Estos son dos de los !o2andos 2/s utiliBados.
2'sqldu2p per2ite realiBar !opias de seguridad de una base de datos o de un
!on@unto de tablas generando un .i!5ero de texto ()L. ;ispone de 2Jltiples
op!iones para aHadir o eli2inar senten!ias de !rea!i-n de tablas ' base de datos,
aHadir senten!ias de drop pre:ias, bloquear las tablas, et!.
La otra !ara de la 2oneda es 2'sqli2port que, natural2ente, !arga una .i!5ero
,' Manual de Supervivencia del Administrador de MySQL
de texto ()L. #eal2ente 2'sqli2port no es 2/s que un inter.aB al !o2ando ()L
L8%; ;%3% ,4L,LE.
%de2/s de los des!ritos aqu*, 5a' otros 2u!5os !o2andos de ad2inistra!i-n que pueden
.a!ilitar las tareas de ad2inistra!i-n en un 2o2ento dado.
4.2. iste*as de Ad*inistracin 2r%"icos
Las 5erra2ientas de ad2inistra!i-n gr/.i!a nos .a!ilitan la labor de ad2inistra!i-n
5a!iCndola algo 2/s 5u2ana.
1a2os algunas de ellas ' las prin!ipales .un!iones que dese2peHan.
4.2.1. 1yS.L &dministrator
(e trata de una apli!a!i-n que nos per2ite :er el estado de nuestro ser:idor en
tie2po de e@e!u!i-n. ?uede resultar 2u' Jtil para identi.i!ar proble2as de
rendi2iento.
La apli!a!i-n se lanBa !on el !o2ando 2'sqlGad2in ' presenta un inter.aB
gr/.i!o !on distintas se!!iones.
% parte de .un!iones de ad2inistra!i-n =arran!ar/parar el ser:idor, realiBar
!opias de seguridad ' gestionar usuarios>, la !ara!ter*sti!a 2/s apre!iada de
M'()L %d2inistrator es la posibilidad de :er ' !rear gr/.i!os del estado del
ser:idor.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 3)
Creacin de :r=0icos
(in lugar a dudas, una de las op!iones 2/s potentes de M'()L
%d2inistrator es la posibilidad de !rear gr/.i!os de rendi2iento a 2edida.
1a2os a :er !-2o se 5a!e,
1. (ele!!iona2os las :ariables que quere2os 2onitoriBar. ?ode2os
es!oger !ualquiera de la pestaHa de :ariables de estado =M(tatus
1ariablesN> o de la pestaHa de :ariables del ser:idor =M(er:er
1ariablesN>. %nota los no2bres de las :ariables, te 5ar/n .alta.
2. Crea2os un grupo. ?ara ello :a2os a la pestaHa en la que quere2os
insertar el gr/.i!o =por e@e2plo MMe2or' &ealt5N> ', pulsando !on el
bot-n de la dere!5a, sele!!iona2os M%dd 7roupN. 8p!ional2ente,
pode2os !rear nuestras propias p/ginas de gr/.i!os.
". Crea2os un gr/.i!o. ?ara ello, pulsa2os !on el bot-n dere!5o sobre
el grupo que 5e2os !reado. 3endre2os que elegir el tipo de gr/.i!o, su
no2bre ', sobre todo, la .-r2ula que quere2os :isualiBar.
$. Crea!i-n de la L-r2ula. La .-r2ula se !rea es!ribiendo en el
!orrespondiente !uadro de texto. Los no2bres de las :ariables de
M'()L se ponen entre !or!5etes. (i quere2os el :alor relati:o a la
Jlti2a e:alua!i-n =por segundo>, antepondre2os a la .-r2ula el a!ento
!ir!un.le@o =^>. ?ode2os utiliBar ta2biCn nJ2eros ' operadores
2ate2/ti!os.
T listo.
3( Manual de Supervivencia del Administrador de MySQL
4.2.2. 1yS.L .uery 2rowser
(e trata de una apli!a!i-n que nos a'uda a de.inir, e@e!utar senten!ias ()L as*
!o2o a analiBar los resultados produ!idos.
1a2os !on algunas de las opera!iones que pode2os realiBar.
Creacin Gisual de Consultas
?ara !rear :isual2ente una !onsulta realiBa2os los siguientes pasosI
1. Elegi2os la tabla. ?ara eso, pode2os arrastrarla 5asta el /rea de
!onsulta o 5a!er doble !li!6.
2. %Hadir otras tablas. ?ode2os aHadir otras tablas arrastr/ndolas '
solt/ndolas en el /rea de !onsulta que nos interese. 8bser:a !o2o las
op!iones del /rea de !onsulta apare!en ba@o esta al lle:ar el rat-n.
". %Hadir !olu2nas. 3a2biCn arrastrando, pode2os aHadir !olu2nas a
las distintas op!iones de !onsultaI (ELEC3, D&E#E, 8#;E#,
&%1,47, 7#8K?...
$. Es!ribe lo que ne!esites. ?uedes es!ribir dire!ta2ente en el /rea de
!onsulta, por e@e2plo, para poner los :alores de !o2para!i-n de la
!l/usula D&E#E.
. E@e!uta la !onsulta pulsando el bot-n MExe!uteN.
6. ?ara :er 2e@or los resultados, puedes aHadir paneles de resultados '
di:idirlos :erti!al u 5oriBontal2ente.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 3,
Creacin de Gistas Maestro@$etalle
1a2os a :er !-2o !rear la t*pi!a :ista MaestroG;etalle !on M'()L )uer'
BroEser.
1. Crea2os la !onsulta Maestro. 3al ' !o2o lo 5i!i2os en el e@e2plo
anterior, in!lu'endo las !olu2nas que quera2os :isualiBar en los
resultados.
2. E@e!uta2os la !onsulta.
". ;i:idi2os 5oriBontal2ente el panel de resultados =bot-n dere!5o>.
$. Crea2os la !onsulta de detalle en el /rea de !onsulta. ?ero tene2os
que rela!ionar a2bas !onsultas aHadiendo las !olu2nas ne!esarias a la
!lausula D&E#E. La Jni!a di.eren!ia es que el :alor a igualar lo
sele!!iona2os del panel de par/2etros =M?ara2sN en la parte ba@a de la
pantalla>.
. 8@o, para poder sele!!ionar par/2etros, debe2os tener sele!!ionado
el panel de detalle. %s* se 2ostrar/n los par/2etros M;in/2i!osN
disponibles en ese panel. (i no los pudieras aHadir arrastrando, basta
!on que pongas su no2bre pre!edido de dos puntos =I> en la !lausula
D&E#E.
6. 1uel:e a e@e!utar la !onsulta ' 'a podr/s na:egar entre los
resultados. ?ulsando sobre un resultado de la !onsulta 2aestra, :ere2os
los detalles en el panel de detalle.
33 Manual de Supervivencia del Administrador de MySQL
Comparar -esultados
?ode2os !o2parar resultados ./!il2ente. Esto nos per2itir/ !o2parar
./!il2ente !onsultas si2ilares. ?ara ello, los resultados deben tener !olu2nas
!on el 2is2o no2bre ' las tablas sub'a!entes deben tener !la:es pri2arias
de.inidas.
1. E@e!uta2os la pri2era !onsulta.
2. ;i:idi2os :erti!al2ente el panel de resultados ' e@e!uta2os en Cl la
segunda !onsulta.
". (ele!!iona2os la opera!i-n MCo2pareN del 2enJ M)uer'N.
$. #e:isa2os los resultados. M'()L )uer' BroEser 5abr/ aHadido
algunas a'udasI
. ;esplaBa2iento sin!roniBado en a2bos paneles.
6. Los resultados que s-lo estCn presentes en un panel, se resaltar/n en
un !olor ' se a!o2paHar/n de una .ila :a!*a, resaltada en otro !olor en
el panel !ontrario.
7. Cuando a2bas .ilas s-lo di.ieran en alguna !olu2na, esta se
resaltar/.
;e esta .or2a, podre2os na:egar !-2oda2ente por los resultados ' :er las
di.eren!ias.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 3*
8ditar -esultados
3a2biCn pode2os na:egar por un resultado ' 2odi.i!ar !-2oda2ente sus
:alores. ?ara elloI
1. E@e!uta2os la !onsulta.
2. ?ulsa2os el bot-n editar =en la barra de 5erra2ientas in.erior>. 4o
estar/ disponible si !ada .ila del resultado no es identi.i!able =pon !la:e
pri2aria>.
". 4a:ega2os por los resultados utiliBando el rat-n o las .le!5as de
desplaBa2iento. Estas nos per2itir/n ta2biCn llegar a !ada !olu2na.
$. Edita2os los resultados pulsando la barra o 5a!iendo doble !li!6.
. ?uedes aHadir .ilas =al .inal del resultado> o borrarlas !on el 2enJ de
!ontexto =bot-n de la dere!5a>.
6. %pli!a o des!arta los !a2bios !on los botones de la barra in.erior.
4.2.3. !3!myadmin
p5p2'ad2in es una 5erra2ienta distinta a las
anteriores. La raB-n es que, en lugar de instalarse en
el !liente =!o2o las anteriores>, se instala en el
ser:idor.
p5p2'ad2in es una apli!a!i-n Eeb que .a!ilita la
gesti-n de un ser:idor M'()L. %l instalarse en el
ser:idor
+
per2ite a!!eder a ella desde !ualquier
ordenador utiliBando un na:egador Eeb.
El uso es 2u' sen!illo, ' per2ite exa2inar la
estru!tura ' !ontenidos de la tablas, lanBar !onsultas,
5a!er !argas ' des!argas 2asi:as, bJsquedas en los
datos, et!.
(u uso es 2u' intuiti:o ' por eso se 5a 5e!5o 2u' popular.
+ 3C!ni!a2ente puede instalarse sobre otro ser:idor !on a!!eso al ser:idor de base de datos, pero lo 5abitual es instalarlo en el
2is2o ser:idor que alberga la base de datos.
35 Manual de Supervivencia del Administrador de MySQL
4.2.4. 1yS.L Wor4benc3
Es una apli!a!i-n para el diseHo de bases de datos !on M'()L. % .e!5a de 5o'
se en!uentra toda:*a en .ase beta, pero .un!iona bastante bien.
3iene, 2/s o 2enos, la 2is2a .un!ionalidad que ;B;esigner.
4.2.7. )2)esigner
(e trata de una apli!a!i-n desarrollada por LabLor!e =EEE..ab.or!e.net>. (e
trata de una apli!a!i-n :isual para el 2odelado, diseHo ' !rea!i-n de 2odelos de
datos.
?er2ite por tanto la
de.ini!i-n de tablas,
!olu2nas, rela!iones, *ndi!es,
et!. ' la !rea!i-n de bases de
datos en el ser:idor partiendo
de los 2odelos de.inidos.
?ero ta2biCn in!lu'e un
2odo de Mingenier*a in:ersaN
que analiBa una base de datos
existente para !rear su
2odelo.
3raba@a !on M'()L =para
la que est/ opti2iBado>,
8ra!le ' bases de datos
8;BC.
3% Manual de Supervivencia del Administrador de MySQL
Captulo ,. e#uridad
,.1. Conceptos de e#uridad
7.1.1. 'uentas
Esta2os a!ostu2brados a que una !uenta de a!!eso a un siste2a se !o2ponga de usuario
' !ontraseHa. ?ero en M'()L tendre2os que a!ostu2brarnos a aHadir ta2biCn el M5ostN,
el ordenador desde el que se !one!ta el usuario.
?ara M'()L, un usuario M@uanN que se !one!ta desde la 2/quina Mlo!al5ostN, es
total2ente di.erente de otro usuario M@uanN que se !one!ta desde la 2/quina
Munited\!ra6ers.!o2N. T pueden tener distintos per2isos de a!!eso.
Z8J8[ (i una !uenta queda identi.i!ada por su usuario/!la:e/5ost, esto no in!lu'e la base
de datos. Es de!ir, que la !uenta @uan/2i!la:e/lo!al5ost tiene la 2is2a !la:e de a!!eso
Zpara todas las bases de datos del ser:idor[ ?ero que tenga la 2is2a !la:e de a!!eso, no
signi.i!a que tenga los 2is2os per2isos.
7.1.2. 'om!robaciones
?ara !ada !onexi-n, M'()L realiBa tres tipos de !o2proba!ionesI
Autenticacin
- ./ t0 1qui2n eres34 -
?ara !ada nue:a !onexi-n, M'()L !o2prueba la !uenta en base al no2bre de
usuario, la !la:e ' el 5ost de origen. Esta in.or2a!i-n deter2inar/ los
pri:ilegios del usuario.
Autori,acin
- .1Qu2 es lo que puedes 5acer34 -
?ara !ada opera!i-n, M'()L !o2prueba que el usuario tiene per2iso para
realiBarla. 4o es lo 2is2o tener per2iso para !argar datos de un .i!5ero =L,LE>
datos que para !errar =(&K3;8D4> el ser:idor.
Control de Acceso
- .1A qu2 datos puedes acceder34 -
?ara !ada opera!i-n, M'()L !o2prueba que el usuario tiene per2iso para :er
o 2odi.i!ar las tablas ' !olu2nas in:olu!radas.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 3&
7.1.3. %ri8ilegios
En M'()L pode2os utiliBar dos tipos de pri:ilegiosI ?ri:ilegios sobre ob@etos de la base
de datos =rela!ionados !on el !ontrol de a!!eso> ' ?ri:ilegios 7lobales =rela!ionados !on
la autoriBa!i-n>.
Privile(ios so/re +/1etos
Cada !uenta de a!!eso puede tener pri:ilegios distintos para los di.erentes
ob@etos del ser:idor.
Los ob@etos disponibles sonI
Bases de ;atos
3ablas
Colu2nas
<ndi!es
T, para !ada uno de ellos, el usuario puede tener !on!edidos o denegados
pri:ilegios. %lgunos de estos sonI (ele!t, ,nsert, Kpdate, ,ndex, ;elete, ;rop,
,ndex, %lter, Create, 7rant, #e.eren!es... 3a2biCn 5a' algunos no2bres de
per2isos que agrupan a otros. Este es el !aso de %ll ' Ksage.
3en en !uenta que los pri:ilegios son booleanos. 8 se tienen o no se tienen.
4o 5a' :alores inter2edios =no sC si lo tiene>, ni nu2Cri!os =tiene un per2iso
de ">.
:lo/ales
?ara !o2probar las autoriBa!iones de opera!i-n M'()L dispone de
pri:ilegios globales. Lrente a los anteriores, que se apli!an a ob@etos del
ser:idor =datos>, los pri:ilegios globales se apli!an a todo el ser:idor. (on los
siguientesI
-eload: Mu' ino.ensi:o, per2ite al usuario realiBar LLK(&.
S&utdo6n: ?ara !errar el ser:idor.
Process: ?er2ite :er la lista de pro!esos =(&8D ?#8CE((L,(3> '
2atar =9,LL> sus pro!esos. El a!!eso a la lista de pro!esos per2ite :er
los datos de las 2is2as, in!lu'endo las !la:es de a!!eso.
2ile: ?er2ite !argar datos de .i!5eros =L8%; ;%3% L,LE>.
Super: ?er2ite 2atar !ualquier pro!eso =del ser:idor de base de
datos>, in!luso los que no perteneB!an al usuario.
7.1.4. ablas (n8olucradas
M'()L guarda la in.or2a!i-n de per2isos en la base de datos M2'sqlN, en distintas
tablas.
(on las siguientesI
user: Contiene los pri:ilegios globales ' las !la:es en!riptadas. Es responsable de
3' Manual de Supervivencia del Administrador de MySQL
deter2inar que 5osts ' usuarios pueden !one!tarse al ser:idor.
&ost: %signa pri:ilegios por 5ost, independiente2ente del usuario. 4o es
2odi.i!ada por los !o2andos de 7#%43 ' #E189E, as* que 5a' que 2ane@arla
Ma 2anoN.
d/: Estable!e los pri:ilegios para bases de datos.
ta/les?priv: Estable!e los pri:ilegios para !ada tabla. 4o suele ser utiliBada.
columns?priv: Estable!e los pri:ilegios para !ada !olu2na de !ada tabla. 4o
suele ser utiliBada.
Aplicacin
En pri2er lugar, M'()L !o2prueba la tabla user para de!idir si a!epta o no
una deter2inada !onexi-n.
?ara !ada !onsulta =de las !onexiones a!eptadas, ob:ia2ente>, M'()L
apli!a los per2isos Men !as!adaN.
Es de!ir, en pri2er lugar !onsulta la tabla user. Los per2isos que a5*
en!uentra los MpasaN a la tabla a la tabla 5ost. El resultado de esta, es pasado a
db, de a5* a tables\pri: ' de a5* a !olu2ns\pri:.
Los !riterios de apli!a!i-n =2at!5ing> son distintos para !ada tablaI
1. En user se utiliBan 5ost, user ' passEord.
2. En 5ost se utiliBan 5ost ' db.
". En db se utiliBan user, 5ost ' db.
$. En tables\pri: se utiliBan user, 5ost, db ' table.
. En !olu2ns\pri: se utiliBan user, 5ost, db, table ' !olu2n.
La apli!a!i-n de 5osts es 2/s espe!*.i!a. Co2o es posible utiliBar
!o2odines para esta regla =X
0
>, podr*a o!urrir que :arias entradas de la tabla
!u2plieran los !riterios ', por lo tanto, sus per2isos .ueran apli!ables. M'()L
resuel:e el proble2a estable!iendo una regla de apli!a!i-nI las entradas 2/s
genCri!as se apli!ar/n pri2ero =2enor pre.eren!ia>.
Mantenimiento
3C!ni!a2ente es posible dar, quitar ' 2odi.i!ar per2isos, tanto sobre
ob@etos !o2o globales, a!!ediendo a estas tablas ' lanBando !onsultas
=,4(E#3, K?;%3E...>. ;e 5e!5o, 2u!5os ad2inistradores lo 5a!en as*.
?ero no es la .or2a re!o2endada.
?odr*a o!urrir que, en un .uturo, se 2odi.i!ara la estru!tura de estas tablas.
8 podr*as !o2eter un pequeHo error, pasar por alto una rela!i-n, et!. !on
!onse!uen!ias i2pre:isibles para la seguridad de tu ser:idor.
0 Los 5osts pueden de.inirse por no2bre =@uan.2ido2inio.!o2>, por ,? =102.16+.2.1$> ' por subredes
=102.16+.2.0/2.2.2.0>. En las de.ini!iones por no2bre pueden utiliBarse !o2odines =\ para un !ar/!ter ' X para !ualquier
nJ2ero de !ara!teres>. ?or e@e2plo X.2ido2inio.!o2 o in!luso X para !ualquier 5ost.
Miguel Jaque Barbero (mjaqueil!ebenson"com# *)
En lugar de @ug/rtela, puede ser pre.erible que !onoB!as los !o2andos
7#%43 ' #E189E de la siguiente se!!i-n.
,.2. entencias 2RA0+ y R1'341
?ode2os abstraernos de las tablas de per2isos de M'()L utiliBando las senten!ias
7#%43 ' #E189E. Estas se en!argar/n de introdu!ir los :alores ade!uados en las
tablas =sal:o en 5ost> !on una sintaxis 2/s 5u2ana.
7.2.1. 'omando $,&9
(e utiliBa para dar pri:ilegios. (u sintaxis es la siguienteI
8RA9T pr-"-le/-&s O9 &6:et& TO usu!r-&;1&st I<E9TI=IE<
B> cl!"e WITH &pc-&nes
Mpri:ilegiosN es una lista de pri:ilegios =(ele!t, (5utdoEn, %ll...>
separados por !o2as.
Mob@etoN es !ualquier ob@eto del ser:idor, pudiendo utiliBar el ] !o2o
!o2od*n. 4o se indi!a ningJn ob@eto para los pri:ilegio globales.
MusuarioA5ostN es el no2bre del usuario ' el 5ost. (i no se indi!a
ningJn 5ost, los pri:ilegios se !on!eder/n para !ualquier 5ost =X>.
M!la:eN es la !la:e en !laro que se asigna al usuario. (i 'a tiene !la:e
asignada no es !on:eniente indi!arla, porque quedar*a 2odi.i!ada =para
todas las bases de datos a las que tenga a!!eso el usuario>.
Mop!ionesN es una lista separada por !o2as de las op!iones posibles.
?uede ser 7#%43 8?3,84 para per2itir que el usuario asigne per2isos,
M%Q\C844EC3,84(\?E#\&8K#, M%Q\)KE#,E(\?E#\&8K#,
et!.
81emplos
1ea2os algunos e@e2plos de senten!ias 7#%43I
8RA9T ALL TO ?r&&t?;?l&c!l1&st? O9 @.@ I<E9TI=IE< B> ?m-cl!"e?
El usuario root podr/ 5a!er lo que quiera desde lo!al5ost. Le 5e2os
asignado !la:e.
8RA9T I9SERTA BC<ATE O9 6!nc&.cl-ente TO ;?c!:!.es?
Cualquier usuario podr/, desde el do2inio _!a@a.es_, insertar ' a!tualiBar la
tabla M!lienteN de la base de datos Mban!oN.
*( Manual de Supervivencia del Administrador de MySQL
7.2.2. 'omando ,EVO:E
(e utiliBa para quitar pri:ilegios pre:ia2ente asignados. (u sintaxis es la
siguienteI
REVODE pr-"-le/-&s O9 &6:et& =RO$ usu!r-&;1&st
Los par/2etros Mpri:ilegiosN, Mob@etoN ' MusuarioA5ostN son idCnti!os a los del
!o2ando 7#%43.
7.2.3. %untos a ener en 'uenta
M'()L est/ diseHada para ser ./!il de usar. T, aunque esta a.ir2a!i-n suene
intr*nse!a2ente positi:a, en o!asiones puede suponer algJn proble2a. 3al es el
!aso !on los pri:ilegios.
En !on!reto, M'()L tiene una pol*ti!a expl*!ita de pri:ilegios, pero no de
re:o!a!iones. Esto quiere de!ir que s-lo pueden re:o!arse =7#%43> pri:ilegios
que se 5ubieran asignado pre:ia2ente.
%s*, si 5a!e2os
8RA9T ALL O9 @.@ TO ?:u!n?
REVODE SELEET O9 n&m-n!s.@ =RO$ ?:u!n?
tendre2os un error. M'()L !onsidera que el pri:ilegio (ELEC3 no 5a sido
!on!edido a _@uan_ ', por lo tanto, no se puede re:o!ar.
El proble2a es que M'()L utiliBa el siste2a de !o2proba!i-n que !o2enta2os
anterior2ente, por tablas. ?ero no tiene una tabla para re!oger las Mex!ep!ionesN a
los per2isos. Los pri:ilegios pueden asignarse o no asignarse, pero no pueden
negarse.
(ie2pre 5a' alguna solu!i-n, aunque sea 2ala. En este !aso, 5abr*a que re:o!ar
el per2iso genCri!o al usuario ' !on!edCrselos de uno en uno expl*!ita2ente =sal:o
para n-2inas>.
Lo 2is2o o!urre !on los 5osts. 4o es posible ex!luir un 5ost deter2inado.
%unque aqu* la solu!i-n puede ser algo 2/s sen!illa. (i quere2os que un usuario
no pueda !one!tarse desde un deter2inado 5ost, pode2os asignarle una !la:e
i2posible ' seguir 2anteniendo el per2iso global.
3a2biCn 5a' que tener en !uenta que los per2isos no desapare!en !uando
desapare!en los ob@etos sobre los que se apli!an. Esto tiene sus :enta@as, si tiras
=;#8?> una tabla para :ol:er a !rearla, no tendr/s que :ol:er a asignar los
per2isos sobre ella a todos sus usuarios. ?ero, sin e2bargo, si tiras una base de
datos ' 2eses despuCs :uel:es !rearla, los usuarios antiguos seguir/n teniendo sus
per2isos sobre el nue:o ob@eto... Ues eso lo que quer*as 5a!erV 3en en !uenta que
2u!5as !ontraseHas pueden quedar en :ie@as apli!a!iones obsoletas.
3endr/s que a!ordarte de eli2inar los per2isos para !ada ob@eto que destru'es...
si eso es lo que quieres 5a!er.
Miguel Jaque Barbero (mjaqueil!ebenson"com# *,
,.3. Lo#s
M'()L dispone de !uatro .i!5eros de log. 3odos ellos se de.inen ' !on.iguran en el
.i!5ero my.cnf.
7.3.1. Error Log
Este .i!5ero registra el arranque ' la parada del ser:idor M'()L, as* !o2o
errores de integridad en las tablas ' ne!esidad de !5equeos. 4o registra ni
opera!iones ()L, ni 2u!5o 2enos errores ()L.
En un siste2a ;ebian gnu/Linux, la salida de este .i!5ero est/ redirigida al
s'slog =/"!r/l&//sysl&/>.
7.3.2. .uery Log
Este .i!5ero de log registra todas las opera!iones ()L que llegan al ser:idor. El
registro se realiBa segJn llegan las peti!iones ' antes de su e@e!u!i-n. %s* que el
5e!5o de en!ontrar una senten!ia ()L registrada no signi.i!a que esta se e@e!utara
!on Cxito.
4atural2ente, este log tiene un alto !oste en rendi2iento. En siste2as !argados,
todas las opera!iones deben es!ribirse en dis!o antes de realiBarse, ' eso, lle:a su
tie2po.
?ara a!ti:ar este log, 5a' que aHadir la siguiente l*nea en la se!!i-n `2'sqlda de
2'.!n.I
l&/ # /"!r/l&//mysql.l&/
4atural2ente la dire!!i-n del .i!5ero puede ser otra. ?ero debes asegurarte que
el log se rota peri-di!a2ente para e:itar la satura!i-n. En ;ebian gnu/Linux la
instala!i-n de M'()L in!lu'e la !on.igura!i-n de logrotate =en
/etc/l&/r&t!te.d/mysqlser"er> para la rota!i-n de este log.
7.3.3. 2inary Log
Este .i!5ero de log registra todas las opera!iones que 2odi.i!an =o podr*an
2odi.i!ar> datos de la base de datos. Es de!ir, no se registran opera!iones de
!onsulta =(ELEC3, (&8D...> El registro se realiBa tras la e@e!u!i-n de !ada
senten!ia, antes de liberar los se2/.oros.
Este log es i2pres!indible para la re!upera!i-n de bases de datos ante !a*das del
siste2a ' para la repli!a!i-n.
Cierta2ente, a.e!ta al rendi2iento del siste2a, pero se esti2a que esta pCrdida
de rendi2iento no supera el 1X aproxi2ada2ente.
Este log se !on.igura en la se!!i-n `2'sqlda de 2'.!n. !on la siguiente dire!ti:aI
l&/76-n # /"!r/l&//mysql/mysql6-n.l&/
*3 Manual de Supervivencia del Administrador de MySQL
(e puede estable!er quC bases de datos utiliBar/n este log, ' as* e:itar la pCrdida
de rendi2iento, !on las dire!ti:as binlogGdoGdb ' binGlogGignoreGdb.
Los .i!5eros del log binario se guardan per2anente2ente 5asta que son
eli2inados 2ediante el !o2andoI
CBR8E $ASTER LO8S TO n&m6re7f-c1er&7l&/.nFmer&
Este !o2ando borrar/ todos los .i!5eros de log anteriores al indi!ado.
7.3.4. Slow .ueries Log
?or Jlti2o, M'()L tiene la op!i-n de a!ti:ar un log espe!ial para !onsultas
lentas. Este .i!5ero se !on.igura en la se!!i-n `2'sqlda del .i!5ero my.cnf !on las
dire!ti:asI
l&/7sl&'7quer-es # /"!r/l&//mysql/mysqlsl&'.l&/
l&n/7query7t-me # G
l&/quer-esn&tus-n/-nde*es
Con estas dire!ti:as, se registrar/n en el .i!5ero indi!ado las !onsultas que
tarden 2/s de 2 segundos en e@e!utarse. 3a2biCn se registrar/n las !onsultas que no
utili!en *ndi!es para su e@e!u!i-n.
3en en !uenta que el 5e!5o de que una !onsulta, alguna :eB tarde 2/s de dos
segundos no signi.i!a que sea ne!esaria2ente lenta. ?uede que en esa o!asi-n
o!urriera algo en el ser:idor =un pro!eso de ba!6up al 2is2o tie2po que la
!onsulta, un !liente lento...>. #e:isa las !onsultas registradas ' !Cntrate en opti2iBar
las que 2/s se repitan.
,.4. e#uridad en el iste*a 3perati5o
;e po!o nos :aldr/ !on.igurar per.e!ta2ente los pri:ilegios de nuestros usuarios si algJn
intruso es !apaB de a!!eder al siste2a !on pri:ilegios espe!iales =root>.
Kn usuario !on pri:ilegios podr*a realiBar !opias de las bases de datos =las tablas
M',(%M son portables> ' lle:/rselos a otro siste2a para a!!eder a ellas.
Co2o ad2inistradores del ser:idor, nos en.renta2os a dos riesgos prin!ipalesI
a> )ue alguien a!!eda a in.or2a!i-n a la que no deber*a a!!eder, :iolando as* la
pri:a!idad de los datos.
b> )ue alguien 2odi.ique datos que no deber*a 2odi.i!ar.
El segundo ataque puede ser 2u' daHino. Espe!ial2ente si pasa desaper!ibido ' se
prolonga en el tie2po... U!-2o re!uperar*a2os unos datos 2odi.i!ados subrepti!ia2ente
desde 5a!e seis 2esesV
Miguel Jaque Barbero (mjaqueil!ebenson"com# **
7.4.1. ,ecomendaciones
;eber/s 5a!erte un experto en seguridad. 4o solo de tu base de datos, sino
ta2biCn de tu siste2a operati:o ' de todos los ele2entos !on a!!eso a la base de
datos =?&?, Ja:a, et!.>.
Bus!a libros ' !ursos sobre seguridad. En el !aso de ;ebian, ' en general para
siste2as gnuLinux, es 2u' re!o2endable M(e!uring ;ebian ManualN, que podr/s
en!ontrar en ,nternet =en inglCs>.
?ero, 2ientras te .or2as, :a2os a repasar algunas re!o2enda!iones b/si!asI
>o e1ecutes MySQL como root. Cierto es que los pro!esos de
instala!i-n 'a 5a!en esto por ti. Crean una !uenta de usuario =2'sql> '
!on.iguran el siste2a para que M'()L sea e@e!utada por ese usuario. 4o lo
!a2bies. ;e lo !ontrario, !ualquier error en el !-digo de M'()L =' los 5a'>
podr*a dar a!!eso !o2o root a un !ra!6er a:ispado.
MantHn tu sistema actuali,ado. (us!r*bete a las listas de distribu!i-n
no solo de M'()L, sino ta2biCn de tu distribu!i-n gnuLinux, ?&?, Ja:a,
et!. T presta espe!ial aten!i-n a los a:isos sobre M'()L. %!tualiBa tu
siste2a peri-di!a2ente =por si algJn a:iso se te 5ubiera pasado>.
Limita los usuarios en el &ost de la /ase de datos. 4o todo el 2undo
ne!esita una !uenta de usuario para traba@ar !on M'()L. Li2*tate a darles
per2isos de a!!eso desde sus respe!ti:as 2/quinas ' e:ita !rear !uentas de
usuario inne!esarias en la 2/quina del ser:idor. ;i:ide !lara2ente los
pro!esos de traba@o de los desarrolladores del de los ad2inistradores de
siste2as ' bases de datos. #eal2ente, a tu ser:idor, s-lo ne!esitar/n a!!eso
estos Jlti2os. %l instalar apli!a!iones, !a2bia las !ontraseHas de a!!eso de
los progra2as.
Fa, Cue te auditen. %unque todo el 2undo tiende a :er las auditor*as
!o2o una intro2isi-n ' una !r*ti!a al traba@o realiBado, son en realidad
oportunidades Jni!as de re!ibir a'uda para 2e@orar el siste2a. Kn buen
auditor te puede enseHar 2u!5o de seguridad. (i no tienes auditor*as
internas, bus!a un auditor externo.
Fa, #uenas Copias de Se(uridad. Lo :ere2os 2/s adelante, pero las
!opias de seguridad son !r*ti!as para poder re!uperar un siste2a tras un
ataque. 3raBa una buena estrategia.
,.,. e#uridad 16terna
%l 5ablar de seguridad externa, !asi sie2pre nos :iene a la 2ente la i2agen de un !ra!6er
os!uro quien, es!ondido desde algJn !ub*!ulo en un re2oto pa*s de la antigua Kni-n
(o:iCti!a, realiBa denodados es.uerBos por a!!eder ilegal2ente a nuestro siste2a.
?ero los ataques 2/s 5abituales no son tan Mde pel*!ulaN. Curiosa2ente, los 2/s
peligrosos =segJn las estad*sti!as> son los usuarios de nuestra propia red.
;e todas .or2as, tene2os que de.ender nuestro siste2a de unos ' otros.
*5 Manual de Supervivencia del Administrador de MySQL
7.7.1. Sistemas 1onoser8idor
Kna de las !on.igura!iones 2/s 5abituales de M'()L es !o2o base de datos de
%pa!5e para apli!a!iones L%M?.
Bien, pues esta2os de suerte.
Esta !on.igura!i-n es de las 2/s seguras. Co2o %pa!5e es un usuario de la
2is2a 2/quina, no es ne!esario per2itir el a!!eso a M'()L desde ningJn otro
ser:idor.
%de2/s de !on.igurar ade!uada2ente la tabla de 5ost. ?ode2os indi!arle a
M'()L en el arranque que no a!epte ninguna !onexi-n externa :*a 3C?/,?. ?ara
ello, basta !on in!luir la op!i-n s,-pnet'&r,-n/ en la se!!i-n [mysqld]
del .i!5ero my.cnf,
T asunto ter2inado. El resto de op!iones que expondre2os a !ontinua!i-n son
para instala!iones en las que se debe per2itir el a!!eso a !lientes de M'()L desde
otros ordenadores.
7.7.2. ;irewalls
Los .ireEalls !onstitu'en un 2agn*.i!o siste2a de seguridad. ?ode2os poner
autCnti!os !orta.uegos en nuestra red o li2itarnos a !on.igurar el !orta.uegos
propio del siste2a gnuLinux que alberga nuestro ser:idor.
?ero lo 2e@or es que 5aga2os a2bas !osas. %s*, si el .ireEall externo de@a de
.un!ionar =o es sustituido>, nuestro ser:idor seguir/ estando protegido.
Los .ireEall a!tJan igual que los !o2andos 7#%43, estable!iendo desde que
5osts se ad2iten !onexiones ' de quC tipo =indi!ando, entre otras !osas, el puerto de
!onexi-n>.
4or2al2ente los .ireEalls externos !aen .uera de la responsabilidad del
ad2inistrador de base de datos. ?ero !o2o 2u!5as :e!es se trata de la 2is2a
persona o del 2is2o equipo, lo 2e@or que puedes 5a!er es !on.igurarlos de la
siguiente .or2aI
Estable!e !o2o pol*ti!a por de.e!to el re!5aBo a !ualquier !onexi-n.
%!epta expl*!ita2ente !onexiones al puerto ""06 para M'()L. (i es
posible, indi!a desde que 5osts se per2itir/n.
;a a!!eso a los puertos de ser:i!io que ne!esites =((&>, pero indi!ando
los 5osts.
7.7.3. .uita el $ateway
4or2al2ente, si el ser:idor s-lo alo@a M'()L, no tendr/ que ini!iar
!o2uni!a!iones !on nadie. %s* que tener !orre!ta2ente !on.igurado el gateEa'
para a!!eder a 5osts re2otos s-lo ser/ Jtil para poten!iales !ra!6ers que a!!edan al
siste2a.
(in gateEa', el siste2a seguir/ respondiendo !orre!ta2ente a las !onexiones
ini!iadas por 5osts re2otos que 5a'an superado los !ontroles pre:ios. T podr/
!o2uni!arse !on !ualquier 5ost de su propia red.
Miguel Jaque Barbero (mjaqueil!ebenson"com# *$
7.7.4. 'omunicaciones Encri!tadas
8tro ni:el adi!ional de seguridad se !onsigue en!riptando las !o2uni!a!iones
entre el !liente ' el ser:idor.
Z8J8[ En apli!a!iones su@etas a la L8?;
10
!on ni:el de seguridad " =el
2/xi2o>, es un requeri2iento obligatorio que !ualquier !o2uni!a!i-n de datos se
reali!e en!riptada.
La en!ripta!i-n i2pide que M2ironesN externos puedan a!!eder a la in.or2a!i-n
trans2itida utiliBando si2ple2ente un sni..er. %de2/s, aHade la :enta@a de
!o2pri2ir los datos, !on lo que a5orra2os an!5o de banda.
3ene2os tres op!iones para !rear estos MtJnelesN de !o2uni!a!i-nI
-ed Privada Girtual
?ode2os !rear una #ed ?ri:ada 1irtual =1?4> entre el !liente ' el ser:idor.
;e esta .or2a, !ualquier !o2uni!a!i-n entre ellos estar/ en!riptada,
in!lu'endo las opera!iones de M'()L.
Secure Soc'ets Layer 9SSL;
M'()L in!lu'e soporte nati:o para !o2uni!a!iones ((L.
;esgra!iada2ente, no suele ser una de las op!iones en las distribu!iones
2/s 5abituales de M'()L, por lo que tendre2os que !o2pilar nosotros
2is2os el !-digo .uente
11
.
Kna :eB 5e!5o, podre2os lanBar !o2andos 7#%43 !on !ondi!iones
espe!*.i!as de ((LI
-8QE-8 SSLI 8bliga a que la !o2uni!a!i-n sea en!riptada por
((L para per2itir la !onexi-n de la !uenta =usuario/!la:e/5ost>.
-8QE-8 45IJI 8bliga a que, ade2/s, el !erti.i!ado del !liente
sea :eri.i!able por una autoridad de !erti.i!a!i-n =C%> re!ono!ida por
el ser:idor.
-8QE-8 SE#K8C< dnI ,ndi!a el !erti.i!ado de !liente que
adquirir/ la autoriBa!i-n. (e indi!a 2ediante el no2bre distinguido
=dn>.
-8QE-8 SSE8- dnI ,ndi!a quC e2isor debe 5aber e2itido el
!erti.i!ado de !liente. Mu' Jtil si todos los !erti.i!ados son de una
2is2a C% =in!luso la propia>.
-8QE-8 CPF8- tipoI #equiere un tipo/s !on!reto de algorit2o
de !i.rado, te-ri!a2ente aquellos que 2ere!en !on.ianBa por su
robusteB.
1arias de estas op!iones se pueden !o2binar !on %4;.
10 Le' 8rg/ni!a de ?rote!!i-n de ;atos ?ersonales =EspaHa>.
11 4o es tan di.*!il !o2o pare!e. La 2a'or*a de ad2inistradores de M'()L lo 5a!en para elegir personal2ente las op!iones !on
que !o2pilar/n su ser:idor. Basta !on lo de sie2pre M!on.igureN, M2a6eN ' M2a6e installN.
*% Manual de Supervivencia del Administrador de MySQL
Secure S&ell 9SSF;
(i no quieres liarte !on ((L, puedes re!urrir ./!il2ente a ((&, que est/
5abitual2ente disponible en 2u!5os siste2as.
((& puede utiliBarse para estable!er un tunel de !o2uni!a!i-n entre dos
ordenadores.
?ara ello, basta !on abrir el tJnel !on el !o2andoI
( ss1 9 f L HH4IJd-recc-.n7del7dest-n&J334I
Con este !o2ando abrire2os un tJnel desde nuestro puerto $$06 al puerto
""06 del destino.
%5ora pode2os !one!tarnos !on el ser:idor del destino a tra:Cs de nuestro
propio puerto $$06 !on el !o2andoI
(mysql 1 5GK.4.4.5 C HH4I
7.7.7. '% Wra!!ers
%ntes de que existieran los .ireEalls, la seguridad peri2etral de 2u!5os siste2as
se !on.iaba al siste2a 3C?/Drappers. Ese siste2a sigue a!ti:o ' dese2peHando un
papel .unda2ental en la seguridad de nuestros siste2as.
Co2o ade2/s, M'()L puede !o2pilarse !on soporte para 3C?/Drappers, no
5a' raB-n para no utiliBarlo ' aHadir otro ni:el de seguridad a nuestro siste2a.
Kna :eB disponible, pode2os !on.igurar los .i!5eros /etc/1&sts.deny,
/etc/1&sts.deny ' /etc/ser"-ces para indi!ar desde quC 5osts '
subredes per2itire2os el a!!eso al puerto de M'()L.
7.7.*. 2lo6ueo &utom"tico de <osts
?ero in!luso aunque todo lo anterior .allara, M'()L in!lu'e un Jlti2o
2e!anis2o para i2pedir el a!!eso, el bloqueo auto2/ti!o de 5osts.
(i un !ra!6er !onsigue llegar 5asta nuestro ser:idor, toda:*a tendr/ que re:entar
la !ontraseHa de algJn usuario de M'()L para tener a!!eso a los datos. El bloqueo
auto2/ti!o le obliga a 5a!erlo sin superar un nJ2ero 2/xi2o de intentos. (i lo
supera, !ualquier !onexi-n desde ese 5ost ser/ re!5aBada.
El nJ2ero 2/xi2o de intentos antes del bloqueo se indi!a en la :ariable de
ser:idor 2ax\!one!tions\errors ' tras superarse generar/ un 2ensa@e de error en el
log de M'()L.
?ara liberar el bloqueo, natural2ente despuCs de 5aber to2ado las 2edidas de
seguridad oportunas, bastar/ !on e@e!utar el !o2ando LLK(& &8(3(. Este
desbloquear/ todos los ser:idores bloqueados. 4o 5a' .or2a de desbloquear uno
!on!reto.
,.-. 1ncriptacin de &atos
En o!asiones no es su.i!iente !on en!riptar las !o2uni!a!iones. (i nuestros datos son
alta2ente sensibles, querre2os en!riptar el 2is2*si2o al2a!ena2iento .*si!o.
Miguel Jaque Barbero (mjaqueil!ebenson"com# *&
7.*.1. 'ontrase=as
4or2al2ente las !ontraseHas de nuestros usuarios, tanto las de M'()L !o2o
las de !ualquiera de las apli!a!iones soportadas por el ser:idor, !onstitu'en un dato
!r*ti!o que no querre2os al2a!enar Men !laroN.
4o resulta !on:eniente que el ad2inistrador de base de datos tenga op!i-n de
!ono!er las !ontraseHas. (obre todo, si pode2os e:itarlo.
?ara ello, debe2os guardar las !ontraseHas en!riptadas. ?ero, en lugar de utilBiar
un algorit2o de en!ripta!i-n que per2itir*a, !on tie2po ' re!ursos, desen!riptar las
!ontraseHas, es pre.erible al2a!enar un 5as5
12
.
%l2a!enando un 5as5 de la !ontraseHa, la Jni!a .or2a de ro2perlas ser/
probando todas las entradas posibles 5asta dar !on una que genere el 2is2o 5as5. T
eso requiere 2u!5o, 2u!5*si2o tie2po ' re!ursos.
M'()L tiene :arias .un!iones de 5as5I ?%((D8#;, 8L;\?%((D8#;,
E4C#T?3, (&%1 ' M;.
%s*, la inser!i-n de una !ontraseHa ser*aI
I9SERT I9TO usu!r-& Ln&m6reA cl!"eM VALBES L?:u!n?A
CASSWOR<L?m-El!"e?MMN
;e esta .or2a, la tabla al2a!ena el 5as5, no la !la:e.
En el !aso de apli!a!iones in.or2/ti!as =el 2/s 5abitual>, es pre.erible que el
5as5 se reali!e en el !liente, e:itando as* que la !la:e en !laro :ia@e por la red.
?ara !o2probar la !la:e de un usuario, la !onsulta ser*aI
SELEET @ =RO$ usu!r-& WHERE n&m6re # (n&m6re A9< cl!"e #
CASSWOR<L(cl!"eMN
;e nue:o, es pre.erible que el 5as5 se 5aga en el !liente.
7.*.2. Sistemas de ;ic3eros
%lgo 2/s radi!al es en!riptar todo el siste2a de .i!5eros que da soporte al
al2a!ena2iento de M'()L.
En este !aso, no tendre2os que preo!uparnos de nada, porque el siste2a de
.i!5eros =1L(> se en!argar/ de en!riptar ' desen!riptar los datos segJn
ne!esite2os, bastar/ !on tener en !uenta el !onsu2o de C?K que !onlle:an estas
opera!iones.
(in e2bargo, esta op!i-n puede ser un :erdadero proble2a a la 5ora de realiBar
!opias de seguridad. Ta no pode2os si2ple2ente !opiar los .i!5eros de datos,
porque s-lo el siste2a de .i!5eros ser*a !apaB de desen!riptarlos. 3endre2os que
realiBar des!argas de datos desen!riptados ' :ol:er a en!riptarlos sobre el soporte
de !opia de seguridad. 8tra op!i-n es !opiar dire!ta2ente toda la parti!i-n de dis!o
en!riptada... !laro, que ne!esitare2os bastante espa!io.
12 Kn 5as5 es una .un!i-n que, partiendo de un dato de entrada, genera otro de salida. ?ero no 5a' rela!i-n biun*:o!a, por lo que
!ono!iendo el dato de salida no es posible dedu!ir el de entrada.
*' Manual de Supervivencia del Administrador de MySQL
7.*.3. Encri!tacin a 9i8el de &!licacin
Kna op!i-n 5abitual es de@ar que sean las apli!a!iones las que en!ripten sus
propios datos !r*ti!os.
La :enta@a prin!ipal es que 'a no 5a' ningJn proble2a !on los ba!6ups. ?ero en
!a2bio, el a!!eso a los datos en!riptados s-lo podr/ realiBar a tra:Cs de las
apli!a!iones que son !apa!es de desen!riptarlos. Esto redu!e 2u!5o la
reutiliBa!i-n.
?ero ade2/s 5a' otro proble2a. M'()L, ' !ualquier otra base de datos, opera
2al !on los datos en!riptados.
En pri2er lugar, los *ndi!es no .un!ionar/n tan bien al tener que realiBarse sobre
datos en!riptados. En 2u!5as o!asiones, la en!ripta!i-n 5a!e que :alores de unos
po!os b'tes se trans.or2en en :alores 2u!5o 2/s largos, !on los !onsiguientes
proble2as de al2a!ena2iento e indexa!i-n.
?ero, al 2is2o tie2po, M'()L no puede utiliBar los :alores en!riptados, ni para
bJsquedas =D&E#E :alor\en!riptado W 1000> ni para .un!iones de agrega!i-n
=(KM=:alor\en!riptado>>.
Estas opera!iones requieren que la apli!a!i-n des!argue todos los datos, los
desen!ripte ' reali!e el traba@o que M'()L podr*a 5aber realiBado ./!il2ente.
Lo 2is2o o!urre !on la opti2iBa!i-n de !onsultas. M'()L no puede elegir quC
*ndi!es si 5a' :alores en!riptados en la !onsulta.
7.*.4. Encri!tacin a 1edida
3ene2os una Jlti2a op!i-n. (in duda !o2pli!ada pero 2u' .lexible.
%l ser M'()L so.tEare libre, pode2os progra2ar nuestro propio 2ane@ador de
tablas =2otor de al2a!ena2iento>, que en!ripte ' desen!ripte !o2o quera2os.
El !-digo de M'()L in!lu'e un 2otor de e@e2plo =EQ%M?LE> del que se
puede partir para .a!ilitar esta labor.
4atural2ente, es ne!esario do2inar CPP para 5a!erlo, pero no es di.*!il
en!ontrar buenos progra2adores en este lengua@e !on a2plios !ono!i2ientos de
bases de datos e in!luso !ono!i2ientos espe!*.i!os de M'()L.
,.7. My!L con c.root
%:anBando en la seguridad de nuestro ser:idor, tene2os la op!i-n de e@e!utar M'()L en
una M@aula !5rootN.
%l e@e!utar M'()L en una @aula !5root, li2ita2os el a!!eso del pro!eso a los .i!5eros
!ontenidos en la @aula =un dire!torio ' sus subdire!torios>.
Con esto e:ita2os que algJn bug pueda ser utiliBado para a!!eder a .i!5eros sensibles del
siste2a, que sie2pre estar/n .uera de la @aula !5root.
?ara e@e!utar M'()L !on !5root tene2os que re!o2pilarlo. Esto es ne!esario porque, en
su .or2ato 5abitual, M'()L a!!ede a .i!5eros de otros dire!torios =/usr/bin, /:ar/lib, et!.>
' debe2os !a2biar las op!iones de !o2pila!i-n para que instale ' busque todos sus
Miguel Jaque Barbero (mjaqueil!ebenson"com# 5)
.i!5eros en el 2is2o dire!torio de e@e!u!i-n.
?ara ello, en el pro!eso de !o2pila!i-n indi!are2os la op!i-n
pref-*#/c1r&&t/mysql
siendo /!5root/2'sql el dire!torio en el instalare2os ' e@e!utare2os M'()L.
?odre2os e@e!utar M'()L !on el !o2andoI
2 mysqld7s!fe c1r&&t#/c1r&&t/mysql user#5445
4e!esita2os indi!ar el usuario !on su K,; porque M'()L no podr/ a!!eder a los
progra2as de bJsqueda por no2bre.
,.8. Copias de e#uridad
3odos sabe2os que es i2portant*si2o 5a!er !opias de seguridad... pero ta2biCn es !ierto
que, nor2al2ente, es la tarea 2/s ol:idada sal:o que se auto2ati!e. E in!luso en ese
!aso, sigue siendo una tarea ol:idada, que no se !o2prueba ni se re:isa.
&a!er !opias de seguridad de nuestros datos es !r*ti!o, pero UporquCV
&a' dos 2oti:os .unda2entales para realiBar !opias de seguridadI
Cat/stro.esI Es posible que nuestros datos desapareB!an. ?uede ser por un borrado
inesperado, un error de 5ardEare, un in!endio o un terre2oto, todo es posible e
i2probable. ?ero aunque la probabilidad de una !at/stro.e sea ba@a =o no tan ba@a !o2o
i2agina2os>, Upode2os asu2ir el riesgoV
%uditor*asI En o!asiones ne!esitare2os auditar nuestros datos. (aber quC in.or2a!i-n
ten*a2os en el pasado, !o2o !re!e nuestra base de datos, !orregir proble2as que :ienen
de le@os... En algunos !asos, disponer de los datos antiguos es una obliga!i-n legal. Este
es el !aso de la L8?;.
?ero in!luso 5a' otras situa!iones en las que do2inar las tC!ni!as de realiBa!i-n '
re!upera!i-n de !opias de seguridad nos resultar/ 2u' Jtil. ?or e@e2plo, para realiBar
pruebas de nuestro ser:idor querre2os Mponer ' quitarN distintas !opias de nuestros datos.
3a2biCn ne!esitare2os pro:eer a los desarrolladores de apli!a!iones !on !opias de datos
reales o !asi reales para que puedan 5a!er bien su traba@o.
3odos esto ' alguna !osa 2/s requiere !ono!er las tC!ni!as para realiBar ' restaurar
!opias de seguridad.
7.>.1. 'onsideraciones
%ntes de e2peBar a 5a!er !opias !o2o lo!os ' llenar !intas o ;1;s, tendre2os
que tener en !uenta :arias !onsidera!ionesI
Golcados o Copias -a6
?ode2os optar por :ol!ar nuestros datos a .i!5eros de texto en .or2ato
()L, in!lu'endo senten!ias C#E%3E e ,4(E#3 ' disponer as* de !opias en
texto plano tanto de la estru!tura de nuestra base de datos !o2o de su
5( Manual de Supervivencia del Administrador de MySQL
!ontenido.
8 pode2os realiBar dire!ta2ente !opias de los .i!5eros de al2a!ena2iento
.*si!o.
El :ol!ado es 2/s .lexible. 4os per2itir/ editar los datos, !onsultarlos
dire!ta2ente sin ne!esidad de !argarlos, et!. ?ero pueden requerir 2u!5o
espa!io de dis!o in!luso 5a!iCndolos !o2pri2idos. %de2/s, requieren 2u!5o
!onsu2o de C?K tanto para generarse !o2o para !argarse. En este Jlti2o !aso,
la base de datos deber/ regenerar todos los *ndi!es. %de2/s, durante el :ol!ado
tendre2os que bloquear el a!!eso a las tablas.
La !opia dire!ta de .i!5eros es 2/s r/pida. ?ero no per2ite editar los datos
ni !onsultarlos si no los !arga2os en el ser:idor. %de2/s, requiere detenerlo
para realiBar la !opia.
8n lnea o en #atc&
U1a2os a detener el ser:idor para realiBar la !opia de seguridad o debe2os
2antenerlo en 2ar!5aV
(i pode2os detenerlo, la !osa es ./!il. ?odre2os 5a!er !opia dire!ta de los
.i!5eros o, si opta2os por el :ol!ado =!ortando el a!!eso a los usuarios>,
podre2os :ol!ar las tablas sin preo!uparnos de los bloqueos.
Mantener la Consistencia
En !aso de realiBar !opias en l*nea, debere2os preo!uparnos de la
!onsisten!ia del :ol!ado.
4o basta !on bloquear una tabla, :ol!arla ' bloquear la siguiente. (i las
tablas est/n rela!ionadas, ' esto es lo 2/s 5abitual en las bases de datos
Mrela!ionalesN, es posible que una opera!i-n de otro usuario 5a'a insertado o
borrado datos de otra tabla rela!ionada !on la que esta2os :ol!ando. ?or
e@e2plo, podr*a borrarse la .i!5a de un !liente 2ientras nosotros :ol!a2os la
lista de pedidos... in!lu'endo los del !liente desapare!ido.
(i opta2os por el :ol!ado en l*nea, debe2os traBar una deli!ada estrategia
de bloqueo.
8spacio de Almacenamiento y <iempo de Gida
?or Jlti2o, debe2os tener en !uenta quC espa!io o!upan nuestras !opias de
seguridad ' quC tie2po ne!esita2os 2antenerlas.
Es !on:eniente planear una estrategia a largo plaBo ' no de@arnos sorprender
por una .alta de espa!io no pre:ista. ?or e@e2plo, si nuestros datos :an a !re!er
2u!5o ' e2peBa2os a realiBar !opias en C;#o2, llegar/ un d*a en el que
ne!esite2os :arios para !opia. M/s :ale que tenga2os la !ir!unstan!ia
pre:ista.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 5,
7.>.2. Estrategias de 2ac4u!
Bien, di!5o esto, tene2os :arias estrategias posibles.
Podemos parar el Servidor
(i pode2os detener el ser:idor, por e@e2plo por la no!5e para realiBar
!opias de seguridad, la !osa es tre2enda2ente ./!il.
?ode2os optar por !ortar el a!!eso a los usuarios =por e@e2plo, deteniendo
%pa!5e> ' :ol!ar los datos a un .i!5ero de texto. Con:iene 2andar el .i!5ero a
otra ubi!a!i-n .*si!a. Los in!endios no distinguen entre datos reales ' !opias de
seguridad.
(i nuestra base de datos es 2u' grande, podre2os optar por 5a!er !opias de
los .i!5eros de al2a!ena2iento.
,n!luso en el !aso de que no ne!esite2os auditar los datos, nos bastar/ !on
2antener la Jlti2a !opia de estos.
>o Podemos parar el Servidor
La !osa se !o2pli!a.
La op!i-n 2/s ade!uada es instalar un ser:idor de repli!a!i-n. Mu!5os
ad2inistradores 2ontan ser:idores de repli!a!i-n s-lo para realiBar !opias de
seguridad.
El siste2a es sen!illo. Llegado el 2o2ento de realiBar la !opia de
seguridad, detienes el ser:idor de repli!a!i-n ' 5a!es la !opia de sus datos. %l
:ol:er a arran!ar se sin!roniBar/ !on el ser:idor 2aestro. 4o te ol:ides de
!opiar ta2biCn los .i!5eros de repli!a!i-n.
<ampoco Fay Servidor de -eplicacin
(i nuestra base de datos es 2u', 2u' grande puede ser in:iable
e!on-2i!a2ente disponer de un ser:idor de repli!a!i-n.
En ese !aso, debere2os traBar nuestra propia estrategia de !opias de
seguridad.
Lo 2/s !on:eniente es diseHar un s!ript que, !ono!iendo las tablas ' sus
rela!iones, :a'a bloqueando grupos de tablas ' :ol!ando sus datos.
Eso de Aplicaciones de #ac'up
Las apli!a!iones genCri!as de ba!6up suelen estar po!o preparadas para
realiBar !opias de seguridad de bases de datos.
?uede o!urrir que al !opiar los .i!5eros de datos, !o2o 5a!en estas
apli!a!iones, no !opien in2ediata2ente otros .i!5eros rela!ionados =*ndi!es,
!a!5Cs, logs...> ' que !uando !opien estos, 'a 5a'an sido 2odi.i!ados.
%!abare2os enton!es !on una !opia in!onsistente de nuestra in.or2a!i-n.
(i :as a utiliBar apli!a!iones de ter!eros para !opias de seguridad,
53 Manual de Supervivencia del Administrador de MySQL
re:isa bien !ual es su .un!iona2iento.
7.>.3. <erramientas y /cnicas
3ene2os :arias 5erra2ientas que nos a'udar/n en nuestra labor de realiBar '
re!uperar !opias de seguridad.
mysCldump
Es un !o2ando que per2ite realiBar :ol!ados de tablas ' bases de datos a
.i!5eros de texto ()L.
Mu' Jtil para bases de datos pequeHas.
La re!upera!i-n de :ol!ados de 2'sqldu2p se realiBa dire!ta2ente !on el
!o2ando 2'sql, utiliBando !o2o entrada al 2is2o el .i!5ero de :ol!ado.
mysCl&otcopy
Es un !o2ando para realiBar !opias en l*nea de la base de datos.
2'sql5ot!op' bloquea las tablas ' genera !opias de los .i!5eros de
al2a!ena2iento en el dire!torio indi!ado.
(i 5a' 2u!5o tr/.i!o o 2u!5as tablas, el bloqueo de 2'sql5ot!op' puede
in.luir en el rendi2iento.
La re!upera!i-n es sen!illa. ?aras el ser:idor ' !opias los .i!5eros en el
dire!torio.
55 Manual de Supervivencia del Administrador de MySQL
Captulo -. 3pti*i9acin
-.1. :ndices
Los *ndi!es en base de datos nos :an a per2itir en!ontrar r/pida2ente los datos que
bus!a2os. 3C!ni!a2ente, son estru!turas de datos que aso!ian un !riterio de ordena!i-n
!on la posi!i-n de una .ila.
?ode2os !o2pararlos !on el *ndi!e de tCr2inos utiliBados en un libro. En Cl, pode2os
bus!ar un tCr2ino =por e@e2plo, Men!ripta!i-nN> ' el *ndi!e nos dir/ en quC p/ginas
pode2os en!ontrar esa palabra.
La di.eren!ia .unda2ental entre el *ndi!e de un libro ' el de una base de datos es que el
pri2ero no !a2bia, 2ientras que la base de datos debe lu!5ar por 2antener el *ndi!e
a!tualiBado 2ientras los usuarios insertan, borran ' 2odi.i!an la in.or2a!i-n indexada.
?ense2os por un 2o2ento en una tabla de !lientes. )uere2os bus!ar los datos de un
!liente !on el apellido M(tep5ano:s6iN. Es un apellido raro ' probable2ente no 5abr/
2u!5os. U)uC 5a!e la base de datos para en!ontrar los datosV
?ues, sin otra a'uda, tendr/ que leer !ada registro de la tabla =por 2illones que sean> '
!o2parar el !a2po apellido !on la !adena de texto bus!ada. Esta opera!i-n, as* des!rita,
puede suponer un alto tie2po de e@e!u!i-n, gran !onsu2o de dis!o ' la !onta2ina!i-n de
la !a!5C de dis!o del siste2a. Casi nada.
(in e2bargo, esta 2is2a opera!i-n apenas nos lle:a unos segundos en la gu*a tele.-ni!a.
?ara eso est/n los *ndi!es.
Compromiso
Los *ndi!es no salen gratis. Co2o !asi todo en esta :ida se trata de un
equilibrio. (i de.ini2os *ndi!es en nuestras tablas, !ierta2ente estare2os
a!elerando las !onsultas a nuestros datos. ?ero, al 2is2o tie2po, estare2os
penaliBando las inser!iones ' a!tualiBa!iones porque, en !ada una de estas
opera!iones, el ser:idor tendr/ que a!tualiBar la in.or2a!i-n del *ndi!e.
3a2biCn, el uso de *ndi!es supone un au2ento del espa!io de dis!o
!onsu2ido.
?iensa quC te !on:iene 2/s.
*.1.1. i!os de ?ndices
M'()L nos o.re!e 2u!5as alternati:as para elegir los *ndi!es que quere2os
!rear en nuestra base de datos.
Miguel Jaque Barbero (mjaqueil!ebenson"com# 5$
Parciales
En lugar de indexar todo el !ontenido de un !a2po de la base de datos,
pode2os indi!arle a M'()L que 5aga un *ndi!e par!ial.
ALTER TABLE cl-ente A<< I9<EO L!pell-d&sLPMM
Multicolumna
3a2biCn pode2os utiliBar :arias !olu2nas para de.inir un *ndi!eI
ALTER TABLE cl-ente A<< I9<EO L!pell-d&sA n&m6reM
8 in!luso 5a!er *ndi!es 2ulti!olu2na par!ialesI
ALTER TABLE cl-ente A<< I9<EO L!pell-d&sLHMA
n&m6reLPMM
ncrustados 9Clustered;
Las tablas inno;B tienen una !ara!ter*sti!a espe!ial en el *ndi!e aso!iado a
su !la:e pri2aria. En lugar de al2a!enar el *ndi!e en un /rea di.erente de los
datos =!o2o 5a!en las tablas M',(%M>, los datos se al2a!enan ordenados por
!la:e pri2aria. Es de!ir, !on el *ndi!e in!rustado en los datos.
%s*, 2ientras que en una tabla M',(%M, la bJsqueda por *ndi!e requiere
dos opera!iones =leer el *ndi!e ' leer los datos>, !on *ndi!es in!rustados estas
bJsquedas se resuel:en en una sola opera!i-n. Kna :eB en!ontrada la entrada
del *ndi!e, 'a se 5an en!ontrado los datos.
<e4tuales 92ull@<e4t;
?or su parte, las tablas M',(%M ta2biCn tienen su punto .uerte. (on los *ndi!es
textuales.
Con esta op!i-n, M'()L !rea un *ndi!e sobre las palabras de un !a2po de la
tabla. Esta op!i-n propor!iona soporte a bJsquedas textuales.
ALTER TABLE cl-ente A<< =BLLTEOT L!pell-d&sM
Las senten!ias de bJsqueda que expl*!ita2ente 5a!en uso del *ndi!e sonI
SELEET @ =RO$ ELIE9TE WHERE $ATEHL!pell-d&sM
A8AI9STLQCRre+SM
5% Manual de Supervivencia del Administrador de MySQL
*.1.2. Estructuras
?ara el al2a!ena2iento de los *ndi!es existen di:ersas estru!turas
#@<ree
Co2o su no2bre indi!a, se trata de un *ndi!e !on una estru!tura de /rbol. Es
el *ndi!e 2/s utiliBado en bases de datos por su .lexibilidad, rendi2iento ' uso
de espa!io.
Los /rboles balan!eados tienen la !ara!ter*sti!as de que !ualquier bJsqueda
tiene el 2is2o tie2po de resolu!i-n. Lrente a los /rboles MbinariosN, los BG
3rees tienen la :enta@a de que !ada nodo puede tener 2Jltiples 5i@os, e:itando
que el /rbol !reB!a de2asiado en pro.undidad.
Los *ndi!es BG3ree .a!ilitan la resolu!i-n de !onsultas por rango
=BE3DEE4> ' las !onsultas rela!ionadas por W ' b.
Fas&
La utilidad de un *ndi!e depende de la distribu!i-n de sus :alores. Kna
distribu!i-n uni.or2e garantiBa que se podr/n des!artar .ilas r/pida2ente.
Esta es la estrategia de los *ndi!es &as5, ta2biCn 2u' populares entre las
bases de datos. (on *ndi!es planos, que al2a!enan el :alor del 5as5 de la !la:e
aso!i/ndole el o..set del registro o registros aso!iados.
(on 2u' r/pidos para las bJsquedas por !la:e pero, en las bJsquedas por
rango no pueden ser utiliBados.
3ienen el proble2a de que, en algunas o!asiones, puede que el 5as5 no
produB!a la distribu!i-n 5o2ogCnea de resultados que bus!a2os. (in e2bargo,
suelen o!upar 2enos espa!io que los BG3rees.
-@<ree
Este es un tipo de *ndi!e espe!ial, utiliBado para las tablas espa!iales.
Mediante este *ndi!e, M'()L puede saber r/pida2ente si un !on@unto de
puntos est/n situados dentro o .uera de una deter2inada .or2a geo2Ctri!a.
*.1.3. 1otores de &lmacenamiento e ?ndices
Cada 2otor de al2a!ena2iento tiene su propio *ndi!e aso!iado.
;esgra!iada2ente, es 2u' po!o lo que el diseHador de bases de datos puede elegir.
?ero s* es !on:eniente saberlo para tenerlo en !uenta.
MySAM
Las tablas M',(%M utiliBan *ndi!es BG3ree, .ullGtext ' #G3ree. 4o pueden
utiliBar *ndi!es 5as5.
%de2/s, tienen algunas !ara!ter*sti!as para 2e@orar el rendi2iento de los
*ndi!es BG3reeI
Miguel Jaque Barbero (mjaqueil!ebenson"com# 5&
Co2presi-n de pre.i@os en !la:es al.anu2Cri!as. 3a2biCn lla2ado
M!o2presi-n de pre.i@osN. (i :arias entradas de la !olu2na indexada
tienen el 2is2o pre.i@o =por e@e2plo M5ttpI//N> este ser/ !o2pri2ido
para a5orrar espa!io de al2a!ena2iento.
Co2presi-n de b'tes altos en !la:es nu2Cri!as. 3a2biCn lla2ado
Me2paqueta2iento de !la:esN. Es la 2is2a idea que !on la !la:es
al.anu2Cri!as, pero apli!ada al b'te alto de las !la:es nu2Cri!as.
Los *ndi!es de las tablas M',(%M se guardan los .i!5eros !on el 2is2o
no2bre que la tabla ' extensi-n .MT,.
M'()L tiene la op!i-n de posponer las a!tualiBa!iones del *ndi!e de una
tabla para !argas 2asi:as de datos.
F8AP
Las tablas &E%?, en 2e2oria, pueden utiliBar *ndi!es &as5 =por de.e!to> o
BG3ree. La op!i-n de BG3ree ' &eap o.re!e 2agn*.i!os tie2pos de respuesta.
EREATE TABLE... I9<EO BSI98 BTREELc&lumn!MM...
nno$#
Las tablas ,nno;B utiliBan *ndi!es BG3ree in!rustados. Esto las 5a!e 2u'
r/pidas en las bJsquedas por !la:e pri2aria. %de2/s, al tratarse del *ndi!e, es
.re!uente que la p/gina !on la !la:e ' los datos 'a se en!uentre en la !a!5C de
dis!o.
*.1.4. Limitaciones en el @so de ?ndices
?ero 5a' distintas situa!iones en las que los *ndi!es no podr/n ser utiliBados por
M'()L, ' !on:iene tenerlas en !uentaI
#3sCuedas con comodn
En una !onsulta del tipo
SELEET @ =RO$ cl-ente WHERE !pell-d&s LIDE ?TerT?
un *ndi!e sobre apellidos resulta total2ente inJtil. M'()L tendr/ que
es!anear toda la tabla... sal:o que utili!e2os un *ndi!e textual ' 2odi.ique2os
la !onsulta para utiliBarlo.
#3sCuedas con e4presiones re(ulares
La situa!i-n es an/loga si utiliBa2os bJsquedas !on expresiones regulares.
En la !onsultaI
5' Manual de Supervivencia del Administrador de MySQL
SELEET @ =RO$ cl-ente WHERE !pell-d&s RLIDE ?e+(?
(i2ple ' llana2ente, M'()L no intentar/ opti2iBar bJsquedas basadas en
expresiones regulares.
Pro/lemas de 8stadsticas
?or Jlti2o, si M'()L pre:C que una !onsulta tendr/ que de:ol:er 2/s del
"0X de las .ilas, !onsiderar/ =' !on raB-n> que utiliBar el *ndi!e ser/ 2/s lento
que realiBar una bJsqueda !o2pleta.
UT !-2o lo sabeV
M'()L guarda estad*sti!as de !ada tabla que le a'udan a pre:er el resultado
que tendr/ una deter2inada estrategia de resolu!i-n.
*.1.7. 1antenimiento
3ener los *ndi!es en buen estado puede ser !r*ti!o para el rendi2iento de nuestro
ser:idor. %.ortunada2ente 5a' po!as !osas que tenga2os que 5a!er.
En pri2er lugar, si quieres !ono!er las !ara!ter*sti!as de un *ndi!e, debes utiliBar
el !o2ando
SHOW I9<EOES =RO$ t!6l!
8btendr/s in.or2a!i-n detallada del *ndi!e o *ndi!es de.inidos para la tabla.
%de2/s, si :es que un *ndi!e est/ .allando =1er 8pti2iBa!i-n> puedes
opti2iBarlo re.res!ando sus estad*sti!as. ?ara ello, utiliBa el !o2ando
OCTI$IUE t!6l!
%s*, M'()L releer/ la tabla ' re!rear/ los *ndi!es a!tualiBando sus estad*sti!as.
-.2. Consultas
%de2/s del diseHo del 2odelo de datos, !on la !rea!i-n de tablas ' rela!iones, la ele!!i-n
de los 2otores de al2a!ena2iento ' la !rea!i-n de *ndi!es, 5a' otro punto en el que se
puede opti2iBar el rendi2iento de nuestra base de datos. (e trata del pro!eso de
resolu!i-n de !onsultas.
?ero, para sa!arle el 2/xi2o pro:e!5o, debe2os saber pri2ero !-2o .un!ionaI
*.2.1. %roceso de 'onsulta
Cada :eB que M'()L re!ibe una !onsulta, e@e!uta el siguiente pro!esoI
1.@ La Cac&H de Consultas
M'()L e@e!uta un algorit2o de 5as5 sobre la !onsulta re!ibida ' 2ira a :er
si tiene alguna !onsulta idCnti!a en su !a!5C de !onsultas.
(i es as*, no se 2olesta en seguir, de:uel:e el resultado !a!5eado ', Ma otra
!osaN.
Este pro!eso de 5as5, aunque es 2u' r/pido, 5a!e que !onsultas
Miguel Jaque Barbero (mjaqueil!ebenson"com# $)
sint/!ti!a2ente idCnti!as, pero es!ritas de .or2a di.erente, no puedan ser
identi.i!adas ', por lo tanto, no apro:e!5en las :enta@as de la !a!5C. %s* que, te
!uidado !on los espa!ios en blan!o.
%.ortunada2ente, lo nor2al es que sean apli!a!iones in.or2/ti!as quienes
la!en !onsultas !ontra la base de datos ' no usuarios 5u2anos. %s* que el
riesgo de que dos !onsultas iguales tengan di.erente sintaxis es 2u' ba@o.
M'()L 5a!e alguna Mtra2paN. En realidad s-lo se 2olesta en M5as5earN las
!onsultas de tipo M(ELEC3N, puesto que el resto no estar/n !a!5eadas.
La !a!5C de !onsultas se a!ti:a !on la :ariable quer'\!a!5e\t'pe =en el
.i!5ero 2'.!n.>.
Kn :alor a 1 5ar/ que todas las !onsultas de tipo (ELEC3 sean !a!5eadas,
sal:o que expresa2ente indiquen lo !ontrario 2ediante el 2odi.i!ador
()L\48\C%C&E.
Kn :alor de quer'\!a!5e\t'pe igual a 2 5ar/ lo !ontrario. Las !onsultas no
ser/n !a!5eadas sal:o que expresa2ente lo soli!iten !on ()L\C%C&E. %s* es
posible !ontrolar ' 2e@orar la !alidad de la !a!5C.
SELEET S%L7EAEHE =RO$ cl-enteN
". Parseado
(i la !onsulta no est/ !a!5eada, M'()L la parsea. El parseo tiene !o2o
ob@eti:o !o2probar la !orre!!i-n sint/!ti!a de la !onsulta ' di:idirla en sus
ele2entos 2/s b/si!os.
?ara ello, identi.i!a de quC tipo de !onsulta se trata =(ELEC3, ,4(E#3,
7#%43, %L3E#...>, quC tablas est/n in:olu!radas, quC di!e la !lausula
D&E#E ' si 5a' alguna pista para la resolu!i-n.
%. Plani0icacin
3ras el parseo, M'()L debe de!idir !-2o :a a resol:er la !onsulta. Esta es
la parte 2/s interesante ' a la que dedi!are2os luego 2/s espa!io. (u ob@eti:o
es estable!er el plan 2/s !on:eniente para resol:er la !onsulta.
). 81ecucin
T esta es la parte 2/s sosa. M'()L e@e!uta el plan diseHado para resol:er la
!onsulta.
1a2os !on el ?lani.i!ador
$( Manual de Supervivencia del Administrador de MySQL
*.2.2. El %lani#icador
El plani.i!ador de M'()L es un ele2ento !r*ti!o para el rendi2iento. Est/ en
!onstante e:olu!i-n ' re!oge la experien!ia ' sabidur*a a!u2ulada por los
progra2adores de M'()L.
%5ora bien, el plani.i!ador es genCri!o para !ualquier !onsulta, as* que no est/
espe!*.i!a2ente diseHado para tu base de datos ni para tus proble2as. ?or eso es
2u' !on:eniente que !onoB!as !-2o .un!iona ' sepas resol:er posibles proble2as.
(*, es posible aunque po!o .re!uente, que el ?lani.i!ador de M'()L to2e
de!isiones que no son las 2/s ade!uadas para alguna !onsulta !on!reta. %s* es la
:ida.
?ero !on lo que :a2os a :er, podr/s dete!tarlo ' !orregirlo.
3en en !uenta que el plani.i!ador debe to2ar una de!isi-n 2u' r/pida sobre el
2e@or !a2ino a seguir. 4o puede probar todas las op!iones porque pasar*a 2/s
tie2po plani.i!ando que resol:iendo. T debe to2ar sus de!isiones !on in.or2a!i-n
par!ial sobre, por e@e2plo, la e.e!ti:idad de un *ndi!e o el orden 2/s !on:eniente
de realiBar una !adena de @oins.
%.ortunada2ente pode2os saber quC est/ pensando re!urriendo al !o2ando
EQ?L%,4.
8l Comando 8LPLA>
El !o2ando EQ?L%,4 nos :a a 2ostrar el plan de e@e!u!i-n que M'()L
tiene para una deter2inada !onsulta.
EOCLAI9 SELEET @ =RO$ cl-ente WHERE -d#G4 V8
@@@@@@@@@@@@@@@@@@@@@@@@@@@5. r&' @@@@@@@@@@@@@@@@@@@@@@@@@@@
-dJ 5
select7typeJ SI$CLE
t!6leJ cl-ente
typeJ c&nst
p&ss-6le7,eysJ CRI$AR>
,eyJ CRI$AR>
,ey7lenJ H
refJ c&nst
r&'sJ 5
E*tr!J
5 r&' -n set L4.44 secM
Co2o :es, EQ?L%,4 de:uel:e un registro por !ada tabla in:olu!rada en la
!onsulta !on una serie de !a2pos que debe2os interpretar. 1a2os a elloI
id: ,denti.i!a !ada !onsulta de la !onsulta... si 5a' !onsultas
anidadas.
select_type: ,ndi!a el papel de la tabla en la !onsulta. Los :alores
posibles sonI (,M?LE, ?#,M%#T, K4,84, ;E?E4;E43 K4,84,
(KB(ELEC3 ' ;E#,1E;.
Miguel Jaque Barbero (mjaqueil!ebenson"com# $,
table: 4o2bre de la tabla de la que M'()L leer/ los registros.
type: ,ndi!a el tipo de @oin que e.e!tuar/ M'()L. Los :alores
posibles sonI C84(3, (T(3EM, E)\#EL, #EL, #%47E, ,4;EQ '
%LL.
possible_keys: Lista de *ndi!es que M'()L puede utiliBar para
resol:er la !onsulta.
key: 4o2bre del *ndi!e que M'()L 5a elegido para resol:er la
!onsulta. M'()L s-lo utiliBar/ un *ndi!e por !onsulta.
key_len: 3a2aHo del *ndi!e en b'tes.
ref: Las !olu2nas o :alores que se utiliBar/n en el *ndi!e.
rows: 4J2ero esti2ado de .ilas que M'()L !onsidera que tendr/
que exa2inar para resol:er la !onsulta.
Extra: ,n.or2a!i-n adi!ional.
El orden en el que apare!en los registros indi!a el orden en el que M'()L
utiliBar/ las tablas. Esto es 2u' rele:ante para el !aso de @oins.
EOCLAI9 SELEET cl-ente.-dA cuent!.-d =RO$ cl-ente WOI9 cuent!
O9 cuent!.-d7cl-ente # cl-ente.-dV8
@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5. r&' @@@@@@@@@@@@@@@@@@@@@@@@@@@
-dJ 5
select7typeJ SI$CLE
t!6leJ cuent!
typeJ ALL
p&ss-6le7,eysJ 9BLL
,eyJ 9BLL
,ey7lenJ 9BLL
refJ 9BLL
r&'sJ 5KG3
E*tr!J
@@@@@@@@@@@@@@@@@@@@@@@@@@@ G. r&' @@@@@@@@@@@@@@@@@@@@@@@@@@@
-dJ 5
select7typeJ SI$CLE
t!6leJ cl-ente
typeJ eq7ref
p&ss-6le7,eysJ CRI$AR>
,eyJ CRI$AR>
,ey7lenJ H
refJ 6!nc&.cuent!.-d7cl-ente
r&'sJ 5
E*tr!J Bs-n/ -nde*
G r&'s -n set L4.44 secM
En este !aso, :e2os que la inten!i-n de M'()L es bus!ar pri2ero en la
tabla !uenta, sin utiliBar ningJn *ndi!e. Esti2a que pro!esar/ 172" .ilas. T,
para !ada .ila de la pri2era tabla, tendr/ que leer s-lo una .ila de la segunda
tabla.
$3 Manual de Supervivencia del Administrador de MySQL
3a2biCn nos di!e que la rela!i-n entre a2bas tablas es de equi:alen!ia
=eq\re.>. Es de!ir, que realiBar/ el @oin utiliBando una rela!i-n de igualdad
=cuent!.-d7cl-ente # cl-ente.-d> ' nos indi!a sobre quC !a2po de la
tabla anterior la realiBar/ =re.>. ?or Jlti2o, ' este es un !aso espe!ial, !o2o de
la segunda tabla s-lo ne!esita el !a2po id ' este pertene!e al *ndi!e que :a a
utiliBar =?#,M%#T>, nos indi!a que s-lo ne!esitar/ el *ndi!e =Ksing ,ndex>. Es
de!ir, que no tendr/ que leer la tabla de datos porque toda la in.or2a!i-n que
ne!esita est/ en el *ndi!e que :a a utiliBar.
?odr*a2os obligar a M'()L a 2odi.i!ar su plan de e@e!u!i-n si, por
e@e2plo, aHadi2os a la !onsulta una !lausula D&E#E sobre id\!liente que
li2ite seria2ente el nJ2ero de resultados de esta tabla. M'()L 2odi.i!ar/ su
plan de e@e!u!i-n para utiliBar pri2ero !liente ' restringir el nJ2ero de .ilas
antes de realiBar el @oin.
En de.initi:a, pode2os !ono!er per.e!ta2ente !-2o :a a resol:er M'()L
una !onsulta :iendo la expli!a!i-n de la 2is2a =EQ?L%,4>.
Consideraciones
&a' algunas !onsidera!iones i2portantes que in.luir/n en la e.i!a!ia del
plani.i!ador.
2alta de $iversidad: ,n!luso teniendo 2illones de registros en una
tabla, es posible que M'()L opte por no utiliBar un *ndi!e si esti2a
que no est/ su.i!iente2ente di:ersi.i!ado. (i M'()L esti2a que la
!onsulta de:ol:er/ 2/s del "0X de las .ilas de la tabla, !onsiderar/ 2/s
!on:eniente es!anearla !o2pleta2ente ' no 5a!er dobles opera!iones
le'endo el *ndi!e ' luego bus!ando los datos.
+rdenacin por ndices: 8rdenar los resultados requiere tie2po,
en o!asiones in!luso 2/s del que lle:- re!abar los datos. En o!asiones
puedes e:itarte el pro!eso de ordena!i-n si utiliBas un *ndi!e 2Jltiple.
%s*, tus datos se re!oger/n ordenados.
ndices <e4tuales: 4o te ol:ides de re!urrir a los *ndi!es textuales
en lugar de a los t*pi!os L,9E.
Pistas
?ode2os a'udar al plani.i!ador d/ndole algunas pistas sobre !-2o a!tuar. %l .in
' al !abo, nosotros !ono!e2os nuestros datos.
?or e@e2plo, pode2os proponerle que !onsidere deter2inados *ndi!es e ignore el
resto !on el 2odi.i!ador K(E ,4;EQ
SELEET @ =RO$ t!6l! BSE I9<EO LXnd-ce5A Xnd-ceGM
8 pode2os !onseguir que ignore un *ndi!e deter2inado ' eli@a entre el resto
disponiblesI
Miguel Jaque Barbero (mjaqueil!ebenson"com# $*
SELEET @ =RO$ t!6l! I89ORE I9<EO LXnd-ceM
8 pode2os ponernos serios ' obligarle a que utili!e un *ndi!e deter2inado, le
guste o no le gusteI
SELEET @ =RO$ t!6l! =OREE I9<EO LXnd-ceM
(i :e2os que el orden de los @oins que 5a elegido M'()L no es el 2/s
!on:eniente, pode2os obligarle a un orden deter2inado utiliBando un (3#%,7&3
J8,4.
(i sabe2os que al !liente le lle:ar/ tie2po re!oger los datos de una !onsulta
extensa, pode2os pedirle a M'()L que guarde el resultado en una tabla te2poral.
;e esta .or2a liberar/ antes los bloqueos. ?ara ello, utiliBa2os el 2odi.i!ador
()L\BKLLE#\#E(KL3.
%s* 2is2o, si pre:e2os que el resultado ser/ 2u' grande, pode2os a:isar a
M'()L para que lo tenga en !uenta ' to2e de!isiones 2/s arriesgadas. ?ara ello,
utiliBa2os el 2odi.i!ador ()L\B,7\#E(KL3.
4o te ol:ides ta2po!o de obligar a M'()L a !a!5ear los resultados si sabes que
se repetir/ .re!uente2ente la 2is2a !onsulta. ?or e@e2plo, la lista de pobla!iones,
pa*ses, pro:in!ias, usuarios...
<rucos Sencillos
&a' algunos tru!os 2u' sen!illos que te pueden a'udar a resol:er !onsultas
que, de otra .or2a, no ser*an tan e.i!ientes.
?or e@e2plo, 5a' o!asiones en que en lugar de realiBar un @oin, es pre.erible
di:idir la !onsulta en dos ' utiliBar :ariables de ser:idor.
SELEET cuent!.-d =RO$ cl-enteA cuent! WHERE
cl-ente.-d # cuent!.-d7cl-ente A9< cl-ente.!pell-d&s
# QL.pe+ CRre+SN
?ero ta2biCn puede resol:erse !o2oI
SELEET ;-d J# -d =RO$ cl-ente WHERE !pell-d&s #
QL.pe+ CRre+SN
SELEET -d =RO$ cuent! WHERE -d7cl-ente # ;-dN
8tro tru!o ./!il es utiliBar uniones en lugar de 8#.
SELEET -d7&per!c-.n =RO$ m&"-m-ent& WHERE -mp&rte
) P4444 OR -mp&rte Y P4444N
$5 Manual de Supervivencia del Administrador de MySQL
Es lo 2is2o queI
LSELEET -d7&per!c-.n =RO$ m&"-m-ent& WHERE -mp&rte
) P444M B9IO9 LSELEET -d7&per!c-.n =RO$ m&"-m-ent&
WHERE -mp&rte Y P444M
Los planes de e@e!u!i-n para a2bas pueden ser 2u' di.erentes.
-.3. Rendi*iento del er5idor
(in!era2ente, ZZ48 ;EBE( LEE#3E E(3E %?%#3%;8[[
Mu!5as :e!es, los ad2inistradores de bases de datos optan por la solu!i-n ./!il... 2/s
5ardEare. T es un error.
Las 2e@oras en el ser:idor, por 2u' e.e!ti:as que puedan ser, s-lo podr/n 2e@orar el
rendi2iento de la base de datos en un orden de 2agnitud. Mu!5as :e!es ni eso.
(in e2bargo, las 2e@oras en el diseHo del 2odelo de datos o las 2e@oras sobre las
!onsultas... Zprodu!en 2e@oras de " -rdenes de 2agnitud[
%s* que si lo que bus!as es 2e@orar el rendi2iento de tu base de datos, Zbus!a en los
!ap*tulos anteriores[
?ero, en el re2oto !aso de que 'a 5a'as 2e@orado todo lo 2e@orable en el diseHo de tus
bases de datos ' de tus !onsultas... ' s-lo en ese !aso, e!5C2osle un :istaBo a lo que
pode2os 2e@orar en el ser:idor.
*.3.1. ;actores de ,endimiento
En el rendi2iento del ser:idor de base de datos, !ada uno de los re!ursos
5ardEare del ordenador sobre el que se e@e!uta in.lu'e de 2anera di.erente.
$iscos
(in duda las opera!iones de E/( son las que 2/s pueden li2itar el
rendi2iento del ser:idor.
Co2parado !on otros ele2entos !o2o la C?K o la 2e2oria, los dis!os =por
2u' buenos que sean> son unas tortugas. %s* que lo nor2al es que, para
!ualquier !onsulta que tenga que a!udir a dis!o, el tie2po de las opera!iones
de E/( sea el 2a'or proble2a.
El tie2po de bJsqueda de un dis!o depende de dos .a!toresI el tie2po de
posi!iona2iento de la !abeBa ' el tie2po de le!tura de se!tor.
El pri2ero es el tie2po ne!esario para desplaBar la !abeBa desde su posi!i-n
a!tual 5asta el se!tor del dis!o que !ontiene los datos. El segundo :alor es el
tie2po que tarda la !abeBa en a!!eder al ini!io de los datos ' leerlos. Este
Jlti2o tie2po depende de la :elo!idad de rota!i-n del dis!o.
T aqu* tene2os un punto de 2e@ora. (i puedes optar por dis!os de 20.000
Miguel Jaque Barbero (mjaqueil!ebenson"com# $$
#?M, 2e@or que si son de 1.000. El dinero que in:iertas te ser/
re!o2pensado.
8tra op!i-n es utiliBar #%,;s. Las distintas !on.igura!iones de dis!os en
#%,; te per2itir/n 2e@orar en dos aspe!tosI .iabilidad ' rendi2iento.
#espe!to a .iabilidad, algunas !on.igura!iones garantiBan el .un!iona2iento
aun en el !aso de .allo en uno de los dis!os. (on !on.igura!iones !on
redundan!ia, !o2o #%,; 1 o #%,; 10.
8tras !on.igura!iones, per2iten que una 2is2a opera!i-n de le!tura sea
atendida por :arios dis!os, 5a!iendo que el tie2po de a!!eso sea 2enor, !o2o
es el !aso de #%,; o #%,; 10.
Memoria
;espuCs de los dis!os la 2e2oria #%M es el siguiente .a!tor li2itante.
En los siste2as Linux, se utiliBa la 2e2oria #%M !o2o !a!5C, tanto de
dis!o !o2o de M'()L.
(i la 2e2oria es su.i!iente2ente grande, ' no 5a' otras apli!a!iones
us/ndola, es posible que al realiBar una !onsulta parte de los datos 'a estCn
!a!5eados. 8, si no son los datos, es 2u' probable que una parte o in!luso todo
el *ndi!e de una tabla a!!edida .re!uente2ente estC disponible en la !a!5C,
a5orrando un tie2po :alioso.
?or eso eso es !r*ti!o intentar e:itar la polu!i-n de !a!5C que se produ!e al
realiBar bJsquedas en toda una tabla sin utiliBar *ndi!es. 8 al 2enos, estable!er
una pol*ti!a para la !a!5C de !onsultas de M'()L.
?or otra parte, si tu base de datos o!upa 12 Mb'tes ' el ser:idor tiene 1
7b'te, aHadir 2/s 2e2oria no ser:ir/ de nada.
CPE
Es raro que la C?K a!tJe !o2o li2itador del rendi2iento de la base de
datos. Co2parada !on la 2e2oria ' !on los dis!os es 2u!5o 2/s r/pida.
(in e2bargo, 5a' algunas opera!iones que s* !onsu2en C?K. Este es el
!aso de la ordena!i-n de resultados ' de las opera!iones sobre resultados
=2ate2/ti!as, .un!iones de strings, et!.>
%l realiBar opera!iones !o2o C&EC9 3%BLE s* es posible que el !onsu2o
de C?K sea 2u' intensi:o, igual que al realiBar !onsultas sin *ndi!es.
-ed
4o es .re!uente tener proble2as de !ongesti-n de red !on M'()L, sal:o
que esta estC 2al !on.igurada.
La Jni!a !on.igura!i-n algo deli!ada es la repli!a!i-n. (i 0 es!la:os
intentan repli!arse en l*nea !on un Jni!o 2aestro, es posible que ese inter.aB
estC Malgo !ongestionadoN.
$% Manual de Supervivencia del Administrador de MySQL
*.3.2. (denti#icacin de %roblemas
Cono!iendo la in.luen!ia de !ada ele2ento, tene2os que ponernos 2anos a la
obra para deter2inar quC le pasa a nuestro ser:idor.
?ara eso, tene2os que utiliBar las 5erra2ientas del siste2a.
8l Comando top
top nos per2itir/ saber quC pro!esos !onsu2en 2/s re!ursos del siste2a '
algunos datos generales.
(i :e2os que el uso de la C?K es !er!ano al 100X, ob:ia2ente tendre2os
un !uello de botella a5*. ?ero si los pro!esos que 2/s C?K !onsu2en ='
apare!en pri2ero en top> no son de 2'sql... el proble2a no es nuestro.
(i !on top :e2os que nuestra C?K est/ relati:a2ente tranquila, tendre2os
que !o2probar la 2e2oria.
top ta2biCn nos o.re!e esta in.or2a!i-n, pode2os :er el !onsu2o de
2e2oria de !ada pro!eso ' el !onsu2o general. (i la 2e2oria de sEap est/
2u' utiliBada... tene2os un proble2a. T tendre2os que in:estigar quC pro!eso
5a sido.
?or Jlti2o, si tanto la C?K !o2o la 2e2oria est/n bien, tendre2os que
!o2probar los dis!os. ?ara eso, pode2os utiliBar :2stat.
8l Comando vmstat
M1irtual Me2or' (tattisti!sN. Este !o2ando nos da in.or2a!i-n no solo
sobre la 2e2oria :irtual, sino sobre uso de dis!os, traps ' a!ti:idad de la C?K.
Las !olu2nas bi ' bo nos seHalar/n el uso que est/ 5a!iendo el siste2a de
los dispositi:os de bloques.
Si el pro/lema es de disco
(i el pro!eso 2'sql est/ realiBando de2asiadas opera!iones de dis!o, el
proble2a ser/, probable2ente, de !onsultas ine.i!ientes.
La 2e@or solu!i-n ser/ a!ti:ar el log de !onsultas lentas ' de !onsultas sin
*ndi!e para luego re:isarlas de una en una :iendo su plan de e@e!u!i-n.
8tro proble2a puede ser la !rea!i-n de tablas te2porales en dis!o. %l
resol:er una !onsulta, M'()L puede ne!esitar es!ribir una tabla te2poral.
Esto queda re.le@ado en plan de e@e!u!i-n !on el extra MKsing 3e2porar'N,
aunque no indi!a si !rear/ la tabla en 2e2oria o en dis!o.
Esto depende del :alor de t2p\table\siBe, que por de.e!to est/ en "2MB.
Las tablas te2porales en dis!o se !rean en /t2p. ?ara !o2probar quC est/
pasando, puedes 2onitoriBar las :ariables !reated\t2p\dis6\tables '
!reated\te2p\tables para :er las rela!iones entre ellas =M'()L
%d2inistrator>.
(i la rela!i-n es 2ala ' se est/n !reando de2asiadas tablas te2porales en
Miguel Jaque Barbero (mjaqueil!ebenson"com# $&
dis!o, puedes in!re2entar t2p\table\siBe. ?ero !uidado, si te pasas ' los
t5reads de M'()L intentan !rear de2asiadas tablas en 2e2oria, el siste2a
e2peBar/ a sEapear.
8tra op!i-n es 2ontar un siste2a de dis!os r/pidos para /t2p.
(i el proble2a no ta2po!o en las tablas te2porales, puedes !on!entrarte en
utiliBar al 2/xi2o la !a!5C de !onsultas. 8, !o2o Jlti2a op!i-n, !a2bia a un
#%,; 0, #%,; o #%,; 10 que di:idir/n las opera!iones de dis!o entre
distintos :olJ2enes.
Si el pro/lema es de CPE
En este !aso debe2os !oger las !onsultas lentas ' so2eterlas a
ben!52ar6ing. %quellas que al!an!en r/pida2ente el 100X de utiliBa!i-n de
C?K debe2os analiBarlas !on !uidado.
4o es posible eli2inar el traba@o de C?K. (i tienes que !al!ular el M; de
100.000 registros de resultados, es posible que la C?K estC algo !argada. ?ero
UquC pode2os 5a!erV
Las solu!iones son po!asI
a> ?asar el !/l!ulo al ser:idor de apli!a!iones o in!luso al !liente... si
se de@a.
b> ?oner 2/s sili!io. Bien !a2biar a otro pro!esador 2e@or o poner
:arios pro!esadores.
!> ?oner 2/s ser:idores ' distribuir la !arga entre ellos.
Cierta2ente, si 5a' que realiBar 2illones de !/l!ulos no 5a' 2u!5o que
poda2os 5a!er.
Si el pro/lema es de Memoria
;i2ensionar !orre!ta2ente el uso de 2e2oria de M'()L requiere !ierto
equilibrio. M'()L tiene tanto bu..ers globales =para todos los pro!esos> !o2o
bu..ers aso!iados a !ada pro!eso. %l 2enos deber*a2os tener 2e2oria
su.i!iente para los bu..ers globales ' para el :alor de los de pro!eso
2ultipli!ados por el nJ2ero de !onsultas si2ultaneas esperadas.
Los bu..ers por t5read sonI sort\bu..er, 2'isa2\sort\bu..er, read\bu..er,
@oin\bu..er ' read\rnd\bu..er.
T los globalesI 6e'\bu..er, innodb\bu..er\pool, innodb\log\bu..er,
innodb\additional\2e2\pol ' net\bu..er
El proble2a 2/s !o2Jn es di2ensionar los bu..ers para la apli!a!i-n
prin!ipal del ser:idor. Luego, !o2o todo .un!iona tan bien, se :an aHadiendo
otras apli!a!iones. ?ero si estas tienen 2u!5os usuarios si2ult/neos,
!onsu2ir/n 2/s 2e2oria de la ini!ial2ente pre:ista. Enton!es el siste2a
sEapear/ ' rendi2iento !aer/. %l !aer, las !onsultas tardan 2/s !on lo que los
pro!esos se a!u2ular/n. Cada :eB 5abr/ 2/s, !ada :eB sEapear/ 2/s ' !ada
:eB ser/ 2/s lento. Es ne!esario re!on.igurar el ta2aHo de los bu..ers,
$' Manual de Supervivencia del Administrador de MySQL
espe!ial2ente de los bu..ers por t5read.
Las op!iones son po!asI
a> %Hadir 2/s 2e2oria. Esto 2e@orar/ 2u!5o el rendi2iento.
b> #edu!ir el nJ2ero de !onexiones per2itidas =2ax\!onne!tions>.
%( Manual de Supervivencia del Administrador de MySQL
Captulo 7. Replicacin
?ara poder disponer de una solu!i-n de base de datos !o2pleta, en o!asiones es ne!esario
disponer de repli!a!i-n de datos.
La repli!a!i-n nos aporta :arias :enta@asI
4os per2ite disponer de los 2is2os datos en ubi!a!iones distintas.
La!ilita la realiBa!i-n de !opias de seguridad.
%porta redundan!ia ante .allos.
?er2ite distribuir la !arga entre :arios ser:idores.
(in e2bargo, no es la pana!ea. En !on!reto, la repli!a!i-n entre dos ser:idores no se
realiBa en tie2po real, por lo que este tipo de solu!iones no pueden utiliBarse para la
trans2isi-n de datos en tie2po real. ?ara eso, existen los !lusters.
7.1. Concepto
M'()L i2ple2enta una arquite!tura de repli!a!i-n MaestroGEs!la:o. Es de!ir, un
ser:idor es!la:o !opia ' repli!a la in.or2a!i-n de su 2aestro. ?or lo tanto, a2bos
siste2as tendr/n la 2is2a in.or2a!i-n =las 2is2as bases de datos !on los 2is2os datos>.
Esto se !onsigue utiliBando el log binario. Este log registra todas las !onsultas que
2odi.i!an los datos del ser:idor, en este !aso del 2aestro. El pro!eso es el siguienteI
1. El es!la:o se !one!ta al ser:idor ' re!oge una !opia del log binario. En !on!reto,
de todos aquellos logs binarios que toda:*a no 5a'a pro!esado.
2. El es!la:o apli!a el log binario del 2aestro sobre sus propios datos, adquiriendo
as* la 2is2a in.or2a!i-n ' estado que el 2aestro.
Es de!ir, se trata de una repli!a!i-n unidire!!ional ' as*n!rona =.rente a la repli!a!i-n
2ultidire!!ional ' s*n!rona de un !luster>.
Los !a2bios sobre los datos deben realiBarse sie2pre en el 2aestro. %unque las !onsultas
pueden 5a!erse sobre !ualquiera de ellos. Luego :ere2os arquite!turas 2/s !o2pli!adas
' .lexibles.
L*@ate que en esta arquite!tura, el 2aestro no sabe !asi nada del es!la:o. Entre otras !osas,
no sabe ni !uantos es!la:os tiene ni si estos est/n al d*a o no. Es responsabilidad de los
es!la:os a!!eder al log binario ' a!tualiBar sus datos !on:eniente2ente.
Miguel Jaque Barbero (mjaqueil!ebenson"com# %,
7.2. Con"i#uracin
La !on.igura!i-n es tan sen!illa !o2o el !on!epto.
A.2.1. Ser8idores 9ue8os
(i tene2os dos ser:idores nue:os, sin datos, bastar/ !on 5a!er el siguiente
pro!eso !on los ser:idores parados
1"
I
1. Crea2os en el ser:idor una !uenta para el usuario de repli!a!i-n.
8RA9T RECLIEATIO9 SLAVE O9 @.@ TO 6l!de;IC7escl!"&
I<E9TI=IE< B> ?runner?
2. Con.igura el 2aestro. (-lo ne!esitas estable!er un :alor de ser:erGid en
2'.!n. di.erente a !ualquier otro. T asegJrate de que el log binario est/
a!ti:o.
l&/6-n
ser"er-d # 5
". Con.igura el !liente. 3endr/s que estable!er las di.erentes :ariables de
repli!a!i-nI
ser"er-d # G
m!ster1&st # -p7m!estr&
m!steruser # 6l!de
m!sterp!ss'&rd # runner
m!sterp&rt # 334I
$. %rran!a el 2aestro.
. %rran!a el es!la:o.
6. (in!ron*Balos =1er 7.2.">
A.2.2. El VieBo 1aestro
La situa!i-n anterior es la ideal. Kn 2aestro sin in.or2a!i-n ' un nue:o es!la:o.
?ero no es la 5abitual.
Lo 5abitual es que tenga2os un ser:idor ', por 2oti:os de rendi2iento,
.iabilidad o in:estiga!i-n, quera2os !rearle un es!la:o. (egui2os ne!esitando un
es!la:o :a!*o, pero pode2os partir de un M:ie@o 2aestroN si tene2os !uidado.
Con a2bos ser:idores igual2ente detenidos, 5are2os el 2is2o pro!eso de
!on.igura!i-n des!rito anterior2ente.
?ero, antes de arran!ar los ser:idores, tene2os que lle:ar al es!la:o al 2is2o
estado en que se en!uentra su 2aestro, para lo que nos bastar/ !on una si2ple !opia
de todos sus .i!5eros... in!lu'endo los logs binarios.
1" 3C!ni!a2ente es posible, ' no 2u' !o2pli!ado, !on.igurar un ser:idor es!la:o sin detener el ser:idor. ?ero :a2os !on un !aso
2/s sen!illo.
%3 Manual de Supervivencia del Administrador de MySQL
Kna :eB listo, podre2os arran!ar a2bos.
A.2.3. SincroniCacin
?or Jlti2o, ser/ ne!esario sin!roniBar el es!la:o !on el ser:idor para que sepa
desde quC posi!i-n del 2aestro debe repli!ar.
?ara eso, pri2ero tene2os que saber en quC posi!i-n se en!uentra el 2aestro.
E@e!uta2os, en el 2aestro, el !o2andoI
SHOW $ASTER STATBSN
T nos dir/ !ual es el .i!5ero de log a!tual ' su o..set. %5ora, en el es!la:o,
e@e!uta2os los !o2andosI
STOC SLAVEN
EHA98E $ASTER TO $ASTER7LO87=ILE #
?f-c1er&7l&/7m!estr&?A $ASTER7LO87COS #
p&s7l&/7m!estr&N
START SLAVEN
;onde .i!5ero\log\2aestro ' pos\log\2aestro son los par/2etros que 5e2os
obtenido anterior2ente del 2aestro.
T listo. En el log de errores podr/s :er si 5as tenido algJn proble2a.
A.2.4. 1onitoriCacin
?or Jlti2o, querre2os saber si nuestros siste2as .un!ionan !orre!ta2ente.
#espe!to al 2aestro 5a' po!o que saber. El !o2ando (&8D M%(3E# nos
indi!ar/ el .i!5ero de log que est/ utiliBando ' su posi!i-n en Cl. ?ero el 2aestro no
sabe nada de sus es!la:os, ni si repli!an o no.
?ara 2onitoriBar los es!la:os, pode2os re!urrir a dos !o2andosI
SHOW SLAVE STATBSN
SHOW CROEESSLISTN
El pri2ero nos o.re!er/ in.or2a!i-n a!tualiBada del estado de la repli!a!i-n,
in!lu'endo el tie2po de retraso que lle:a el es!la:o respe!to al 2aestro.
El segundo !o2ando nos 2ostrar/ la lista de pro!esos a!ti:os, entre los que
deben en!ontrarse dos aso!iados a la repli!a!i-nI (la:e ,8 ' (la:e ()L.
7.3. Ar(uitecturas
La arquite!tura que 5e2os :isto =un 2aestro ' un es!la:o> es la 2/s sen!illa, pero no la
Jni!a. ;e 5e!5o, se pueden !rear arquite!turas 2u' di:ersas sie2pre que se !u2plan las
siguientes reglasI
Miguel Jaque Barbero (mjaqueil!ebenson"com# %*
Cada es!la:o s-lo podr/ tener un ser:erGid que ser/ Jni!o.
Cada es!la:o s-lo podr/ tener un 2aestro.
Kn 2aestro puede tener :arios es!la:os.
Kn es!la:o puede ser 2aestro de otros es!la:os.
Con estas reglas en !uenta, re:ise2os algunas !on.igura!iones 5abitualesI
Maestro con Garios 8sclavos
Esta es la !on.igura!i-n 2/s 5abitual. Kn 2aestro repli!a su in.or2a!i-n en
:arios es!la:os.
(i el 2aestro !ae, !ualquiera de ellos podr/ asu2ir su puesto.
En esta !on.igura!i-n, ' en
2u!5as otras, resulta
!on:eniente que el 2aestro
ta2biCn estC !on.igurado para
a!tuar !o2o es!la:o. ;e esta
.or2a, tras re!uperarse de su
!a*da, podr/ repli!ar la
in.or2a!i-n ' a!tualiBarse.
$os Maestros
Esta 48 es la !on.igura!i-n re!o2endada... pero s* es una !on.igura!i-n
posible !on un po!o de !uidado.
(i tene2os dos 2aestros, !ada uno a!tuando !o2o es!la:o del otro, se
produ!ir/n a!tualiBa!iones de in.or2a!i-n en a2bos. El siste2a de repli!a!i-n
de M'()L no in!orpora ningJn siste2a para la resolu!i-n de !on.li!tos. %s*
que si una 2is2a .ila es 2odi.i!ada en uno de los 2aestros ' borrada en el
otro, la repli!a!i-n .allar/. Lo 2is2o o!urrir/ si se insertan .ilas !on una
2is2a !la:e pri2aria en a2bos ser:idores.
?ero, todo eso es !ontrolable. (i pode2os garantiBar que estas situa!iones
no de !on.li!to no se produ!ir/n, podre2os !on.igurar dos o 2/s 2aestros
repli!ando entre s*.
$os Maestros -eplicados
Esta es la 2is2a !on.igura!i-n que la anterior, pero !ada 2aestro tiene un
es!la:o para repli!ar su in.or2a!i-n.
%5 Manual de Supervivencia del Administrador de MySQL
Anillo de Maestros
Esta es una !on.igura!i-n en la que tres 2aestros
repli!an su in.or2a!i-n entre s*.
(igue siendo !r*ti!o e:itar los !on.li!tos entre ellos.
Anillo de Maestros -eplicados
La 2is2a arquite!tura, pero
aHadiendo es!la:os a !ada 2aestro.
KerarCua de 8sclavos
Kna de las arquite!turas 2/s t*pi!as. La in.or2a!i-n de un 2aestro es
repli!ada en !as!ada a tra:Cs de una pir/2ide de es!la:os.
Esta !on.igura!i-n e:ita que se saturen los re!ursos del 2aestro al disponer
de un ele:ado nJ2ero de es!la:os.
Miguel Jaque Barbero (mjaqueil!ebenson"com# %$
%% Manual de Supervivencia del Administrador de MySQL
Captulo 8. $iblio#ra"a
La 2e@or .uente de in.or2a!i-n tC!ni!a sobre M'()L es, natural2ente, dev"mysql"com.
%de2/s est/ sie2pre a!tualiBada.
3a2biCn te re!o2iendo el libro M&ig5 ?er.or2an!e M'()LN, es!rito por Jere2' ;.
YaEodn' ' ;ere6 J. Balling, de la editorial 8_#eill'. Es 2u!5o 2/s legible que la
do!u2enta!i-n tC!ni!a de M'()L. 7ran parte de la in.or2a!i-n de este do!u2ento est/
basada en ese libro.

También podría gustarte