Por: Ing. Jos Jess Snc!e" #aras $es%s&.sanc!e"'g(ail.co( ) Tabla de Contenido ).Introd%cci*n............................................................................................................................................+ ,.-.$eti/o...................................................................................................................................................+ 0.Caractersticas de MySQL......................................................................................................................+ 0.)Prestaciones......................................................................................................................................1 0.,Li(itaciones.....................................................................................................................................1 +.2cceso a %n ser/idor MySQL.................................................................................................................3 +.)Conectandose con el ser/idor...........................................................................................................3 +.).)Ser/idores y Clientes................................................................................................................3 +.).,Conectarse y desconectarse......................................................................................................4 +.,Introd%cci*n de Sentencias...............................................................................................................4 +.,.)Sentencias.................................................................................................................................5 +.,.,Co(andos en (lti6les lneas..................................................................................................5 +.,.0Cadenas de caracteres.............................................................................................................)7 +.,.+896resiones y /aria.les..........................................................................................................)7 +.,.1896resiones.............................................................................................................................), +.0Proceso 6or lotes............................................................................................................................), +.+:sar .ase de datos..........................................................................................................................)3 +.1Prctica )........................................................................................................................................)5 1.Creaci*n y (ani6%laci*n de ta.las.......................................................................................................); 1.)Crear ta.las.....................................................................................................................................); 1.,Ti6o de datos..................................................................................................................................,0 1.,.)Ti6os de datos n%(ricos.......................................................................................................,0 1.,.,Cadenas de caracteres.............................................................................................................,+ 1.,.0#ec!as y !oras.........................................................................................................................,3 1.0Modi&icar Ta.las.............................................................................................................................,3 1.0.)2gregar y eli(inar col%(nas..................................................................................................,3 1.0.,Modi&icar col%(nas................................................................................................................,4 1.+-tras o6ciones................................................................................................................................,5 1.+.)Co6iar ta.las...........................................................................................................................,5 1.+.,Ta.las te(6orales...................................................................................................................,5 3.Cons%ltas...............................................................................................................................................,5 3.)La .ase de datos de(o....................................................................................................................,5 3.,Cons%ltar in&or(aci*n ...................................................................................................................07 3.,.)#%nciones a%9iliares ..............................................................................................................0) 3.0Mani6%laci*n de &ilas ....................................................................................................................0+ 3.+Prctica ,........................................................................................................................................01 3.1Prctica 0........................................................................................................................................03 4.2d(inistraci*n de MySQL...................................................................................................................04 4.)Instalaci*n de MySQL ...................................................................................................................04 4.,:s%arios y 6ri/ilegios ....................................................................................................................+7 4.,.)La sentencia <=2NT ............................................................................................................+) 4.,.,8s6eci&icaci*n de l%gares origen de la cone9i*n ...................................................................+, , 4.,.08s6eci&icaci*n de .ases de datos y ta.las ..............................................................................+0 4.,.+8s6eci&icaci*n de col%(nas ...................................................................................................++ 4.,.1Ti6os de 6ri/ilegios ...............................................................................................................++ 4.,.3-6ciones de encri6taci*n .......................................................................................................+3 4.,.4Li(ites de %so ........................................................................................................................+3 4.,.58li(inar 6ri/ilegios ...............................................................................................................+4 4.,.;8li(inar %s%arios ...................................................................................................................+4 4.,.)7La .ase de datos de 6ri/ilegios: (ys>l ................................................................................+4 4.0Prctica +........................................................................................................................................10 4.+Co6ias de seg%ridad .......................................................................................................................1+ 4.+.)(ys>l!otco6y .........................................................................................................................11 4.+.,(ys>ld%(6 ............................................................................................................................13 4.+.0=esta%rar a 6artir de res6aldos ...............................................................................................14 4.1=e6araci*n de ta.las ......................................................................................................................15 4.3Prctica 1........................................................................................................................................37 4.4=e6licaci*n ....................................................................................................................................37 4.4.)Pre6araci*n 6re/ia .................................................................................................................3) 4.4.,Con&ig%raci*n del ser/idor (aestro .......................................................................................3) 4.4.0Con&ig%raci*n del ser/idor escla/o .......................................................................................3, 4.5I(6ortaci*n y e96ortaci*n de datos ..............................................................................................30 4.5.)(ys>li(6ort ...........................................................................................................................3+ 4.5.,(ys>ld%(6 ............................................................................................................................31 5.Clientes <r&icos...................................................................................................................................33 5.)P!6(yad(in...................................................................................................................................33 5.,MySQL 2d(inistrator....................................................................................................................33 ;.=es%(en................................................................................................................................................33 0 1. Introduccin MySQL es %n siste(a gestor de .ases de datos ?S<BD@ DBMS 6or s%s siglas en inglsA (%y conocido y a(6lia(ente %sado 6or s% si(6licidad y nota.le rendi(iento. 2%n>%e carece de alg%nas caractersticas a/an"adas dis6oni.les en otros S<BD del (ercado@ es %na o6ci*n atracti/a tanto 6ara a6licaciones co(erciales@ co(o de entreteni(iento 6recisa(ente 6or s% &acilidad de %so y tie(6o red%cido de 6%esta en (arc!a. 8sto y s% li.re distri.%ci*n en Internet .a$o licencia <PL le otorgan co(o .ene&icios adicionales ?no (enos i(6ortantesA contar con %n alto grado de esta.ilidad y %n r6ido desarrollo. MySQL est dis6oni.le 6ara (lti6les 6lata&or(as@ la seleccionada 6ara los e$e(6los de este taller es <N:BLin%9. Sin e(.argo@ las di&erencias con c%al>%ier otra 6lata&or(a son 6rctica(ente n%las@ ya >%e la !erra(ienta %tili"ada en este caso es el cliente (ys>lCclient@ >%e 6er(ite interact%ar con %n ser/idor MySQL ?local o re(otoA en (odo te9to. De este (odo es 6osi.le reali"ar todos los e$ercicios so.re %n ser/idor instalado local(ente o@ a tra/s de Internet@ so.re %n ser/idor re(oto. Para la reali"aci*n de todas las acti/idades@ es i(6rescindi.le >%e dis6onga(os de los datos de acceso del %s%ario ad(inistrador de la .ase de datos. 2%n>%e en alg%nos de ellos los 6ri/ilegios necesarios sern (enores@ 6ara los ca6t%los >%e tratan la ad(inistraci*n del S<BD ser i(6rescindi.le dis6oner de las credenciales de ad(inistrador. La /ersi*n de MySQL >%e se %tili"ar 6ara la reali"aci*n de los e$e(6los de este taller@ es la 1.)@ a%n>%e no !a.r ningn 6ro.le(a en e$ec%tarlos en /ersiones anteriores. Lo >%e N- se /er en este taller: Conce6tos .sicos de .ases de datos: ta.las@ col%(nas@ lla/es 6ri(arias@ lla/es &orneas@ relaciones@ etc. Conce6tos .sicos de 6rogra(aci*n. Co(andos .sicos de s!ell ?%s%arios Lin%9A 2. Objetivo 2d>%irir las !a.ilidades y conoci(ientos de MySQL necesarios 6ara %tili"ar y ad(inistrar este S<BD ?siste(a gestor de .ases de datosA. 3. Caractersticas de MySQL 8n este a6artado en%(erare(os las 6restaciones >%e caracteri"an a este S<BD@ as co(o las de&iciencias de diseDo@ li(itaciones o 6artes del estndar an no i(6le(entadas. + 3.1 Prestaciones MySQL es %n S<BD >%e !a ganado 6o6%laridad 6or %na serie de atracti/as caractersticas: a) 8st desarrollado en CBCEE. b) Se distri.%yen e$ec%ta.les 6ara cerca de diecin%e/e 6lata&or(as di&erentes. c) La 2PI se enc%entra dis6oni.le en C@ CEE@ 8i&&el @ Ja/a@ Perl@ PFP@ Pyt!on@ =%.y y TCL. d) 8st o6ti(i"ado 6ara e>%i6os de (lti6les 6rocesadores. e) 8s (%y destaca.le s% /elocidad de res6%esta. f) Se 6%ede %tili"ar co(o clienteCser/idor o incr%stado en a6licaciones. g) C%enta con %n rico con$%nto de ti6os de datos. h) So6orta (lti6les (todos de al(acena(iento de las ta.las@ con 6restaciones y rendi(iento di&erentes 6ara 6oder o6ti(i"ar el S<BD a cada caso concreto. i) S% ad(inistraci*n se .asa en %s%arios y 6ri/ilegios. j) Se tiene constancia de casos en los >%e (ane$a cinc%enta (illones de registros@ sesenta (il ta.las y cinco (illones de col%(nas. k) S%s o6ciones de conecti/idad a.arcan TCPBIP@ socGets :NIH y socGets NT@ ade(s de so6ortar co(6leta(ente -DBC. l) Los (ensa$es de error 6%eden estar en es6aDol y !acer ordenaciones correctas con 6ala.ras acent%adas o con la letra IDI. m) 8s alta(ente con&ia.le en c%anto a esta.ilidad se re&iere. Para todos a>%ellos >%e son ade6tos a la &iloso&a de :NIH y del leng%a$e CBCEE@ el %so de MySQL les ser (%y &a(iliar@ ya >%e s% diseDo y s%s inter&aces son acordes a esa &iloso&a: Jcrear !erra(ientas >%e !agan %na sola cosa y >%e la !agan .ienK. MySQL tiene co(o 6rinci6al o.$eti/o ser %na .ase de datos &ia.le y e&iciente. Ning%na caracterstica es i(6le(entada en MySQL si antes no se tiene la certe"a >%e &%ncionar con la (e$or /elocidad de res6%esta y@ 6or s%6%esto@ sin ca%sar 6ro.le(as de esta.ilidad. La in&l%encia de CBCEE y :NIH se 6%ede o.ser/ar de ig%al (anera en s% sinta9is. Por e$e(6lo@ la %tili"aci*n de e96resiones reg%lares@ la di&erenciaci*n de &%nciones 6or los 6arntesis@ los /alores l*gicos co(o 7 y )@ la %tili"aci*n del ta.%lador 6ara co(6letar sentencias@ 6or (encionar alg%nos. 3.2 Limitaciones 2l co(6render s%s 6rinci6ios de diseDo@ se 6%ede e96licar (e$or las ra"ones de alg%nas de s%s carencias. Por e$e(6lo@ el so6orte de transacciones o la integridad re&erencial ?la gesti*n de cla/es &orneasA en MySQL est condicionado a %n es>%e(a de al(acena(iento de ta.la concreto@ de &or(a >%e si el %s%ario no /a a %sar transacciones@ 6%ede %sar el es>%e(a de al(acena(iento JtradicionalK ?MyIS2MA y o.tendr (ayor rendi(iento@ (ientras >%e si s% a6licaci*n re>%iere transacciones@ de.er %sar el es>%e(a >%e lo 6er(ite ?InnoDBA@ sin ning%na otra restricci*n o i(6licaci*n. -tras li(itaciones son las sig%ientes: 1 No so6orta.a 6rocedi(ientos al(acenados ?ya incl%ida en la /ersi*n 1.HA. No incl%a dis6aradores ?ya incl%ida en la /ersi*n 1.HA. No incl%a /istas ?ya incl%ida en la /ersi*n 1.HA. No incl%ye caractersticas de o.$etos co(o ti6os de datos estr%ct%rados de&inidos 6or el %s%ario@ !erencia etc. . !cceso a un servidor MySQL 8n este a6artado /ere(os las distintas &or(as de acceso a %n ser/idor MySQL e9istente >%e nos 6ro6orciona el 6ro6io S<BD. 8l acceso desde leng%a$es de 6rogra(aci*n o !erra(ientas en (odo gr&ico se tratar en otros a6artados. 4.1 Conectandose con el servidor Para conectarse con el ser/idor de.ere(os aseg%rarnos de >%e ste est &%ncionando y de >%e ad(ite cone9iones@ sean stas locales ?el S<BD se est e$ec%tando en la (is(a (>%ina >%e intenta la cone9i*nA o re(otas. 2dicional(ente@ de.ere(os dis6oner de las credenciales necesarias 6ara la cone9i*n. Distintos ti6os de credenciales nos 6er(itirn distintos ni/eles de acceso. Para si(6li&icar@ s%6ondre(os >%e dis6one(os de las credenciales ?%s%ario y contraseDaA del ad(inistrador de la .ase de datos ?nor(al(ente@ %s%ario root y s% contraseDaA. 8n el a6artado >%e concierne a la ad(inistraci*n de MySQL@ se co(enta detallada(ente los as6ectos relacionados con el siste(a de %s%arios@ contraseDas y 6ri/ilegios del S<BD. .1.1 Servidores y Clientes 8l ser/idor MySQL es el ser/icio (ys>ld@ >%e 6%ede reci.ir solicit%des de clientes locales o re(otos a tra/s TCPBIP@ socGets o 6i6es en &or(a de &ic!eros locales a la (>%ina en >%e se est e$ec%tando. 8n la distri.%ci*n se incl%ye %n cliente lla(ado (ys>lCclient@ al >%e en adelante nos re&erire(os si(6le(ente co(o (ys>l ?as es co(o se lla(a el 6rogra(a e$ec%ta.leA. Si se in/oca sin 6ar(etros@ (ys>l reali"a %na cone9i*n al ser/idor local %tili"ando el no(.re del %s%ario :NIH >%e lo !a in/ocado@ y s%6one >%e este %s%ario no re>%iere contraseDa. La cone9i*n a %n ser/idor re(oto y %n no(.re de %s%ario es6ec&icos re>%iere de al (enos dos arg%(entos: C! 6ara es6eci&icar el no(.re del ser/idor. C% 6ara el no(.re del %s%ario. Para >%e el 6rogra(a cliente 6reg%nte la contraseDa de cone9i*n al %s%ario@ de.ere(os 6ro6orcionar adicional(ente el 6ar(etro C6. L (ys>l C! (iser/idor C% M%s%arioN C6 3 .1.2 Conectarse y desconectarse Si se tiene algn 6ro.le(a 6ara reali"ar la cone9i*n@ es necesario cons%ltar con el ad(inistrador del siste(a@ >%e nos 6ro6orcionar %n no(.re de %s%ario@ contraseDa y el no(.re del ser/idor@ segn sea necesario@ y nos in&or(ar de las restricciones >%e tiene n%estra c%enta. La ad(inistraci*n y seg%ridad de MySQL est diseDada so.re %n es>%e(a de %s%arios y 6ri/ilegios. Los %s%arios de.en ser creados 6or el ad(inistrador con s%s res6ecti/os 6ri/ilegios y restricciones. 8s el ad(inistrador >%ien decide si los no(.res de los %s%arios de MySQL se corres6onden o no a los del siste(a o6erati/o. 26ariencia de (ys>l al ingresar en el (odo interacti/o: Oelco(e to t!e MySQL (onitor. Co((ands end Pit! Q or Rg. So%r MySQL connection id is 54 Ser/er /ersion: 1.).1+C)%.%nt%+ ?:.%nt%A Co6yrig!t ?cA ,777@ ,7)7@ -racle andBor its a&&iliates. 2ll rig!ts reser/ed. T!is so&tPare co(es Pit! 2BS-L:T8LS N- O2==2NTS. T!is is &ree so&tPare@ and yo% are Pelco(e to (odi&y and redistri.%te it %nder t!e <PL /, license Ty6e T!el6QT or TR!T &or !el6. Ty6e TRcT to clear t!e c%rrent in6%t state(ent. (ys>lN Con el co(ando !el6 o.tene(os %na serie de o6ciones ?/ere(os las (s %tili"adasA. Para salir del cliente 6ode(os escri.ir IR>I o U>%itI: (ys>lN >%itQ Tanto 6ara el co(ando >%it co(o 6ara el co(ando !el6@ el 6%nto y co(a al &inal es o6cional. 4.2 Introduccin de Sentencias 8l cliente de MySQL en (odo interacti/o nos 6er(ite tanto la introd%cci*n de sentencias SQL 6ara tra.a$ar con la .ase de datos ?crear ta.las@ !acer cons%ltas y /er s%s res%ltados@ etc.A co(o la e$ec%ci*n de co(andos 6ro6ios del S<BD 6ara o.tener in&or(aci*n so.re las ta.las@ ndices@ etc. o e$ec%tar o6eraciones de ad(inistraci*n. 4 .2.1 Sentencias 2 contin%aci*n 6resenta(os %na e$ec%ci*n de la sentencia select con c%atro col%(nas de datos: (ys>lN select %ser?A@ connectionVid?A@ /ersion?A@ data.ase?AQ ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE W %ser?A W connectionVid?A W /ersion?A W data.ase?A W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE W root'local!ost W 53 W 1.).1+C)%.%nt%+ W N:LL W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE ) roP in set ?7.77 secA (ys>lN 8n esta cons%lta se solicita@ a tra/s de &%nciones incor6oradas en el S<BD@ el no(.re del %s%ario act%al de MySQL@ el n(ero de cone9i*n al ser/idor@ la /ersi*n del ser/idor y la .ase de datos en %so. Las &%nciones se reconocen 6or los 6arntesis al &inal. (ys>l entrega s%s res%ltados en ta.las@ en la >%e el 6ri(er rengl*n son los enca.e"ados de las col%(nas. 8s i(6ortante no de$ar es6acio entre el no(.re de %na &%nci*n y los 6arntesis@ de otro (odo@ (ys>l (arcar %n (ensa$e de error. La lti(a lnea entregada 6or (ys>l in&or(a so.re el n(ero de &ilas encontrado co(o res%ltado de la cons%lta y el tie(6o esti(ado >%e lle/* s% reali"aci*n. 8sta (edida de tie(6o no se de.e considerar (%y 6recisa 6ara (edir el rendi(iento del ser/idor@ se trata si(6le(ente de %n /alor a6ro9i(ado >%e 6%ede /erse alterado 6or (lti6les &actores. -.ser/a(os >%e la col%(na con el no(.re de la .ase de datos act%al esta /aca. 8sto es nat%ral@ ya >%e no !e(os creado an ning%na .ase de datos ni le !e(os indicado al gestor so.re c%l >%ere(os tra.a$ar. .2.2 Co"andos en "#lti$les lneas Los co(andos 6%eden e96andirse en /arias lneas 6or co(odidad@ so.re todo al escri.ir largas sentencias SQL. 8l cliente no en/iar la sentencia SQL al ser/idor !asta encontrar el 6%nto y co(a@ de este (odo@ el co(ando anterior 6%ede escri.irse as: (ys>lN select %ser?A@ CN connectionVid?A@ CN /ersion?A@ CN data.ase?AQ ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE 5 W %ser?A W connectionVid?A W /ersion?A W data.ase?A W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE W root'local!ost W 53 W 1.).1+C)%.%nt%+ W N:LL W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE ) roP in set ?7.77 secA -.sr/ese el indicador de mysql >%e se trans&or(a en ->@ signo >%e signi&ica >%e el co(ando an no est co(6leto. Ta(.in 6%eden escri.irse /arios co(andos en %na sola lnea@ cada %no de.e lle/ar s% res6ecti/o 6%nto y co(a: (ys>lN select noP?AQ select %ser?AQ ECCCCCCCCCCCCCCCCCCCCCE W noP?A W ECCCCCCCCCCCCCCCCCCCCCE W ,7))C)7C)3 ),:1,:71 W ECCCCCCCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA ECCCCCCCCCCCCCCCCE W %ser?A W ECCCCCCCCCCCCCCCCE W root'local!ost W ECCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA (ys>lN Se e$ec%tarn en el orden >%e estn escritos. Los co(andos se 6%eden cancelar con la co(.inaci*n Rc@ con lo >%e el cliente nos /ol/er a (ostrar el indicador 6ara >%e escri.a(os de n%e/o la sentencia. (ys>lN select now?A@ CN %so CN /er Rc (ys>lN ; Indicadores de (ys>l Indicador Significado Mys>lN 8s6era %na n%e/a sentencia CN La sentencia an no se !a ter(inado con Q JN :na cadena en co(illas do.les no se !a cerrado TN :na cadena en co(illas si(6les no se !a cerrado .2.3 Cadenas de caracteres Las cadenas de caracteres 6%eden deli(itarse (ediante co(illas do.les o si(6les. 8/idente(ente@ de.en cerrarse con el (is(o deli(itador con el >%e se !an a.ierto. (ys>lN select XFola (%ndoX@T#elicidadesTQ y 6%eden escri.irse en di/ersas lneas: (ys>lN select XYste es %n te9to XN en dos renglonesXQ 2l 6rinci6io@ es co(n ol/idar el 6%nto y co(a al introd%cir %n co(ando y@ ta(.in@ ol/idar cerrar las co(illas. Si ste es el caso@ !ay >%e recordar >%e (ys>l no inter6reta lo >%e est entre co(illas@ de tal (odo >%e 6ara %tili"ar el co(ando de cancelaci*n IRcI es 6reciso antes cerrar las co(illas a.iertas: (ys>lN select XYste es %n te9to XN Rc XN X Rc (ys>lN .2. %&$resiones y variables MySQL dis6one de /aria.les de sesi*n@ /isi.les nica(ente d%rante la cone9i*n act%al. Ystas 6%eden al(acenar /alores de ti6os enteros@ &lotantes o cadenas@ 6ero no ta.las. Se de&inen co(o en el sig%iente e$e(6lo: (ys>lN select '9 :Z )Q )7 La /aria.le local '9 tiene a!ora el /alor ) y 6%ede %tili"arse en e96resiones: (ys>lN select '9@ s>rt?'9A@ sin?'9A@ '9 E )7@ '9 N )7Q ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE W '9 W s>rt?'9A W sin?'9A W '9 E )7 W '9 N )7 W ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE W ) W ) W 7.5+)+47;5+5745;4 W )) W 7 W ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE ) roP in set ?7.77 secA (ys>lN Las /aria.les locales 6er(iten al(acenar datos entre cons%ltas y@ en la 6rctica@ es reco(enda.le %tili"arlas e9cl%si/a(ente con este &in@ 6or e$e(6lo: (ys>lN select '!oraVingreso :Z noP?AQ ECCCCCCCCCCCCCCCCCCCCCCCCE W '!oraVingreso :Z noP?A W ECCCCCCCCCCCCCCCCCCCCCCCCE W ,7))C)7C)3 )0:,,:01 W ECCCCCCCCCCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA (ys>lN select noP?A C '!oraVingresoQ ECCCCCCCCCCCCCCCCCCCCCCCE W noP?A C '!oraVingreso W ECCCCCCCCCCCCCCCCCCCCCCCE W ,7)))7)3)07,0, W ECCCCCCCCCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA (ys>lN )) .2.' %&$resiones Fay >%e tener c%idado con el %so de las /aria.les locales 6or los (oti/os sig%ientes: Se e/alan en el ser/idor al ser en/iadas 6or el cliente. Se reali"an con/ersiones de ti6o i(6lcitas. (ys>lN do 'ingreso :Z noP?AQ 8l co(ando do e/ala e96resiones sin (ostrar los res%ltados en 6antalla. Se 6%ede e/al%ar c%al>%ier e96resi*n >%e ad(ite el co(ando select. Las /aria.les no re>%ieren declaraci*n y@ 6or o(isi*n@ contienen el /alor N:LL >%e signi&ica Ja%sencia de /alorK@ o.ser/ar en la sig%iente cons%lta los res%ltados de %tili"ar /alores n%los: (ys>lN select 'y@ CN s>rt? 'y A@ CN 'y E )7@ CN 'y M ) Q ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE W 'y W s>rt? 'y A W 'y E )7 W 'y M ) W ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE W N:LL W N:LL W N:LL W N:LL W ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE ) roP in set ?7.77 secA (ys>lN La ra"*n de este co(6orta(iento es >%e no es 6osi.le reali"ar ning%na o6eraci*n c%ando se desconoce algn /alor. La entrada de /alores N:LL sie(6re signi&icar salida de /alores N:LL. 4.3 Proceso por lotes MySQL 6%ede 6rocesar 6or lotes las sentencias contenidas en %n arc!i/o de te9to. Cada sentencia de.er ter(inar en TQT ig%al >%e si la escri.ira(os en el cliente. La sinta9is es la sig%iente: ), L (ys>l C% $%an C! ser/idor.(isitio.org C6 M de(o.s>l 8n este caso@ se reali"ar %na cone9i*n con el ser/idor@ nos 6edir la contraseDa del %s%ario U$%anI y@ si sta es correcta@ e$ec%tar los co(andos incl%idos en el arc!i/o de(o.s>l@ %no a %no y 6or el (is(o orden. I(6ri(ir los res%ltados ?o erroresA en la salida estndar ?o de errorA y ter(inar. De este (odo e/itare(os la (olestia de 6rocesarlos %no 6or %no de &or(a interacti/a. -tra &or(a de 6rocesar %n arc!i/o es (ediante el co(ando so%rce desde el indicador interacti/o de MySQL: (ys>lN so%rce de(o.s>l 8l arc!i/o de(o.s>l crea %na n%e/a .ase de datos. 8l %s%ario de.e tener 6er(isos 6ara crear .ases de datos si >%iere >%e sea 6rocesado el arc!i/o de(o.s>l. Si el ad(inistrador crea la .ase de datos 6or nosotros@ ser necesario editarlo@ co(entando la lnea donde se crea la .ase de datos con el s(.olo I[I al inicio: [ create data.ase de(oQ 8s necesario 6rocesar el contenido del &ic!ero de(o.s>l tal co(o los transcri.i(os a>%@ con el &in de 6oder reali"ar los e$e(6los del resto del a6artado. Si se o.ser/a s% contenido@ 6osi.le(ente (%c!as cosas se e96li>%en 6or s (is(as@ de c%al>%ier (anera@ sern e96licadas en este a6artado. Ta(.in 6%eden e$ec%tarse s%s *rdenes en el cliente directa(ente. Contenido del &ic!ero de(o.s>l dro6 data.ase de(oQ create data.ase de(oQ %se de(oQ CC CC 8str%ct%ra de la ta.la 6rod%ctos CC create ta.le 6rod%ctos ? 6arte /arc!ar?,7A@ ti6o /arc!ar?,7A @ es6eci&icacion /arc!ar?,7A @ 6s%gerido &loat?3@,A@ cla/e int?0A "ero&ill not n%ll a%toVincre(ent@ )0 6ri(ary Gey ?cla/eA AQ insert into 6rod%ctos ?6arte@ti6o@es6eci&icacion@6s%geridoA /al%es ?TProcesadorT@T, <F"T@T0, .itsT@n%llA@ ?TProcesadorT@T,.+ <F"T@T0, .itsT@01A@ ?TProcesadorT@T).4 <F"T@T3+ .itsT@,71A@ ?TProcesadorT@T0 <F"T@T3+ .itsT@137A@ ?T=2MT@T),5MBT@T000 MF"T@)7A@ ?T=2MT@T,13MBT@T+77 MF"T@01A@ ?TDisco D%roT@T57 <BT@T4,77 r6(T@37A@ ?TDisco D%roT@T),7 <BT@T4,77 r6(T@45A@ ?TDisco D%roT@T,77 <BT@T4,77 r6(T@))7A@ ?TDisco D%roT@T+7 <BT@T+,77 r6(T@n%llA@ ?TMonitorT@T)7,+9543T@T41 F"T@57A@ ?TMonitorT@T)7,+9543T@T37 F"T@34A Q CC CC 8str%ct%ra de la ta.la T6ro/eedorT CC create ta.le 6ro/eedores ? e(6resa /arc!ar?,7A not n%ll@ 6ago set?TcrditoT@Te&ecti/oTA@ 6ri(ary Gey ?e(6resaA AQ CC CC \alores de la ta.la T6ro/eedorT CC insert into 6ro/eedores ?e(6resa@6agoA /al%es ?TTecnoCGT@TcrditoTA@ ?TPatitoT@Te&ecti/oTA@ ?TNacionalT@Tcrdito@e&ecti/oTA Q create ta.le ganancia? )+ /enta en%(?TPor (ayorT@TPor (enorTA@ &actor deci(al?,@,A AQ insert into ganancia /al%es ?TPor (ayorT@).71A@ ?TPor (enorT@).),A Q create ta.le 6recios ? e(6resa /arc!ar?,7A not n%ll@ cla/e int?0A "ero&ill not n%ll@ 6recio &loat?3@,A@ &oreign Gey ?e(6resaA re&erences 6ro/eedores@ &oreign Gey ?cla/eA re&erences 6rod%ctos AQ insert into 6recios /al%es ?TNacionalT@77)@07.5,A@ ?TNacionalT@77,@0,.40A@ ?TNacionalT@770@,7,.,1A@ ?TNacionalT@771@;.43A@ ?TNacionalT@773@0).1,A@ ?TNacionalT@774@15.+)A@ ?TNacionalT@7)7@3+.05A@ ?TPatitoT@77)@07.+7A@ ?TPatitoT@77,@00.30A@ ?TPatitoT@770@);1.1;A@ ?TPatitoT@771@;.45A@ ?TPatitoT@773@0,.++A@ ?TPatitoT@774@1;.;;A@ ?TPatitoT@7)7@3,.7,A@ ?TTecnoCGT@770@);5.0+A@ ?TTecnoCGT@771@;.,4A@ ?TTecnoCGT@773@0+.51A@ ?TTecnoCGT@774@1;.;1A@ )1 ?TTecnoCGT@7)7@3).,,A@ ?TTecnoCGT@7),@3,.,;A Q Si se desea lle/ar %n registro de todas las o6eraciones de %na sesi*n@ se 6%ede %tili"ar la e96resi*n sig%ienteQ de este (odo se g%ardarn todos los co(andos y s%s res%ltados en arc!i/oVregistro.t9t: (ys>lN tee arc!i/oVregistro.t9t Para cancelar la ca6t%ra@ .asta con teclear lo sig%iente: (ys>lN notee 4.4 Usar base de datos La sig%iente cons%lta in&or(a so.re la .ase de datos act%al(ente en %so. (ys>lN select data.ase?AQ ECCCCCCCCCCCCE W data.ase?A W ECCCCCCCCCCCCE W N:LL W ECCCCCCCCCCCCE ) roP in set ?7.77 secA (ys>lN 8l ca(6o esta /aco 6or>%e no esta(os !aciendo %so de ning%na .ase de datos. Para /er las .ases de datos e9istentes en el siste(a@ se de.e e&ect%ar la sig%iente cons%lta: (ys>lN s!oP data.asesQ ECCCCCCCCCCCCCCCCCCCCE W Data.ase W ECCCCCCCCCCCCCCCCCCCCE W in&or(ationVsc!e(a W )3 W (ys>l W W de(o W ECCCCCCCCCCCCCCCCCCCCE 0 roPs in set ?7.7, secA (ys>lN MySQL nos (%estra el listado de las .ases de datos de&inidas en el ser/idor. De.e a6arecer la .ase de datos de(o >%e crea(os con el arc!i/o de(o.s>l. Para 6oder tra.a$ar con ella@ tene(os >%e a.rirla: (ys>lN use de(oQ 8s 6osi.le reali"ar cons%ltas en %na .ase de datos sin %tili"ar el co(ando %se@ en ese caso@ todos los no(.res de las ta.las de.en lle/ar el no(.re de la .ase de datos a >%e 6ertenecen de la &or(a: de(o.6rod%ctos. -tra 6osi.ilidad consiste en 6ro6orcionar el no(.re de la .ase de datos al iniciar %na sesi*n interacti/a con (ys>l: L (ys>l de(o C% $%an C6 La cons%lta de las ta.las >%e contiene la .ase de datos de(o se reali"a con la sentencia s!oP de la sig%iente (anera: (ys>lN s!oP ta.lesQ ECCCCCCCCCCCCCCCCE W Ta.lesVinVde(o W ECCCCCCCCCCCCCCCCE W ganancia W W 6recios W W 6rod%ctos W W 6ro/eedores W ECCCCCCCCCCCCCCCCE + roPs in set ?7.77 secA )4 8l co(ando s!oP es til 6ara (ostrar in&or(aci*n so.re las .ases de datos@ ta.las@ /aria.les y otra in&or(aci*n so.re el S<BD. Pode(os %tili"ar !el6 s!oP en el intr6rete de co(andos 6ara o.tener todas las /ariantes de esta sentencia. 2si(is(o@ 6ode(os cons%ltar las col%(nas de cada %na de las ta.las: (ys>lN descri.e 6rod%ctosQ ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE W 6arte W /arc!ar?,7A W S8S W W N:LL W W W ti6o W /arc!ar?,7A W S8S W W N:LL W W W es6eci&icacion W /arc!ar?,7A W S8S W W N:LL W W W 6s%gerido W &loat?3@,A W S8S W W N:LL W W W cla/e W int?0A %nsigned "ero&ill W N- W P=I W N:LL W a%toVincre(ent W ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE 1 roPs in set ?7.7) secA (ys>lN Para crear %na n%e/a .ase de datos %sare(os la sentencia create data.ase: (ys>lN create database 6r%e.aQ Para eli(inar %na .ase de datos@ %sare(os la sentencia dro6 data.ase: (ys>lN drop database 6r%e.aQ MySQL es sensi.le al %so de (aysc%las y (insc%las@ tanto en la de&inici*n de .ases de datos@ co(o de ta.las o col%(nas. 4.5 Prctica 1 Tie(6o esti(ado: ,7 (in. =eali"ar los sig%ientes 6asos: 1. Cargar el scri6t practica1.sql a la .ase de datos demo >%e corres6onde al 6artici6ante@ este )5 arc!i/o est %.icado en la car6eta practicas. 2. Conectarse a la .ase de datos demo >%e corres6onde. 3. 896lorar las ta.las generadas co(o consec%encia de la e$ec%ci*n del scri6t practica1.sql@ se de.e !a.er generado las ta.las gente y ci%dad. Listar los registros. 4. <%ardar en %n arc!i/o lla(ado de(oH.t9t@ donde H es el n(ero >%e corres6onde al 6artici6ante@ todas las salidas generadas co(o consec%encia de la e$ec%ci*n de las sig%ientes instr%cciones. 5. S8T '!oy Z C:==8NTVD2T8?AQ . S8L8CT '!oyQ !. S8L8CT '9:Z)7Q ". S8L8CT '9Q #. S8L8CT '&ec!aV(in:ZMIN?&ec!aA@ '&ec!aV(a9:ZM2H?&ec!aA #=-M genteQ 1$. S8L8CT ^ #=-M gente OF8=8 &ec!aZ'&ec!aV(inQ 11. 2nali"ar el contenido del arc!i/o generado. 12. I(6le(entar serie H n Z ,n E )@ de tal (anera >%e arro$e los sig%ientes /alores ?0@ 1@ 4@ ;@ ))@ )0...@ etcA. '. Creacin y "ani$ulacin de tablas 5.1 Crear tablas :na /e" reali"ada la cone9i*n con el ser/idor MySQL y des6%s de a.rir %na .ase de datos@ 6ode(os crear ta.las en ella de la sig%iente (anera: (ys>lN create table 6ersonas ? CN no(.re char?07A@ CN direccion char?+7A@ CN tele&ono char?)1A CN AQ Q%ery -]@ 7 roPs a&&ected ?7.)) secA (ys>lN 8n este caso@ la sentencia create table constr%ye %na n%e/a ta.la en la .ase de datos en %so. La ta.la contiene tres col%(nas@ nombre, direccin y telfono@ todas de ti6o carcter y de longit%des 07@ +7 y )1 res6ecti/a(ente. Si se intenta g%ardar en ellas /alores >%e so.re6asen esos l(ites@ sern ); tr%ncados 6ara 6oderlos al(acenar. Por ese (oti/o@ es i(6ortante reser/ar es6acio s%&iciente 6ara cada col%(na. Si se 6re/ >%e (%c!os registros oc%6arn s*lo %na &racci*n del es6acio reser/ado@ se 6%ede %tili"ar el ti6o /arc!ar@ si(ilar a c!ar@ con la di&erencia de >%e el /alor oc%6ar %n es6acio (enor al es6eci&icado si la cadena es (s corta >%e el (9i(o indicado@ a!orrando as es6acio de al(acena(iento. Las ta.las 6%eden eli(inarse con dro6 ta.le: (ys>lN drop table 6ersonasQ Q%ery -]@ 7 roPs a&&ected ?7.77 secA (ys>lN 2lternati/a(ente@ se 6%ede %tili"ar la sinta9is sig%iente: (ys>lN drop table if e%ists 6ersonasQ 2tri.%tos de col%(na &tributo Significado n%ll Se 6er(iten /alores n%los@ atri.%to 6or o(isi*n si no se es6eci&ica lo contrario. not n%ll No se 6er(iten /alores n%los. de&a%lt /alor \alor 6or o(isi*n >%e se asigna a la col%(na. a%toVincre(ent 8l /alor se asigna a%to(tica(ente incre(entando en %no el (9i(o /alor registrado !asta a!ora. Se a6lica s*lo a las col%(nas (arcadas co(o cla/e 6ri(aria. 6ri(ary Gey SeDala al ca(6o co(o cla/e 6ri(aria@ i(6lcita(ente ta(.in lo declara co(o not n%ll. \e(oslo con %n e$e(6lo: (ys>lN create table 6ersonas ? CN no(.re 'archar?+7A not n%ll@ CN direccion 'archar?17A n%ll@ CN edoVci/il char?)0A default TsolteroT@ CN n%(Vregistro int primar( ke( auto)increment ,7 CN AQ Q%ery -]@ 7 roPs a&&ected ?7.71 secA (ys>lN 8n este caso la ta.la contiene c%atro col%(nas@ de las c%ales direccion y edoVci/il 6er(iten /alores n%los@ en edoVci/il est i(6lcito al no declarar lo contrario. La col%(na n%(Vregistro no ace6ta /alores n%los 6or>%e est de&inida co(o cla/e 6ri(aria. 2%n>%e la creaci*n de %na cla/e 6ri(aria 6%ede declararse co(o atri.%to de col%(na@ es con/eniente de&inirla co(o restricci*n de ta.la@ co(o se /er enseg%ida. Ta(.in es 6osi.le indicar restricciones so.re la ta.la y no so.re col%(nas es6eci&icas: (ys>lN create table 6ersonas ? CN no(.re /arc!ar?+7A not n%ll@ CN naci(iento date not n%ll@ CN 6are$a /arc!ar?+7A@ CN 6ro/eedor int not n%ll@ CN CN 6ri(ary Gey ?no(.re@naci(ientoA@ CN %ni>%e ?6are$aA@ CN &oreign Gey ?6ro/eedorA re&erences 6ro/eedores CN AQ Q%ery -]@ 7 roPs a&&ected ?7.)0 secA (ys>lN =estricciones de ta.la *estricci+n Significado 6ri(ary Gey De&ine la o las col%(nas >%e ser/irn co(o cla/e 6ri(aria. Las col%(nas >%e &or(an 6arte de la cla/e 6ri(aria de.en de ser not n%ll. %ni>%e De&ine las col%(nas en las >%e no 6%eden d%6licarse /alores. Sern las cla/es candidatas del (odelo relacional. &oreign Gey ?col%(naA re&erences ta.la ?col%(na,A De&ine >%e los /alores de columna se 6er(itirn s*lo si e9isten en tabla(columna2). 8s decir@ ,) columna !ace re&erencia a los registros de tabla@ esto aseg%ra >%e no se realice re&erencias a registros >%e no e9isten. Se de&inen tres restricciones so.re la ta.la des6%s de la de&inici*n de c%atro col%(nas: La 6ri(era restricci*n se re&iere a la cla/e 6ri(aria@ co(6%esta 6or las col%(nas nombre y nacimiento: no 6%ede !a.er dos 6ersonas >%e se lla(en ig%al y >%e !ayan nacido en la (is(a &ec!a. La cla/e 6ri(aria 6er(ite identi&icar de (anera %n/oca cada registro de la ta.la. La seg%nda restricci*n de&ine >%e la 6are$a de %na 6ersona de.e ser nica: dos 6ersonas no 6%eden tener la (is(a 6are$a. Todo intento de insertar %n n%e/o registro donde el no(.re de la 6are$a ya e9ista@ ser rec!a"ado. C%ando se restringe %na col%(na con uni,ue@ los /alores null reci.en %n trato es6ecial@ 6%es se 6er(iten (lti6les /alores n%los. La tercera restricci*n a&ecta a la col%(na proveedor@ s*lo 6%ede to(ar /alores >%e e9istan en la cla/e 6ri(aria de la ta.la proveedores. Las restricciones de ta.la 6%eden de&inirse con %n identi&icador til 6ara !acer re&erencias 6osteriores a la restricci*n: (ys>lN create table 6ersonas ? CN no(.re /arc!ar?+7A not n%ll@ CN naci(iento date not n%ll@ CN 6are$a /arc!ar?+7A@ CN 6ro/eedor int not n%ll@ CN CN constraint cla/e 6ri(ary Gey ?no(.re@naci(ientoA@ CN constraint (onoga(o %ni>%e ?6are$aA@ CN constraint tra.a$aVen &oreign Gey ?6ro/eedorA re&erences 6ro/eedores CN AQ Q%ery -]@ 7 roPs a&&ected ?7.05 secA (ys>lN ke( - inde% La de&inici*n de ndices 6%ede !acerse ta(.in en el (o(ento de creaci*n de la ta.la@ (ediante la 6ala.ra cla/e Gey ?o inde9A@ a la >%e de.ere(os 6ro6orcionar el no(.re >%e /a(os a asignar a esta cla/e y las col%(nas >%e la &or(an@ entre 6arntesis. 89isten (odi&icadores o6cionales so.re el ndice ,, >%e nos 6er(iten es6eci&icar si se trata de %n ndice nico o (lti6le ?segn 6%edan e9istir o no /arios /alores ig%ales del ndice en la ta.laA. 8n /ersiones recientes de MySQL e9isten otros ti6os de ndices ?es6aciales@ de te9to co(6leto@ etc.A 6ara ti6os de datos concretos y >%e o&recen 6restaciones adicionales. 5.2 ipo de datos MySQL c%enta con %n rico con$%nto de ti6os de datos 6ara las col%(nas@ >%e es necesario conocer 6ara elegir (e$or c*(o de&inir las ta.las. Los ti6os de datos se 6%eden clasi&icar en tres gr%6os: N%(ricos Cadenas de caracteres #ec!as y !oras 8l /alor null es %n caso es6ecial de dato@ ya >%e al signi&icar ausencia de valor se a6lica a todos los ti6os de col%(na. Los sig%ientes s(.olos se %tili"an en la de&inici*n y descri6ci*n de los ti6os de datos en MySQL: M C 8l anc!o de la col%(na en n(ero de caracteres. D C N(ero de deci(ales >%e !ay >%e (ostrar. L C Longit%d o ta(aDo real de %na cadena. _ ` C Lo >%e se escri.a entre ellos es o6cional. '.2.1 Ti$os de datos nu"(ricos Los ti6os de datos n%(ricos co(6renden dos categoras@ los enteros y los n(eros con 6%nto &lotante. ./meros enteros La 6rinci6al di&erencia entre cada %no de los ti6os de enteros es s% ta(aDo@ >%e /a desde ) .yte de al(acena(iento !asta los 5 .ytes. Las col%(nas de ti6o entero 6%eden reci.ir dos atri.%tos adicionales@ >%e de.en es6eci&icarse in(ediata(ente des6%s del no(.re del ti6o: unsigned. Indica >%e el entero no 6odr al(acenar /alores negati/os. 8s res6onsa.ilidad del %s%ario /eri&icar@ en este caso@ >%e los res%ltados de las restas no sean negati/os@ 6or>%e MySQL los con/ierte en 6ositi/os. 0erofill. Indica >%e la col%(na@ al ser (ostrada@ rellenar con ceros a la i">%ierda los es6acios /acos. 8sto de ac%erdo al /alor es6eci&icado 6or M en la declaraci*n del ti6o. :na col%(na con el atri.%to "ero&ill es al (is(o tie(6o %nsigned a%n>%e no se es6eci&i>%e. 1jemplo (ys>lN create table n%(eros ? CN 9 int?+A "ero&ill not null@ ,0 CN y int?1A unsigned CN AQ Q%ery -]@ 7 roPs a&&ected ?7.1+ secA (ys>lN 8l co(ando anterior crea %na ta.la con dos col%(nas. 2l (ostrarse la col%(na 9 oc%6ar %n es6acio de + dgitos. Tanto "ero&ill co(o %nsigned de.en escri.irse sie(6re antes >%e c%al>%ier otro atri.%to de col%(na. 2ipos enteros 2ipo 1spacio de almacenamiento Significado tinyint_?MA` ) .yte 8ntero (%y 6e>%eDo s(allint_?MA` , .ytes 8ntero 6e>%eDo (edi%(int_?MA` 0 .ytes 8ntero (ediano int_?MA` + .ytes 8ntero .igint_?MA` 5 .ytes 8ntero grande ./meros con punto flotante MySQL c%enta con los ti6os &loat y do%.le@ de + y 5 .ytes de al(acena(iento. 2de(s incl%ye el ti6o deci(al@ >%e se al(acena co(o %na cadena de caracteres y no en &or(ato .inario. N(eros de 6%nto &lotante 2ipo 1spacio de almacenamiento Significado &loat + .ytes Si(6le 6recisi*n do%.le 5 .ytes Do.le 6recisi*n deci(al M E , .ytes Cadena de caracteres re6resentando %n n(ero &lotante '.2.2 Cadenas de caracteres Cadenas de caracteres ,+ 2ipo 1,ui'alente 2ama3o m4%imo 1spacio de almacenamiento c!ar_?MA` M .ytes M .ytes /arc!ar_?MA` M .ytes LE) .ytes tinyte9t tiny.lo. , 5 a ) .ytes LE) .ytes te9t .lo. , )3 a) . ytes LE, .ytes (edi%(te9t (edi%(.lo. , ,+ a) .ytes LE0 .ytes longte9t long.lo. , 0, a) .ytes LE+ .ytes en%(?I/)I@I/,I@. . . A 31101 /alores ) o , .ytes set?I/)I@I/,I@. . . A 3+ /alores ) a 5 .ytes Si o.ser/a(os la ta.la@ /e(os >%e el nico ti6o de dato >%e sie(6re %tili"a el ta(aDo es6eci&icado 6or M es el ti6o c!ar. Por este (oti/o@ se o&rece el ti6o /arc!ar >%e oc%6a s*lo el es6acio re>%erido 6or el /alor de la col%(na. 1jemplo create table 6ersona? co(entario char?,17A@ recado 'archar?,17A AQ La col%(na co(entario oc%6ar ,17 .ytes de es6acio de al(acena(iento@ sin i(6ortar el /alor al(acenado. Por el contrario@ la col%(na recado oc%6ar s*lo el es6acio necesario segn el /alor asignadoQ 6or e$e(6lo@ la cadena JInstalar MySQLK tiene )+ .ytes de longit%d@ y el ca(6o recado oc%6ara )1 .ytes 6ara al(acenarla. Los ti6os te9t y .lo. son e>%i/alentes@ 6ero te9t res6eta las (aysc%las@ (insc%las y caracteres acent%ados en la ordenaci*n. 8$e(6lo del %so de los ti6os en%(erados o en%( create table 6ersona? edoVci/il enum?TsolteroT@TcasadoT@T/i%doT@Tdi/orciadoTA AQ ,1 La col%(na edo_civil de la ta.la en la sentencia anterior@ solo 6odr al(acenar los /alores soltero, casado, viudo, divorciado@ >%e son es6eci&icados 6or el ti6o enum. La col%(na oc%6ar el es6acio de %n .yte@ ya >%e los /alores en%( son re6resentados interna(ente 6or n(eros. '.2.3 )ec*as y *oras #ec!as y !oras Ti6o 8s6acio de al(acena(iento =ango date 0 .ytes I)777C7)C7)I al I;;;;C),C0)I ti(e 0 .ytes IC505:1;:1;I a I505:1;:1;I dateti(e 5 .ytes I)777C7)C7) 77:77:77I a I;;;;C ),C0) ,0:1;:1;I ti(esta(6_?MA` + .ytes );477)7)777777 al aDo ,704 year_?MA` ) .ytes );7) a ,)11 5.3 !odi"icar ablas '.3.1 !+re+ar y eli"inar colu"nas 2lterar la estr%ct%ra de %na ta.la es %na tarea (s &rec%ente de lo >%e %no 6%ede i(aginar en %n 6rinci6io. La sentencia alter ta.le 6er(ite %na a(6lia ga(a de &or(as de (odi&icar %na ta.la. La sig%iente sentencia nos rec%erda %n 6oco a la estr%ct%ra de la sentencia create ta.le@ en donde (odi&ica(os la ta.la 6ersonal creada en la secci*n anterior. (ys>lN alter table 6ersonas add ? CN (ascota char?07A default T6errroT@ CN 6asatie(6o char ?,7A not null CN AQ Sie(6re es 6osi.le cons%ltar la estr%ct%ra de %na ta.la con el co(ando describe tabla. Des6%s de e$ec%tar la sentencia anterior@ a6arecen dos n%e/as col%(nas en la ta.la. Si >%ere(os agregar %na sola col%(na@ 6ode(os %sar la sinta9is sig%iente: (ys>lN alter table 6ersonas add ca6ital int not null after no(.reQ 8ste &or(ato de alter ta.le 6er(ite@ ade(s@ insertar las col%(nas antes ?.e&oreA o des6%s ?a&terA de ,3 %na col%(na en c%esti*n. Las col%(nas no deseadas 6%eden eli(inarse con la o6ci*n dro6. (ys>lN alter table 6ersonas drop 6asatie(6oQ '.3.2 Modi,icar colu"nas La (odi&icaci*n de %na col%(na con la o6ci*n modif( es 6arecida a /ol/er a de&inirla. (ys>lN alter table 6ersonas modif( CN (ascota char ?)+A default TgatoTQ Des6%s de la sentencia anterior@ los atri.%tos y ti6o de la col%(na !an ca(.iado 6or los es6eci&icados. Lo >%e no se 6%ede ca(.iar con esta sinta9is es el no(.re de la col%(na. Para ello@ se de.e %tili"ar la o6ci*n change: (ys>lN alter table 6ersonas change no(.re no(.res char?,7AQ La col%(na >%e se lla(a.a no(.re ca(.ia a no(.res. #inal(ente@ 6ode(os ca(.iar de no(.re la ta.la: (ys>lN alter table 6ersonas rename genteQ 8l co(ando rename table viejo_nombre to nuevo_nombre es %na &or(a alternati/a de ca(.iar el no(.re a %na ta.la. (ys>lN rename table gente to 6ersonasQ ,4 5.4 #tras opciones '..1 Co$iar tablas 2%n>%e no e9iste %n co(ando e96lcito 6ara co6iar ta.las de %na .ase de datos a otra@ es 6osi.le %tili"ar el co(ando rename table 6ara este 6ro6*sitoQ .asta con es6eci&icar la .ase de datos a la >%e 6ertenece %na ta.la: (ys>lN rename table .aseV%no.ta.la to .aseVdos.ta.laQ Ta(.in es 6osi.le crear %na ta.la n%e/a con el contenido de otra ya e9istente ?co6iando los datosA: (ys>lN create table n%e/aVta.la select 5 from otraVta.laQ La sig%iente sentencia es e>%i/alente@ 6ero no co6ia los datos de la ta.la origen: (ys>lN create table n%e/aVta.la like otraVta.laQ '..2 Tablas te"$orales MySQL 6er(ite la creaci*n de ta.las te(6orales@ /isi.les e9cl%si/a(ente en la sesi*n a.ierta@ y g%ardar datos entre cons%ltas. La creaci*n de %na ta.la te(6oral s*lo re>%iere la %tili"aci*n de la 6ala.ra temporary en c%al>%ier &or(ato del co(ando create table. La %tilidad de las ta.las te(6orales se li(ita a cons%ltas co(6le$as >%e de.en generar res%ltados inter(edios >%e de.e(os cons%ltar ?!acer T$oinT con ellasA /arias /eces o en cons%ltas se6aradas. Interna(ente@ MySQL genera ta(.in ta.las te(6orales 6ara resol/er deter(inadas cons%ltas: (ys>lN create temporar( table n%e/aVta.la ... -. Consultas Co(o ya !e(os e96licado@ las cons%ltas so.re la .ase de datos se e$ec%tan (ediante sentencias S8L8CT introd%cidas en el 6ro6io 6rogra(a cliente y los res%ltados se 6resentan en &or(a de ta.la. $.1 La base de datos demo 8n esta secci*n %tili"are(os la .ase de datos demo >%e !e(os creado con el co(ando so%rce demo.sql. ,5 2s >%e@ antes de est%diar las cons%ltas en MySQL@ re/isare(os .re/e(ente la estr%ct%ra de esta .ase de datos@ >%e consta de las sig%ientes ta.las: (ys>lN show ta.lesQ ECCCCCCCCCCCCCCCCE W Ta.lesVinVde(o W ECCCCCCCCCCCCCCCCE W ganancia W W 6recios W W 6rod%ctos W W 6ro/eedores W ECCCCCCCCCCCCCCCCE Las c%atro ta.las re6resentan@ de (anera &icticia@ la .ase de datos de %n distri.%idor de e>%i6os de 6rocesa(iento. 8stn diseDadas 6ara ser/ir de e$e(6lo a los casos 6resentados en este ca6t%lo@ 6or lo >%e no necesaria(ente sern tiles en la /ida real. 8n n%estro e$e(6lo i(aginario re6resenta(os la sig%iente sit%aci*n. N%estro /endedor tiene %na relaci*n de 6ro/eedores >%e /enden s%s 6rod%ctos a crdito@ en e&ecti/o o a(.os. Las co(6ras a crdito 6agan intereses@ 6ero son tiles 6or>%e no sie(6re es 6osi.le 6agar en e&ecti/o. Se %tili"a %na col%(na de ti6o con$%nto 6ara 6ago@ >%e 6%ede to(ar los /alores IcrditoI@ Ie&ecti/oI o a(.os: create table 6ro/eedores ? e(6resa 'archar?,7A not null@ 6ago set?TcrditoT@Te&ecti/oTA@ primar( ke( ?e(6resaA AQ Los 6rod%ctos >%e se distri.%yen son 6artes de e>%i6o de c*(6%to. Para la (ayora de los 6rod%ctos en el (ercado@ los &a.ricantes s%gieren %n 6recio de /enta al 6.lico >%e@ a%n>%e no es o.ligatorio@ los cons%(idores no estn dis6%estos a 6agar (s. Las cla/es de los 6rod%ctos son asignadas 6ara control interno con %n n(ero consec%ti/o. Con estas es6eci&icaciones@ la ta.la productos se de&ine de la (anera sig%iente: create table 6rod%ctos ? 6arte 'archar?,7A@ ti6o 'archar?,7A @ ,; es6eci&icaci*n 'archar ?,7A @ 6s%gerido float?3@,A@ cla/e int?0A 0erofill not null auto)increment@ primar( ke( ?cla/eA AQ La e(6resa de&ine %na 6oltica 6ara las ganancias (ni(as >%e se de.en o.tener en /entas: el 1b al 6or (ayor y el ),b al 6or (enor. 8stos /alores se al(acenan en la ta.la ganancias@ donde se decidi* incl%ir %na col%(na de no(.re &actor@ con el n(ero 6or el >%e se (%lti6lica el 6recio de co(6ra 6ara o.tener el 6recio de /enta. Los ti6os de /enta UPor (ayorI y UPor (enorI se de&inen con %n ti6o de datos en%(: create table ganancia? /enta enum?IPor (ayorI@IPor (enorIA@ &actor decimal ?,@,A AQ La lista de 6recios se de&ine a 6artir de la e(6resa 6ro/eedor y el 6rod%cto@ asignndole %n 6recio. Por ese (oti/o@ las col%(nas e(6resa y cla/e se de&inen co(o foreign ke(. create table 6recios ? e(6resa 'archar?,7A not null@ cla/e int?0A "ero&ill not null@ 6recio float?3@,A@ foreign ke( ?e(6resaA references 6ro/eedores@ foreign ke( ?cla/eA references 6rod%ctos AQ $.2 Consultar in"ormacin MySQL o&rece %n con$%nto (%y a(6lio de &%nciones a%9iliares ?tanto estndares co(o 6ro6iasA >%e nos 6%eden ay%dar (%c!o en deter(inados (o(entos@ de$ando 6arte del tra.a$o de (ani6%lar los res%ltados al 6ro6io gestor. De.ido al r6ido rit(o en el desarrollo de este S<BD@ es (%y con/eniente 07 cons%ltar sie(6re la doc%(entaci*n de n%estra /ersi*n 6ara conocer s%s 6osi.ilidades concretas. Mostrare(os los as6ectos destaca.les@ &acilidades o li(itaciones >%e o&rece MySQL res6ecto al Leng%a$e SQL. -.2.1 )unciones au&iliares Las &%nciones a%9iliares >%e 6ode(os %tili"ar en n%estras cons%ltas ?tanto en la 6royecci*n de las col%(nas co(o en condiciones en s% selecci*nA se 6%eden clasi&icar segn el ti6o de datos con el >%e tra.a$an. (ys>lN select concat?6arte@T T@ti6oA as 6rod%cto@ CN 6s%gerido as T6recio s%geridoT@ CN 6s%gerido E )7 as 6recioVconVen/io CN from 6rod%ctosQ ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE W 6rod%cto W 6recio s%gerido W 6recioVconVen/io W ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE W Procesador , <F" W N:LL W N:LL W W Procesador ,.+ <F" W 01.77 W +1.77 W W Procesador ).4 <F" W ,71.77 W ,)1.77 W W Procesador 0 <F" W 137.77 W 147.77 W W =2M ),5MB W )7.77 W ,7.77 W W =2M ,13MB W 01.77 W +1.77 W W Disco D%ro 57 <B W 37.77 W 47.77 W W Disco D%ro ),7 <B W 45.77 W 55.77 W W Disco D%ro ,77 <B W ))7.77 W ),7.77 W W Disco D%ro +7 <B W N:LL W N:LL W W Monitor )7,+9543 W 57.77 W ;7.77 W W Monitor )7,+9543 W 34.77 W 44.77 W ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE ), roPs in set ?7.0) secA 2lg%nos e$e(6los de las &%nciones (s %sadas: 6peradores l+gicos Co(6araci*n. 26arte de los estndares Z@ cZ@ M@ N@ IS N:LL@ IS N-T N:LL@ B8TO88N@ IN@ 0) destacan C-2L8SC8@ INT8=\2L@ L82ST@ <=82T8ST 6ara tra.a$ar con listas de /alores. (ys>lN select ^ from 6rod%ctos where 6s%gerido is not nullQ (ys>lN select ^ from 6rod%ctos where 6s%gerido between 37 and 077Q (ys>lN select ^ from 6rod%ctos where cla/e in ?77)@ 771@ 7))AQ -tros 8$e(6los: Listar los 6rod%ctos >%e sean JDisco D%roK Listar los 6rod%ctos donde el 6recio s%gerido sea (ayor a 47. Listar los 6rod%ctos con s%s 6recios del 6ro/eedor JTecnoCGK. 7ontrol del flujo de ejecuci+n C2S8 .. OF8N .. TF8N .. 8LS8 .. 8ND: Si(ilar a la estr%ct%ra >%e creara(os (ediante c%al>%ier leng%a$e de 6rogra(aci*n: (ys>lN S18172 7&S1 9:1. )N7 2:1. Ttr%eT 18S1 T&alseT 1.;Q ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W C2S8 OF8N )N7 TF8N Ttr%eT 8LS8 T&alseT 8ND W ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W tr%e W ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA -tro e$e(6lo: (ys>lN select ?case when 6s%gerido is null CN then 7.77 else 6s%gerido endA as 6s%gerido CN from 6rod%ctosQ ECCCCCCCCCCCE W 6s%gerido W ECCCCCCCCCCCE W 7.77 W W 01.77 W W ,71.77 W W 137.77 W 0, W )7.77 W W 01.77 W W 37.77 W W 45.77 W W ))7.77 W W 7.77 W W 57.77 W W 34.77 W ECCCCCCCCCCCE ), roPs in set ?7.77 secA I#?e96r)@e96r,@e96r0A: T6ica estr%ct%ra condicional@ si la e96r) es cierta@ de/%el/e la e96r,@ en caso contrario@ la e96r0: (ys>lN S18172 I<?S2*7=>?TtestT@Ttest)TA@TnoT@TyesTAQ ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W I#?ST=CMP?TtestT@Ttest)TA@TnoT@TyesTA W ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W no W ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE ) roP in set ?7.77 secA <unciones para trabajar con cadenas de caracteres ?s+lo algunos ejemplos) C-NC2T@ INST= ?encontrar en %na cadenaA@ S:BST=IN<@ LC2S8B=C2S8@ L8N<TF@ =8PL2C8@ T=IM@ entre otras@ son &%nciones si(ilares a las >%e 6ode(os encontrar en leng%a$es de 6rogra(aci*n 6ara (ani6%lar cadenas de caracteres. Q:-T8: deli(ita %na cadena de te9to correcta(ente 6ara e/itar 6ro.le(as al %sarla en sentencias SQL. La cadena res%ltante estar deli(itada 6or co(illas si(6les. Las co(illas@ el /alor 2SCII N:L y otros 6otencial(ente con&licti/os sern de/%eltos 6recedidos del carcter TRT. 8NC-D8BD8C-D8@ C=SPT@ C-MP=8SSB:NC-MP=8SS@ MD1@ etc. Son &%nciones >%e nos 6%eden ay%dar (%c!o en el al(acena(iento de datos sensi.les co(o contraseDas@ etc. <unciones num@ricas Los o6eradores arit(ticos clsicos 6ara reali"ar todo ti6o de o6eraciones@ s%(a@ resta@ di/isi*n@ 00 6rod%cto@ di/isi*n entera@ etc. #%nciones (ate(ticas de todo ti6o@ trigono(tricas@ logart(icas@ etc. <unciones para trabajar con fechas ( horas -.tenci*n de &ec!as en c%al>%ier &or(ato: D2T8V#-=M2T@ D2T8@ N-O@ C:==D2T8@ etc. Mani6%laci*n y clc%los con &ec!as: 2DDD2T8@ 2DDTIM8@ C-N\8=TVTd@ D2T8VDI##@ etc. $.3 !anipulacin de "ilas Para la (ani6%laci*n de &ilas dis6one(os de las sentencias SQL INS8=T@ :PD2T8 y D8L8T8. Para agregar %n registro@ MySQL %tili"a la instr%cci*n INS8=T. C%ando se insertan datos es i(6ortante recordar los no(.res y ti6os de datos de las col%(nas de la ta.la. 8$e(6lo: (ys>lN insert into 6ro/eedores 'alues?TC\2T@Tcrdito@e&ecti/oTAQ (ys>lN insert into 6ro/eedores 'alues?TC-MP:C8NT=-T@Te&ecti/oTAQ -tros e$e(6los: Insertar 0 6ro/eedores con 6or lo (enos 1 6rod%ctos y s%s res6ecti/os 6recios. Para eli(inar %n registro@ MySQL %tili"a la instr%ccion D8L8T8. 8sta instr%ccion es 6arecida a la instr%ccion S8L8CT@ con la sal/edad de >%e co(o se eli(ina el registro co(6leto no es necesario es6eci&icar ning%na col%(na. Tan solo necesita(os indicar el no(.re de la ta.la y la condicion. Por e$e(6lo@ 6ara eli(inar el registro de la ta.la productos: 8$e(6lo: (ys>lN delete from 6ro/eedores where e(6resaZTC-MP:C8NT=-TQ Sa se !a es6licado co(o agregar registros %tili"ando la instr%ccion INS8=T@ co(o eli(inarlos %tili"ando D8L8T8 y co(o rec%6erarlos %tili"ando S8L8CT. Todo lo >%e nos >%eda 6or a6render es co(o (odi&icar los registros e9istentes. 8$e(6lo: (ys>lN update 6ro/eedores set 6ago Z Tcrdito@e&ecti/oT where e(6resa ZTTecnoCGTQ -tros e$e(6los: Corregir el 6recio s%gerido 6ara los 6rod%ctos Procesador de ,<F"@ Disco D%ro de 57<B y 0+ (onitor de 41F" con las sig%ientes cantidades res6ecti/a(ente: )77@ 57 y ;7. 8n alg%nos casos@ MySQL nos 6ro6orciona e9tensiones o (odi&icadores >%e nos 6%eden ay%dar (%c!o en deter(inadas sit%aciones. INS8=T _D8L2S8D`. C%ando la sentencia INS8=T 6%ede tardar (%c!o en de/ol/er el res%ltado ?ta.las (%y grandes o con (%c!os ndices >%e de.en recalc%larse al insertar %na n%e/a &ilaA 6%ede ser interesante aDadir la 6ala.ra cla/e D8L2S8D 6ara >%e MySQL nos de/%el/a el control y realice la inserci*n en seg%ndo 6lano. INS8=T __L-OVP=I-=ITS` W _FI<FVP=I-=ITS``. 8n ta.las (%y oc%6adas@ donde (%c!os clientes reali"an cons%ltas constante(ente@ %na inserci*n lenta 6%ede .lo>%ear al resto de clientes d%rante %n tie(6o. Mediante estos (odi&icadores 6ode(os /ariar este co(6orta(iento. INS8=T _I<N-=8`. 8ste (odi&icador con/ierte los errores de inserci*n en a/isos. Por e$e(6lo@ si intenta(os insertar %na &ila >%e d%6lica %na cla/e 6ri(aria e9istente@ el S<BD nos de/ol/er %n a/iso ?y no insertar la n%e/a &ilaA@ 6ero n%estro 6rogra(a cliente 6odr contin%ar con s% co(etido si el res%ltado de la inserci*n no era i(6ortante 6ara s% correcta e$ec%ci*n. :PD2T8 _L-OVP=I-=ITS` _I<N-=8`. Se co(6ortan de ig%al (odo >%e en la sentencia INS8=T. D8L8T8 _Q:IC]`. Borra elBlos registros sin act%ali"ar los ndices. T=:NC2T8. 8s %na &or(a (%y r6ida de .orrar todos los registros de %na ta.la@ si no necesita(os sa.er el n(ero de registros >%e !a .orrado. D8L8T8 #=-M Mta.laN reali"a el (is(o co(etido@ 6ero de/%el/e el n(ero de registros .orrados. L2STVINS8=TVID?A. De/%el/e el lti(o identi&icador asignado a %na col%(na de ti6o 2:T-VINC=8M8NT des6%s de %na sentencia INS8=T. $.4 Prctica 2 2iempo estimadoA 01 (in. 1. Conectarse a la .ase de datos de(o >%e le corres6onda 2. <enerar %n arc!i/o practica2_demo.sql con las instr%cciones >%e se generen en los sig%ientes 6asos. 3. Crear la ta.la pelicula con los sig%ientes ca(6os 7ampo 2ipo Id INT a%toVincre(ent tit%lo \2=CF2=?3+A director \2=CF2=?),5A actor \2=CF2=?),5A 01 4. Mostrar la ta.la creada y descri.irla ?co(ando descri.eA. 5. Insertar los sig%ientes registros 2Btulo ;irector &ctor Blade =%nner =idley Scott Farrison #ord 2lien =idley Scott Sigo%rney Oea/er Doce (onos Terry <illia( Br%ce Oillis Contact =o.ert de(ecGis Jodie #oster Tron Ste/en Lis.erger Je&& Bridges La g%erra de las gala9ias <eorge L%cas Farrison #ord . Listar 6elc%la?sA de !"idley #cott$ !. Listar tt%los de las 6elc%las de !"idley #cott$@ ordenados al&a.tica(ente ". Ca(.iar el tt%lo de la 6elc%la !#tar %ars$ 6or !&a 'uerra de las 'ala(ias$ #. 8li(inar las 6elc%las de !)arrison *ord$ 1$. Crear la ta.la 6ersona con los ca(6os id ?8nterno no n%loA@ no(.re ?/arc!ar de )3 no n%loA y a6ellidos ?/arc!ar de 3+ no n%lo y co(o de&a%lt cadena /acaA 11. Modi&icar ta.la 6ersona@ al ca(6o no(.re ca(.ir a /arc!ar de 0, no n%lo@ agregar la col%(na edad ti6o entero no n%lo. 12. =eno(.rar ta.la 6ersona a indi/id%o. 13. 2gregar col%(a so6orte a la ta.la 6elic%la con en%(eraci*n ?en%(A T\FST y TD\DT. 14. Insertar dos registros (as a la ta.la 6elic%la@ agregando ade(s de los ca(6os e9istentes@ el ti6o de so6orte de la 6elc%la@ ade(s act%ali"ar los registros e9istentes con %n ti6o de so6orte. 15. 2gregar col%(na categoria a la ta.la 6elic%la con el con$%nto ?setA TcienciaC&icci*nT@ TterrorT@ y Tt!rillerT 1. Insertar dos 6elc%las (as >%e re6resenten el %so de con$%ntos $.5 Prctica 3 2iempo estimadoA 17 (in. 1. 8n .ase a la sig%iente salida@ genera la instr%cci*n SQL ECCCCCCCCCCCCECCCCCCCE W 6arte W total W ECCCCCCCCCCCCECCCCCCCE 03 W Disco D%ro W + W W Monitor W , W W Procesador W + W W =2M W , W ECCCCCCCCCCCCECCCCCCCE + roPs in set ?7.77 secA 2. -.tener el 6rod%cto (as caro@ as co(o el 6ro/eedor >%e lo s%rte. 3. Listar todas los 6ro/eedores con s% 6rod%cto (as caro. 4. -.tener %n 6ro(edio de los 6recios >%e (ane$a cada 6ro/eedor. 5. Listar todos los 6ro/eedores con los 6rod%ctos >%e 6ro/een y s%s 6recios@ ordenados 6or 6ro/eedor@ 6rod%cto y s% 6recio. .. !d"inistracin de MySQL Las tareas ad(inistrati/as co(o la instalaci*n@ gesti*n de %s%arios@ co6ias de seg%ridad@ resta%raciones@ entre otras@ son tareas inel%di.les en c%al>%ier organi"aci*n. Las 6olticas@ los rec%rsos y 6re&erencias de los ad(inistradores generan %na gran /ariedad de estilos y (ecanis(os 6ara lle/ar a ca.o estas tareas@ 6or lo >%e no es 6osi.le !a.lar de (todos co(6leta(ente estandari"ados en estas reas. 8n este a6artado se conte(6lan las o6ciones de %so co(n 6ara la ad(inistraci*n de %n ser/idor MySQL. 89isten tantas alternati/as >%e no es 6osi.le incl%irlas todas en %n c%rso. Por tal (oti/o@ en este ca6t%lo se tratan alg%nos te(as de i(6ortancia 6ara el ad(inistrador@ desde %na 6ers6ecti/a general@ >%e 6er(iten o.tener %na /isi*n glo.al de las 6osi.ilidades 6rcticas de las !erra(ientas ad(inistrati/as. 8ste ca6t%lo se inicia con %na .re/e reseDa del 6roceso de instalaci*n de MySQL. 8n la act%alidad es 6osi.le reali"ar la instalaci*n a 6artir de .inarios e(6a>%etados >%e &acilitan enor(e(ente el 6roceso. La ad(inistraci*n de %s%arios se trata con algo (s de detalle@ incl%yendo %na .re/e descri6ci*n de las ta.las del directorio de datos. Para los te(as de co6ias de seg%ridad y resta%raci*n se (%estran los co(andos y %tilidades de (ayor %so en la 6rctica o(itiendo alg%nos detalles tcnicos 6oco %s%ales. La o6ti(i"aci*n se trata de (anera (%y general@ e96oniendo los te(as .sicos >%e en la 6rctica son 6asados 6or alto. #inal(ente@ se descri.e .re/e(ente c*(o reali"ar la re6licaci*n de datos en %n ser/idor escla/o. %.1 Instalacin de !&S'L La instalaci*n de MySQL no re6resenta (ayores 6ro.le(as@ ya >%e (%c!as distri.%ciones incl%yen 6a>%etes con los >%e reali"ar la instalaci*n y con&ig%raci*n .sica. Sin e(.argo@ a>% /ere(os la instalaci*n de MySQL %tili"ando el c*digo &%ente >%e se 6%ede o.tener en PPP.(ys>l.co(. Ca.e destacar >%e el %so de %na /ersi*n de MySQL co(6ilada tiene la /enta$a de >%e@ 6ro.a.le(ente@ se ada6tar (%c!o (e$or al entorno del ser/idor donde se e$ec%tar@ 6ro6orcionando as %n (e$or rendi(iento. Por contra@ i(6licar (s tra.a$o en caso de >%e s%r$an errores en la /ersi*n y tenga(os >%e act%ali"arla. Las instr%cciones >%e se descri.en en este a6artado se .asan en la doc%(entaci*n 04 incl%ida en la distri.%ci*n. 8n 6ri(er l%gar@ de.e(os aseg%rarnos de >%e conta(os con las li.reras y %tilidades necesarias 6ara co(6ilar los &ic!eros &%ente. Princi6al(ente la lista de /eri&icaci*n de.e incl%ir los &ic!eros sig%ientes: Co(6ilador gcc Li.reras li.gc 8l 6roceso de instalaci*n incl%ye los sig%ientes 6asos: Desco(6ri(ir los arc!i/os &%ente cd B%srBlocalBsrc tar 9"/& (ys>lC\8=SI-N.tar.g" cd (ys>lC\8=SI-N Con&ig%rar la /ersi*n de MySQL >%e /a(os a o.tener. 8l scri6t Tcon&ig%reT ad(ite (%c!os 6ar(etros >%e de.ere(os e9a(inar (ediante la o6ci*n TCC!el6T. Segn los es>%e(as de ta.la >%e necesite(os o e9tensiones (%y concretas >%e de.a(os %tili"ar@ de.ere(os e9a(inar con c%idado s%s o6ciones. 8n s% /ersi*n (s si(6le lo e$ec%tara(os de la sig%iente (anera: .Bcon&ig%re e6re&i9ZB%srBlocalB(ys>l Co(6ilar. Procedere(os a co(6ilar si no !a !a.ido 6ro.le(as con la con&ig%raci*n. 8l 6ar(etro C6re&i9 es6eci&ica la r%ta del siste(a de &ic!eros donde ser instalado. (aGe Instalar el siste(a el ser/idor ya co(6ilado@ (ediante la sig%iente instr%cci*n: (aGe install Crear la .ase de datos inicial del ser/idor@ la >%e al(acenar los %s%arios y 6ri/ilegios. 8sta .ase de datos es i(6rescindi.le 6ara >%e los %s%arios se 6%edan conectar al ser/idor. scri6tsB(ys>lVistallVd. Crear %n n%e/o %s%ario y s% gr%6o@ 6ara >%e el ser/icio se e$ec%te en %n entorno de 6ri/ilegios 05 restringido en el siste(a o6erati/o. 8n ningn caso se reco(ienda >%e el %s%ario >%e e$ec%te el ser/icio (ys>ld sea root. gro%6add (ys>l %seradd Cg (ys>l (ys>l Todos los arc!i/os de.en ser 6ro6iedad de root ?(ys>l no de.e 6oder (odi&icarse a s (is(oA y del gr%6o (ys>l. 8l directorio de datos ser del %s%ario (ys>l 6ara >%e 6%eda tra.a$ar con las .ases de datos@ &ic!eros de registro@ etc. c!oPn C= root B%srBlocalB(ys>l c!gr6 C= (ys>l B%srBlocalB(ys>l c!oPn C= (ys>l B%srBlocalB(ys>lB/ar Crear el arc!i/o de con&ig%raci*n. La distri.%ci*n incl%ye /arios arc!i/os de con&ig%raci*n >%e sir/en co(o 6lantilla 6ara ada6tarlo a n%estras necesidades. 8n este caso@ %tili"a(os la con&ig%raci*n (edia co(o 6lantilla. -6cional(ente 6ode(os editar el arc!i/o BetcB(y.cn& c6 s%66ortC&ilesB(yC(edi%(.cn& BetcB(y.cn& Lan"ar el ser/idor B%srBlocalB(ys>lB.inB(ys>lVsa&e f 8n este estado@ el ser/idor no 6%ede ser/ir an de S<BD. Por de&ecto@ tendre(os creado %n %s%ario TrootT sin contraseDa >%e 6odr acceder tanto desde el e>%i6o local co(o re(ota(ente. 8l sig%iente 6aso ser asignar %na contraseDa a este %s%ario y re6asar los %s%arios y 6ri/ilegios de&inidos. Para asignar la contraseDa@ de.ere(os !acer lo sig%iente: (ys>lad(in C% root 6assPord Jn%e/a6assPdK (ys>lad(in C% root C! !ostVna(e 6assPord Jn%e/a6assPdK Pode(os 6ro.ar el &%nciona(iento del S<BD conectando con el cliente T(ys>lT: (ys>l C% root C6 0; \ea(os a!ora alg%nas caractersticas del ser/idor >%e aca.a(os de instalar: m(s,ld. 8l 6ri(er (todo es lan"arlo directa(ente@ se le 6%eden es6eci&icar las o6ciones >%e el ad(inistrador desee. m(s,ld)safe. 8s %n scri6t >%e e$ec%ta (ys>ld garanti"ando %na con&ig%raci*n seg%ra. 8s (%c!o (s reco(enda.le >%e e$ec%tar (ys>ld directa(ente. m(s,l)ser'er. 8s %n g%i*n >%e reali"a dos tareas: iniciar y detener el ser/idor (ys>ld con los 6ar(etros start y sto6 res6ecti/a(ente. :tili"a (ys>ldVsa&e 6ara lan"ar el ser/idor (ys>ld. No es co(n encontrarlo con ese no(.re@ ya >%e general(ente se co6ia co(o el arc!i/o BetcBinit.dB(ys>l m(s,l)multi. Per(ite la e$ec%ci*n de (lti6les ser/idores de &or(a si(%ltanea. Para detener el ser/idor .sica(ente tene(os dos (todos: -etc-init.d-m(s,l stop. 8s el (ecanis(o estndar en los siste(as ti6o :NIH. 2%n>%e los directorios 6%eden ca(.iar. C m(s,ladmin Du root Dp shutdown. 8s la %tilidad 6ara reali"ar tareas ad(inistrati/as en %n ser/idor MySQL@ en este caso le 6asa(os el 6ar(etro Ts!%tdoPnT 6ara detener el ser/icio. Para >%e los (ensa$es del ser/idor a6are"can en es6aDol@ se de.e e$ec%tar con el 6ar(etro +lan'ua'e: L (ys>ld elang%ageZs6anis! -tra o6ci*n es agregar en el arc!i/o BetcB(y.cn& %na lnea en la secci*n _(ys>ld` _(ys>ld` lang%age Z B%srBs!areB(ys>lBs6anis! %.2 Usuarios & privile(ios 8l acceso al ser/idor MySQL est controlado 6or %s%arios y 6ri/ilegios. Los %s%arios del ser/idor MySQL no tienen ning%na corres6ondencia con los %s%arios del siste(a o6erati/o. 2%n>%e en la 6rctica es co(n >%e algn ad(inistrador de MySQL asigne los (is(os no(.res >%e los %s%arios tienen en el siste(a@ son (ecanis(os total(ente inde6endientes y s%ele ser aconse$a.le en general. 8l %s%ario ad(inistrador del siste(a MySQL se lla(a root. Ig%al >%e el s%6er%s%ario de los siste(as ti6o :NIH. +7 2de(s del %s%ario root@ las instalaciones n%e/as de MySQL incl%yen el %s%ario an*ni(o@ >%e tiene 6er(isos so.re la .ase de datos test. Si >%ere(os@ ta(.in 6ode(os restringirlo asignndole %na contraseDa. 8l %s%ario an*ni(o de MySQL se re6resenta 6or %na cadena /aca. \e(os otra &or(a de asignar contraseDas a %n %s%ario@ desde el cliente de (ys>l y co(o %s%ario root: (ys>lN set 6assPord &or TT'Tlocal!ostT Z 6assPord?Tn%e/o6assPdTAQ La ad(inistraci*n de 6ri/ilegios y %s%arios en MySQL se reali"a a tra/s de las sentencias: E*&.2. -torga 6ri/ilegios a %n %s%ario@ en caso de no e9istir@ se crear el %s%ario. *1F6G1. 8li(ina los 6ri/ilegios de %n %s%ario e9istente. S12 >&SS96*;. 2signa %na contraseDa. ;*6> HS1*. 8li(ina %n %s%ario. ..2.1 La sentencia /0!1T La sinta9is si(6li&icada de grant consta de tres secciones. No 6%ede o(itirse ning%na@ y es i(6ortante el orden de las (is(as: grant lista de 6ri/ilegios on .ase de datos.ta.la to %s%ario 1jemplo Creaci*n de %n n%e/o %s%ario al >%e se otorga alg%nos 6ri/ilegios (ys>lN grant updateI insertI select CN on de(o.6recios CN to /isitante'local!ost Q 8n la 6ri(era lnea se es6eci&ican los 6ri/ilegios >%e sern otorgados@ en este caso se 6er(ite act%ali"ar ?updateA@ insertar ?insertA y cons%ltar ?selectA. La seg%nda lnea es6eci&ica >%e los 6ri/ilegios se a6lican a la ta.la 6recios de la .ase de datos demo. 8n la lti(a lnea se enc%entra el no(.re del %s%ario y el e>%i6o desde el >%e se /a a 6er(itir la cone9i*n. 8l co(ando grant crea la c%enta si no e9iste y@ si e9iste@ agrega los 6ri/ilegios es6eci&icados. 8s 6osi.le asignar %na contraseDa a la c%enta al (is(o tie(6o >%e se crea y se le otorgan 6ri/ilegios: (ys>lN grant updateI insertI select CN on de(o.6recios +) CN to /isitante'local!ost identi&ied .y Tn%e/o6assPdTQ 8n la (is(a sentencia es 6osi.le ta(.in otorgar 6er(isos a (s de %n %s%ario y asignarles@ o no@ contraseDa: (ys>lN grant updateI insertI select CN on de(o.6recios CN to /isitante'local!ost@ CN yo'local!ost identified b( Tn%e/o6assPdT@ CN t%'e>%i6o.re(oto.co(Q ..2.2 %s$eci,icacin de lu+ares ori+en de la cone&in MySQL 6ro6orciona (ecanis(os 6ara 6er(itir >%e el %s%ario realice s% cone9i*n desde di&erentes e>%i6os dentro de %na red es6ec&ica@ s*lo desde %n e>%i6o@ o nica(ente desde el 6ro6io ser/idor. (ys>lN grant updateI insertI select CN on de(o.6recios CN to /isitante'Tb.e(6resa.co(TQ 8l carcter b se %tili"a de la (is(a &or(a >%e en el co(ando liGe: s%stit%ye a c%al>%ier cadena de caracteres. 8n este caso@ se 6er(itira el acceso del %s%ario T/isitanteT ?con contraseDa@ si la t%/iese de&inidaA desde c%al>%ier e>%i6o del do(inio Te(6resa.co(T. -.sr/ese >%e es necesario entreco(illar el no(.re del e>%i6o origen con el &in de >%e sea ace6tado 6or MySQL. 8ntonces@ 6ara 6er(itir la entrada desde c%al>%ier e>%i6o en Internet@ escri.ira(os: CN to /isitante'TbT -.tendra(os el (is(o res%ltado o(itiendo el no(.re del e>%i6o origen y escri.iendo si(6le(ente el no(.re del %s%ario: CN to /isitante Los an&itriones /lidos ta(.in se 6%eden es6eci&icar con s%s direcciones IP. +, to /isitante');,.)35.),5.)7 to /isitante'T);,.)35.),5.bT Los caracteres I bI y IVI no se 6er(iten en los no(.res de los %s%arios. ..2.3 %s$eci,icacin de bases de datos y tablas Des6%s de anali"ar las o6ciones re&erentes a los l%gares de cone9i*n 6er(itidos@ /ea(os a!ora c*(o 6ode(os li(itar los 6ri/ilegios a .ases de datos@ ta.las y col%(nas. 8n el sig%iente e$e(6lo otorga(os 6ri/ilegios so.re todas las ta.las de la .ase de datos demo. (ys>lN grant all CN on de(o.^ CN to T/isitanteT'Tlocal!ostTQ Pode(os o.tener el (is(o res%ltado de esta &or(a: (ys>lN use demoQ (ys>lN grant all CN on ^ CN to T/isitanteT'Tlocal!ostTQ De ig%al (odo@ al es6eci&icar s*lo el no(.re de %na ta.la se inter6retar >%e 6ertenece a la .ase de datos en %so: (ys>lN use demoQ (ys>lN grant all CN on 6recios CN to T/isitanteT'Tlocal!ostTQ -6ciones 6ara la cla%s%la on del co(ando grant 6pci+n Significado ^.^ Todas las .ases de datos y todas las ta.las .ase.^ Todas las ta.las de la .ase de datos es6eci&icada +0 ta.la Ta.la es6eci&icada de la .ase de datos en %so ^ Todas las ta.las de la .ase de datos en %so ..2. %s$eci,icacin de colu"nas 2 contin%aci*n 6resenta(os %n e$e(6lo donde se es6eci&ican las col%(nas so.re las >%e se otorgan 6ri/ilegios con el co(ando grant: (ys>lN grant update?6recio@e(6resaA CN on de(o.6recios CN to /isitante'local!ostQ Pode(os es6eci&icar 6ri/ilegios di&erentes 6ara cada col%(na o gr%6os de col%(nas: (ys>lN grant update?6recioA@ select ?6recio@ e(6resaA CN on de(o.6recios CN to /isitante'local!ostQ ..2.' Ti$os de $rivile+ios MySQL 6ro6orciona %na gran /ariedad de ti6os de 6ri/ilegios. Pri/ilegios relacionados con ta.las: alterI createI deleteI dropI inde%I insertI selectI update 2lg%nos 6ri/ilegios ad(inistrati/os: &ile@ 6roccess@ s%6er reload@ re6lication client@ grant o6tion@ s!%tdoPn 2lg%nos 6ri/ilegios 6ara &ines di/ersos: lock tablesI show databasesI create temporar( tables. 8l 6ri/ilegio all otorga todos los 6ri/ilegios e9ce6t%ando el 6ri/ilegio grant option. S el 6ri/ilegio usage no otorga ning%no@ lo c%al es til c%ando se desea@ 6or e$e(6lo@ si(6le(ente ca(.iar la contraseDa: grant usage on ^.^ to /isitante'local!ost identified b( TsecretoTQ ++ Ti6os de 6ri/ilegios en MySQL 2ipo de pri'ilegio 6peraci+n ,ue permite all Jpri'ilegesK -torga todos los 6ri/ilegios e9ce6to grant option usage No otorga ningn 6ri/ilegio alter Pri/ilegio 6ara alterar la estr%ct%ra de %na ta.la create Per(ite el %so de create table delete Per(ite el %so de delete drop Per(ite el %so de drop table inde% Per(ite el %so de inde% y drop inde% insert Per(ite el %so de insert select Per(ite el %so de select update Per(ite el %so de update file Per(ite le %so de select . . . into outfile y load data infile process Per(ite el %so de show full procces list super Per(ite la e$ec%ci*n de co(andos de s%6er/isi*n reload Per(ite el %so de flush replication client Per(ite 6reg%ntar la locali"aci*n de (aestro y escla/o replication sla'e Per(ite leer los binlo' del (aestro grant option Per(ite el %so de grant y re'oke shutdown Per(ite dar de .a$a al ser/idor lock tables Per(ite el %so de lock tables show tables Per(ite el %so de show tables create temporar( tables Per(ite el %so de create temporar( table 8n entornos grandes@ es &rec%ente encontrarse en la necesidad de delegar el tra.a$o de ad(inistrar %n ser/idor de .ases de datos 6ara >%e otros %s%arios@ ade(s del ad(inistrador@ 6%edan res6onsa.ili"arse de otorgar 6ri/ilegios so.re %na .ase de datos 6artic%lar. 8sto se 6%ede !acer en MySQL con el 6ri/ilegio grant option: (ys>lN grant allI grant option CN on de(o.^ CN to o6erador'local!ostQ +1 8l (is(o res%ltado se 6%ede o.tener con la sig%iente sinta9is alternati/a: (ys>lN grant all CN on de(o.^ CN to o6erador'local!ost CN with grant optionQ De este (odo el %s%ario operador 6odr dis6oner de todos los 6ri/ilegios so.re la .ase de datos demo@ incl%ido el de controlar el acceso a otros %s%arios. ..2.- O$ciones de encri$tacin MySQL 6%ede esta.lecer cone9iones seg%ras encri6tndolas (ediante el 6rotocolo SSL^Q de esta (anera@ los datos >%e se trans(iten ?tanto la cons%lta@ en %n sentido@ co(o el res%ltado@ en el otroA entre el cliente y el ser/idor estarn 6rotegidos contra intr%sos. Para es6eci&icar >%e %n %s%ario de.e conectarse o.ligatoria(ente con este 6rotocolo@ se %tili"a la cl%s%la re>%ire: (ys>lN grant all CN on ^.^ CN to /isitante'local!ost CN re,uire sslQ Las cone9iones encri6tadas o&recen 6rotecci*n contra el ro.o de in&or(aci*n@ 6ero s%6onen %na carga adicional 6ara el ser/icio@ >%e de.e desencri6tar la 6etici*n del cliente y encri6tar la res6%esta ?ade(s de %n 6roceso (s largo de negociaci*n al conectarA@ 6or ello@ (er(an el rendi(iento del S<BD. ..2.. Li"ites de uso Los rec%rsos &sicos del ser/idor sie(6re son li(itados: si se conectan (%c!os %s%arios al (is(o tie(6o al ser/idor y reali"an cons%ltas o (ani6%laciones de datos co(6le$as@ es 6ro.a.le >%e 6%eda decaer el rendi(iento nota.le(ente. :na 6osi.le sol%ci*n a este 6ro.le(a es li(itar a los %s%arios el tra.a$o >%e 6%eden 6edir al ser/idor con tres 6ar(etros: M9i(o n(ero de cone9iones 6or !ora. M9i(o n(ero de cons%ltas 6or !ora. M9i(o n(ero de act%ali"aciones 6or !ora. La sinta9is de estas li(itaciones es co(o se (%estra a contin%aci*n: (ys>lN grant all +3 CN on ^.^ CN to CN with =&L)76.172I6.S)>1*):6H* 0 CN =&L)MH1*I1S)>1*):6H* 077 CN =&L)H>;&21S)>1*):6H* 07Q ..2.2 %li"inar $rivile+ios 8l co(ando re'oke 6er(ite eli(inar 6ri/ilegios otorgados con grant a los %s%arios. \ea(os %n e$e(6lo re6resentati/o: re'oke all on ^.^ from /isitante'local!ostQ 2l e$ec%tar este co(ando se le retiran al %s%ario visitante todos s%s 6ri/ilegios so.re todas las .ases de datos@ c%ando se conecta desde local,ost. 8l co(ando anterior no retira todos los 6ri/ilegios del %s%ario visitante@ s*lo se los retira c%ando se conecta desde local,ost. Si el %s%ario se conecta desde otra localidad ?y tena 6er(iso 6ara !acerloA s%s 6ri/ilegios 6er(anecen intactos. ..2.3 %li"inar usuarios 2ntes de 6roceder a la eli(inaci*n de %n %s%ario@ es necesario aseg%rarse de >%e se le !an >%itado 6ri(ero todos s%s 6ri/ilegios. :na /e" aseg%rado este detalle@ se 6rocede a eli(inarlo (ediante el co(ando drop user: (ys>lN drop user /isitanteQ ..2.14 La base de datos de $rivile+ios5 "ys6l MySQL al(acena la in&or(aci*n so.re los %s%arios y s%s 6ri/ilegios en %na .ase de datos co(o c%al>%ier otra@ c%yo no(.re es (ys>l. Si e96lora(os s% estr%ct%ra@ entendere(os la (anera co(o MySQL al(acena la in&or(aci*n de s%s %s%arios y 6ri/ilegios: m(s,l C% root C6 (ys>lN use m(s,lQ +4 (ys>lN show tablesQ ECCCCCCCCCCCCCCCCCCCCCCCCCCCE W Ta.lesVinV(ys>l W ECCCCCCCCCCCCCCCCCCCCCCCCCCCE W col%(nsV6ri/ W W d. W W e/ent W W &%nc W W generalVlog W W !el6Vcategory W W !el6VGeyPord W W !el6Vrelation W W !el6Vto6ic W W !ost W W nd.V.inlogVinde9 W W 6l%gin W W 6roc W W 6rocsV6ri/ W W ser/ers W W sloPVlog W W ta.lesV6ri/ W W ti(eV"one W W ti(eV"oneVlea6Vsecond W W ti(eV"oneVna(e W W ti(eV"oneVtransition W W ti(eV"oneVtransitionVty6e W W %ser W ECCCCCCCCCCCCCCCCCCCCCCCCCCCE ,0 roPs in set ?7.77 secA (ys>lN show columns from %serQ ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W +5 ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE W Fost W c!ar?37A W N- W P=I W W W W :ser W c!ar?)3A W N- W P=I W W W W PassPord W c!ar?+)A W N- W W W W W SelectV6ri/ W en%(?TNT@TSTA W N- W W N W W W InsertV6ri/ W en%(?TNT@TSTA W N- W W N W W W :6dateV6ri/ W en%(?TNT@TSTA W N- W W N W W W DeleteV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateV6ri/ W en%(?TNT@TSTA W N- W W N W W W Dro6V6ri/ W en%(?TNT@TSTA W N- W W N W W W =eloadV6ri/ W en%(?TNT@TSTA W N- W W N W W W S!%tdoPnV6ri/ W en%(?TNT@TSTA W N- W W N W W W ProcessV6ri/ W en%(?TNT@TSTA W N- W W N W W W #ileV6ri/ W en%(?TNT@TSTA W N- W W N W W W <rantV6ri/ W en%(?TNT@TSTA W N- W W N W W W =e&erencesV6ri/ W en%(?TNT@TSTA W N- W W N W W W Inde9V6ri/ W en%(?TNT@TSTA W N- W W N W W W 2lterV6ri/ W en%(?TNT@TSTA W N- W W N W W W S!oPVd.V6ri/ W en%(?TNT@TSTA W N- W W N W W W S%6erV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateVt(6Vta.leV6ri/ W en%(?TNT@TSTA W N- W W N W W W LocGVta.lesV6ri/ W en%(?TNT@TSTA W N- W W N W W W 89ec%teV6ri/ W en%(?TNT@TSTA W N- W W N W W W =e6lVsla/eV6ri/ W en%(?TNT@TSTA W N- W W N W W W =e6lVclientV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W W S!oPV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W W 2lterVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateV%serV6ri/ W en%(?TNT@TSTA W N- W W N W W W 8/entV6ri/ W en%(?TNT@TSTA W N- W W N W W W TriggerV6ri/ W en%(?TNT@TSTA W N- W W N W W W sslVty6e W en%(?TT@T2NST@TH17;T@TSP8CI#I8DTA W N- W W W W +; W sslVci6!er W .lo. W N- W W N:LL W W W 917;Viss%er W .lo. W N- W W N:LL W W W 917;Vs%.$ect W .lo. W N- W W N:LL W W W (a9V>%estions W int?))A %nsigned W N- W W 7 W W W (a9V%6dates W int?))A %nsigned W N- W W 7 W W W (a9Vconnections W int?))A %nsigned W N- W W 7 W W W (a9V%serVconnections W int?))A %nsigned W N- W W 7 W W ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE 0; roPs in set ?7.77 secA (ys>lN show columns from d.Q ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE W Fost W c!ar?37A W N- W P=I W W W W D. W c!ar?3+A W N- W P=I W W W W :ser W c!ar?)3A W N- W P=I W W W W SelectV6ri/ W en%(?TNT@TSTA W N- W W N W W W InsertV6ri/ W en%(?TNT@TSTA W N- W W N W W W :6dateV6ri/ W en%(?TNT@TSTA W N- W W N W W W DeleteV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateV6ri/ W en%(?TNT@TSTA W N- W W N W W W Dro6V6ri/ W en%(?TNT@TSTA W N- W W N W W W <rantV6ri/ W en%(?TNT@TSTA W N- W W N W W W =e&erencesV6ri/ W en%(?TNT@TSTA W N- W W N W W W Inde9V6ri/ W en%(?TNT@TSTA W N- W W N W W W 2lterV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateVt(6Vta.leV6ri/ W en%(?TNT@TSTA W N- W W N W W W LocGVta.lesV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W W S!oPV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W W CreateVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W W 2lterVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W W 89ec%teV6ri/ W en%(?TNT@TSTA W N- W W N W W 17 W 8/entV6ri/ W en%(?TNT@TSTA W N- W W N W W W TriggerV6ri/ W en%(?TNT@TSTA W N- W W N W W ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE ,, roPs in set ?7.77 secA (ys>lN show columns from ta.lesV6ri/Q 8s 6osi.le reali"ar (odi&icaciones directa(ente so.re estas ta.las y o.tener los (is(os res%ltados >%e si %tili"ra(os los co(andos grantI re'okeI set password o drop user: (ys>lN update user CN set PassPord Z password?Tn%e/o6assPdTA CN where :ser ZT/isitanteT and Fost Z Tlocal!ostTQ (ys>lN flush pri'ilegesQ 8l co(ando flush pri'ileges solicita a MySQL >%e /%el/a a leer las ta.las de 6ri/ilegios. 8n el (o(ento de e$ec%tarse@ el ser/idor lee la in&or(aci*n de estas ta.las so.re 6ri/ilegios. Pero si se !an alterado las ta.las (an%al(ente@ no se enterar de los ca(.ios !asta >%e %tilice(os el co(ando flush pri'ileges. Ta.las de la .ase de datos mysql 2abla 7ontenido %ser C%entas de %s%ario y s%s 6ri/ilegios glo.ales d. Pri/ilegios so.re .ases de datos ta.lesV6ri/ Pri/ilegios so.re ta.las col%(nsV6ri/ Pri/ilegios so.re col%(nas !ost Pri/ilegios de otros e>%i6os an&itriones so.re .ases de datos No es 6osi.le eli(inar (ediante %n solo co(ando re/oGe todos los 6ri/ilegios de %n %s%ario. 1jemplo Se otorgan derec!os a %n %s%ario con dos co(andos grant. -.ser/ando el contenido de la .ase de datos de 6ri/ilegios@ 6ode(os entender el co(6orta(iento de los co(andos grant y re/oGe. Pri(ero asigna(os 6ri/ilegios 6ara %sar el co(ando select al %s%ario /isitante con dos co(andos grant: el 6ri(ero de ellos le 6er(ite el ingreso desde el ser/idor n%estraVorg.org y el seg%ndo le otorga el (is(o ti6o de 6ri/ilegio@ 6ero desde c%al>%ier e>%i6o en Internet. 1) (ys>lN grant select CN on ^.^ CN to /isitante'n%estraVorg.orgQ Q%ery -]@ 7 roPs a&&ected ?7.77 secA (ys>lN grant select CN on ^.^ CN to /isitante'TbTQ Q%ery -]@ 7 roPs a&&ected ?7.77 secA Cons%ltando la ta.la user de la .ase de datos de 6ri/ilegios@ 6ode(os o.ser/ar los /alores ISI en la col%(na del privile'io select. (ys>lN select %ser@!ost@selectV6ri/ from %ser CN where %serZT/isitanteTQ ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE W %ser W !ost W selectV6ri/ W ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE W /isitante W b W S W W /isitante W n%estraVorg.org W S W ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE , roPs in set ?7.77 secA 2!ora solicita(os eli(inar el privile'io select de todas las .ases de datos y de todos los e>%i6os en Internet. (ys>lN re'oke all CN on ^.^ CN from /isitante'TbTQ Q%ery -]@ 7 roPs a&&ected ?7.77 secA 1, (ys>lN select %ser@!ost@selectV6ri/ from %ser CN where %serZT/isitanteTQ ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE W %ser W !ost W selectV6ri/ W ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE W /isitante W b W N W W /isitante W n%estraVorg.org W S W ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE , roPs in set ?7.77 secA 8n la ta.la %ser o.ser/a(os >%e@ e&ecti/a(ente@ se !a eli(inado el 6ri/ilegio 6ara /isitante'TbT 6ero no 6ara T/isitante'n%estraVorg.orgT. MySQL considera >%e son direcciones di&erentes y res6eta los 6ri/ilegios otorgados a %no c%ando se (odi&ica otro. %.3 Prctica 4 2iempo estimado: )!r 1. Todas las instr%cciones creadas@ g%ardarlas en %n arc!i/o de no(.re 6ractica+.s>l 2. Ca(.iar 6assPord de root 3. Crear .ase de datos de(o, 4. Crear dos ta.las a s% criterio@ e$e(6lo ta.la)@ ta.la, 5. Crear los sig%ientes %s%arios y 6ri/ilegios Hsuario >ri'ilegios 6bjeto 6rigen 7one%i+n %s%ario) Todos los 6ri/ilegios ta.la) Local!ost@ direcci*n IP de %n co(6aDero %s%ario, Todos los 6ri/ilegios ta.la, Local!ost@ direcci*n IP de %n co(6aDero %s%ario) Select@ Insert@ :6date ta.la, Local!ost@ direcci*n IP de %n co(6aDero %s%ario, Select@ :6date ta.la) Local!ost@ direcci*n IP de %n co(6aDero %s%ario0 Todos los 6ri/ilegios ta.la)@ ta.la, C%al>%ier origen de cone9i*n . 8n .ase a las ta.las@ %s%arios y 6ri/ilegios esta.lecidos@ !acer las 6r%e.as corres6ondientes de (anera local@ as co(o desde la direcci*n IP re(ota de&inida. Tra.a$ar en con$%nto con %n 10 co(6aDero. %.4 Copias de se(uridad Ningn siste(a es 6er&ecto ni est a sal/o de errores !%(anos@ cortes en el s%(inistro de la corriente elctrica@ des6er&ectos en el !ardPare o errores de so&tPareQ as >%e %na la.or (s >%e reco(enda.le del ad(inistrador del ser/idor de .ases de datos es reali"ar co6ias de seg%ridad y diseDar %n 6lan de contingencia. Se de.en !acer ensayos del 6lan 6ara aseg%rar s% .%en &%nciona(iento y@ si se desc%.ren ano(alas@ reali"ar los a$%stes necesarios. No e9iste %na receta %ni/ersal >%e nos indi>%e c*(o lle/ar n%estras co6ias de seg%ridad de datos. Cada ad(inistrador de.e diseDar el de s% siste(a de ac%erdo a s%s necesidades@ rec%rsos@ riesgos y el /alor de la in&or(aci*n. MySQL o&rece /arias alternati/as de co6ia de seg%ridad de la in&or(aci*n. La 6ri(era >%e 6ode(os (encionar consiste si(6le(ente en co6iar los arc!i/os de datos. 8&ecti/a(ente@ es %na o6ci*n /lida y sencilla. 8n 6ri(era instancia son necesarios dos re>%isitos 6ara lle/arla a ca.o: Conocer la %.icaci*n y estr%ct%ra del directorio de datos. Parar el ser/icio MySQL (ientras se reali"a la co6ia. 8n c%anto a la %.icaci*n y estr%ct%ra del directorio@ recorde(os >%e la distri.%ci*n de MySQL %.ica el directorio de datos en B%srBlocalB(ys>lB/ar@ las distri.%ciones <N:BLin%9 .asadas en 6a>%etes co(o D8B o =PM %.ican@ 6or lo general@ los datos en B/arBli.B(ys>l. Si 6or algn (oti/o no encontra(os el directorio de datos@ 6ode(os cons%ltarlo a MySQL. 8l co(ando s!oP /aria.les nos (%estra todas las /aria.les dis6oni.les@ .asta reali"ar %n &iltro con la cla%s%la liGe: (ys>lN show 'ariables like TdatadirTQ ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE W \aria.leVna(e W \al%e W ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE W datadir W B/arBli.B(ys>lB W ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE ) roP in set ?7.7) secA :na /e" %.icados los arc!i/os@ detene(os la e$ec%ci*n del ser/idor: %n (odo sencillo de aseg%rarnos de >%e la .ase de datos no ser (odi&icada (ientras ter(ina(os la co6ia: L (ys>lad(in C% root C6 s!%tdoPn #inal(ente@ co6ia(os el directorio co(6leto con todas las .ases de datos: 1+ L cp Cr B/arBli.B(ys>lB Balg%nVdirB Por s%6%esto 6ode(os elegir otras &or(as de co6iarlo o co(6ri(irlo@ de ac%erdo a n%estras 6re&erencias y necesidades. L tar c"& (ys>lC.acG%6.tar.g" B/arBli.B(ys>l Si >%ere(os co6iar s*lo %na .ase de datos@ co6ia(os el directorio con el (is(o no(.re de la .ase de datos: L cp Cr B/arBli.B(ys>lBde(oB Balg%nVdirBres6aldoVde(oB Ta(.in es 6osi.le !acer co6ia de seg%ridad de %na sola ta.la. L cp Cr B/arBli.B(ys>lBde(oB6rod%ctos.^ B alg%nVdirB.acG%6Vde(oB Co(o 6ode(os o.ser/ar@ la organi"aci*n de la .ase de datos en MySQL es(%y si(6le: Todas las .ases de datos se al(acenan en %n directorio@ lla(ado el directorio de datos?datadirA. Cada .ase de datos se al(acena co(o %n s%.directorio del directorio de datos. Cada ta.la se al(acena en %n arc!i/o@ aco(6aDada de otros arc!i/os a%9iliares con el (is(o no(.re y di&erente e9tensi*n. 8l 6ro.le(a de este (ecanis(o es >%e de.e(os detener el ser/icio de .ases de datos (ientras reali"a(os el res6aldo. ...1 "ys6l*otco$y :n (ecanis(o >%e 6er(ite reali"ar la co6ia de los arc!i/os del ser/idor sin necesidad de detener el ser/icio es el scri6t T(ys>l!otco6yT. 8l scri6t est escrito en Perl y .lo>%ea las ta.las (ientras reali"a el res6aldo 6ara e/itar s% (odi&icaci*n. Se %sa de la sig%iente (anera: L m(s,lhotcop( de(o Balg%nVdirectorio 8n este caso@ crear %n directorio Balg%nVdirectorioBde(o con todos los arc!i/os de la .ase de datos. 8l co(ando (ys>l!otco6y 6%ede reci.ir s*lo el no(.re de %na .ase de datos co(o 6ar(etro: 11 L m(s,lhotcop( de(o 8n este caso@ crear %n directorio B/arBli.B(ys>lBde(oVco6y. 8ste (todo no &%nciona 6ara ta.las con el (ecanis(o de al(acena(iento ti6o InnoDB. ...2 "ys6ldu"$ Las dos o6ciones anteriores re6resentan co6ias .inarias de la .ase de datos. 8l co(ando (ys>ld%(6@ en ca(.io@ reali"a %n /olcado de las .ases de datos 6ero trad%cindolas a SQLQ es decir@ entrega %n arc!i/o de te9to con todos los co(andos necesarios 6ara /ol/er a reconstr%ir las .ases de datos@ s%s ta.las y s%s datos. 8s el (todo (s til 6ara co6iar o distri.%ir %na .ase de datos >%e de.er al(acenarse en otros ser/idores. L m(s,ldump de(o N de(o.s>l 8l co(ando (ys>ld%(6 o&rece (%ltit%d de 6ar(etros 6ara (odi&icar s% co(6orta(iento o el ti6o de /olcado generado: 6or de&ecto@ genera sentencias SQL@ 6ero 6%ede generar &ic!eros de datos ti6o CS\ % otros &or(atos. Ta(.in 6ode(os es6eci&icarle >%e !aga el /olcado de todas las .ases de datos o >%e s*lo /%el>%e los datos y no la creaci*n de las ta.las@ etc. Las 6ri(eras lneas del arc!i/o de(o.s>l segn el e$e(6lo anterior tendran el sig%iente as6ecto: CC MySQL d%(6 )7.)0 Distri. 1.).15@ &or de.ianClin%9Cgn% ?i353A CC CC Fost: local!ost Data.ase: de(o CC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CC Ser/er /ersion 1.).15C)%.%nt%) CC CC Ta.le str%ct%re &or ta.le ggananciag CC D=-P T2BL8 I# 8HISTS ggananciagQ B^c+7)7) S8T 'sa/edVcsVclient Z ''c!aracterVsetVclient ^BQ B^c+7)7) S8T c!aracterVsetVclient Z %t&5 ^BQ C=82T8 T2BL8 ggananciag ? g/entag en%(?TPor (ayorT@TPor (enorTA D8#2:LT N:LL@ 13 g&actorg deci(al?,@,A D8#2:LT N:LL A 8N<IN8ZMyIS2M D8#2:LT CF2=S8TZlatin)Q B^c+7)7) S8T c!aracterVsetVclient Z 'sa/edVcsVclient ^BQ CC CC D%(6ing data &or ta.le ggananciag CC L-C] T2BL8S ggananciag O=IT8Q B^c+7777 2LT8= T2BL8 ggananciag DIS2BL8 ]8SS ^BQ INS8=T INT- ggananciag \2L:8S ?TPor (ayorT@T7.;;TA@?TPor (enorT@T7.;;TAQ B^c+7777 2LT8= T2BL8 ggananciag 8N2BL8 ]8SS ^BQ :NL-C] T2BL8SQ La /enta$a de %tili"ar (ys>ld%(6 es >%e 6er(ite >%e los arc!i/os 6%edan ser ledos ?y (odi&icadosA en %n si(6le editor de te9tos@ y 6%eden ser %tili"ados 6ara (igrar la in&or(aci*n a otro S<BD >%e so6orte SQL. 2de(s so6orta todos los ti6os de ta.las. La des/enta$a es >%e s% 6rocesa(iento es lento y los arc!i/os >%e se o.tienen son (%y grandes. ...3 0estaurar a $artir de res$aldos 8n algn (o(ento@ sea 6or el (oti/o >%e sea@ necesitare(os reali"ar la resta%raci*n de n%estras .ases de datos. Si tene(os %na co6ia .inaria del directorio de datos@ .astar con co6iarla al directorio original y reiniciar el ser/idor: [ m(s,ladmin C% root C6 s!%tdoPn [ cp Balg%nVdirBres6aldoC(ys>lB^ B/arBli.B(ys>l [ chown C= (ys>l.(ys>l B/arBli.B(ys>l [ m(s,l)safe 8s i(6ortante resta%rar ta(.in el d%eDo y el gr%6o de los arc!i/os de datos@ 6ara tener los accesos correcta(ente esta.lecidos. 8n este e$e(6lo se ado6ta el s%6%esto >%e el %s%ario (ys>l es el >%e e$ec%ta el ser/idor (ys>ld. La resta%raci*n de %n arc!i/o SQL o.tenido con (ys>ld%(6@ se reali"a desde el cliente (ys>l@ la .ase de datos de.e e9istir@ ya >%e el arc!i/o de(o.s>l no la crea 6or de&ecto. 14 L m(s,l de(o C% root C6 M de(o.s>l %.5 )eparacin de tablas 8n deter(inadas circ%nstancias de %so (%y &rec%ente@ co(o la inserci*n y .orrado (asi/os de datos@ coincidiendo con .lo>%eos del siste(a o llenado del es6acio en disco % otras circ%nstancias@ es 6osi.le >%e %na ta.la o alg%nos de s%s ndices se corro(6an. Pode(os cons%ltar el estado de integridad de %na ta.la con el co(ando check table@ >%e reali"a alg%nas /eri&icaciones so.re la ta.la en .%sca de errores y nos entrega %n in&or(e con las sig%ientes col%(nas de in&or(aci*n: (ys>lN check table 6reciosQ ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE W Ta.le W -6 W MsgVty6e W MsgVte9t W ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE W de(o.6recios W c!ecG W stat%s W -] W ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE ) roP in set ?7.7) secA La col%(na -6 descri.e la o6eraci*n >%e se reali"a so.re la ta.la. Para el co(ando check table esta col%(na sie(6re tiene el /alor c,ec- 6or>%e sa es la o6eraci*n >%e se reali"a. La col%(na .s'_type 6%de contener %no de los /alores status, error, info, o /arnin'. S la col%(na .s'_te(t es el te9to >%e re6orta de alg%na sit%aci*n encontrada en la ta.la. 8s 6osi.le >%e la in&or(aci*n entregada incl%ya /arias &ilas con di/ersos (ensa$es@ 6ero el lti(o (ensa$e sie(6re de.e ser el (ensa$e -] de ti6o stat%s. 8n otras ocasiones c!ecG ta.le no reali"ar la /eri&icaci*n de ta.la@ en s% l%gar entregar co(o res%ltado el (ensa$e Ta.le is already %6 to date@ >%e signi&ica >%e el gestor de la ta.la indica >%e no !ay necesidad de re/isarla. MySQL no 6er(ite reali"ar cons%ltas so.re %na ta.la daDada y en/iar %n (ensa$e de error sin des6legar res%ltados 6arciales: (ys>lN select ^ from 6reciosQ 8==-= )7)3: No 6%edo a.rir arc!i/o: I6recios.MSDI. ?8rror: )+1A Para o.tener in&or(aci*n del signi&icado del error )+1@ %sare(os la %tilidad en lnea de co(andos 6error: 15 L perror )+1 )+1 Z Ta.le Pas (arGed as cras!ed and s!o%ld .e re6aired Des6%s de %n (ensa$e co(o el anterior@ es el (o(ento de reali"ar %na /eri&icaci*n de la integridad de la ta.la 6ara o.tener el re6orte. (ys>lN check table 6recios e%tendedQ ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W Ta.le W -6 W MsgVty6e W MsgVte9t W ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE Wde(o.6recios Wc!ecG W error WSi"e o& data&ile is:+17 S!o%ld .e:+1, W Wde(o.6recios Wc!ecG W error W Corr%6t W ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE , roPs in set ?7.77 secA 8n este caso locali"a(os dos errores en la ta.la. La o6ci*n e%tended es %no de los cinco ni/eles de co(6ro.aci*n >%e se 6%eden solicitar 6ara /eri&icar %na ta.la. Ti6os de /eri&icaci*n 2ipo Significado ,uick No re/isa las &ilas en .%sca de re&erencias incorrectas. fast Sola(ente /eri&ica las ta.las >%e no &%eron cerradas adec%ada(ente. changed \eri&ica s*lo las ta.las (odi&icadas desde la lti(a /eri&icaci*n o >%e no se !an cerrado a6ro6iada(ente. medium =e/isa las &ilas 6ara /eri&icar >%e los ligados .orrados son correctos@ /eri&ica las s%(as de co(6ro.aci*n de las &ilas. e%tended =eali"a %na .s>%eda co(6leta en todas las cla/es de cada col%(na. <aranti"a el )77b de la integridad de la ta.la. La sentencia re6air ta.le reali"a la re6araci*n de ta.las ti6o =(IS&= corr%6tas: 1; (ys>lN repair table 6reciosQ ECCCCCCCCCCCCCECCCCCCECCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE W Ta.le W -6 W MsgVty6eW MsgVte9t W ECCCCCCCCCCCCCECCCCCCECCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE Wde(o.6recios Wre6airW in&o W Orong .ytesec: 7C)4C) at )35QSGi66ed W Wde(o.6recios Wre6airW Parning W N%(.er o& roPs c!anged &ro( ,7 to 4 W Wde(o.6recios Wre6airW stat%s W -] W ECCCCCCCCCCCCCECCCCCCCECCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE 0 roPs in set ?7.7+ secA 8l seg%ndo (ensa$e in&or(a de la 6rdida de )0 &ilas d%rante el 6roceso de re6araci*n. 8sto signi&ica@ co(o es nat%ral@ >%e el co(ando re6air ta.le es til s*lo en casos de e9tre(a necesidad@ ya >%e no garanti"a la rec%6eraci*n total de la in&or(aci*n. 8n la 6rctica@ sie(6re es (e$or reali"ar la resta%raci*n de la in&or(aci*n %tili"ando las co6ias de seg%ridad. 8n caso de desastre@ se de.e conocer el (oti/o >%e origina la corr%6ci*n de las ta.las y to(ar las (edidas adec%adas 6ara e/itarlo. 8n lo >%e res6ecta a la esta.ilidad de MySQL@ se 6%ede con&iar en >%e (%y 6ro.a.le(ente n%nca ser necesario %tili"ar el co(ando re6air ta.le. 8l co(ando o6ti(i"e ta.le 6%ede ta(.in reali"ar alg%nas correcciones so.re %na ta.la. %.$ Prctica 5 2iempo estimado: )1 (in. 1. =es6aldar .ase de datos demo en arc!i/o demo_bac-up.sql con m(s,ldump 2. Crear n%e/a .ase de datos demo_restore 3. =esta%rar .ase de datos en .ase al arc!i/o demo_bac-up.sql so.re .ase de datos demo_restore 4. Co(6ro.ar res%ltados %.% )eplicacin La re6licaci*n es la co6ia sincroni"ada entre dos ser/idores de .ases de datos de &or(a >%e c%al>%iera de los dos 6%ede entregar los (is(os res%ltados a s%s clientes. MySQL incl%ye la 6osi.ilidad de re6licaci*n con las sig%ientes caractersticas: #%nciona con el es>%e(a (aestroCescla/o: e9iste %n ser/idor (aestro >%e lle/a el control central y %no o /arios ser/idores escla/os >%e se (antienen sincroni"ados con el ser/idor 37 (aestro. La r6lica se reali"a (ediante %n registro de los ca(.ios reali"ados en la .ase de datos: no se reali"an las co6ias de las .ases de datos 6ara (antenerlas sincroni"adas@ en s% l%gar se in&or(a de las o6eraciones reali"adas en el ser/idor (aestro ?insert@ delete @ %6date ...A 6ara >%e las realicen a s% /e" los ser/idores escla/os. No es 6osi.le reali"ar ca(.ios en los ser/idores escla/os@ son e9cl%si/a(ente 6ara cons%ltas. 8ste sencillo es>%e(a 6er(ite la creaci*n de re6licas sin (ayores co(6licaciones o.teniendo los sig%ientes .ene&icios: Se distri.%ye la carga de tra.a$o. 8l siste(a es red%ndante@ 6or lo >%e en caso de desastre !ay (enos 6ro.a.ilidades de 6erder los datos. 8s 6osi.le reali"ar los res6aldos de %n escla/o sin interr%(6ir el tra.a$o del ser/idor (aestro. ....1 7re$aracin $revia 8l e>%i6o (aestro de.e tener acceso 6or red. 2ntes de reali"ar la con&ig%raci*n de los ser/idores (aestro y escla/o es necesario reali"ar las sig%ientes tareas: 2seg%rarse de >%e en a(.os est instalada la (is(a /ersi*n de MySQL. 2seg%rarse de >%e ning%no de los ser/idores atender 6eticiones d%rante el 6roceso de con&ig%raci*n. 2seg%rarse de >%e las .ases de datos del ser/idor (aestro !an sido co6iadas (an%al(ente en el ser/idor escla/o@ de (anera >%e en a(.os se enc%entre e9acta(ente la (is(a in&or(aci*n. 2seg%rarse de >%e a(.os atienden cone9iones /a TCPBIP. Por seg%ridad@ esta o6ci*n est desacti/ada 6or o(isi*n. Para acti/arla se de.e co(entar la lnea s-ip_net/or-in' en el arc!i/o de con&ig%raci*n 0etc0my.cnf ....2 Con,i+uracin del servidor "aestro 8n el ser/idor (aestro crea(os %na c%enta de %s%ario con 6er(isos de re6licaci*n 6ara a%tori"ar@ en el ser/idor (aestro@ al n%e/o %s%ario 6ara reali"ar r6licas: (ys>lN grant replication sla'e CN on ^.^ CN to re6licador'escla/o.e(6resa.co( identified b( TsecretoTQ =e6licador es el no(.re del n%e/o %s%ario. 8scla/o.e(6resa.co( es la direcci*n del ser/idor escla/o. TSecretoT es la contraseDa. 3) 8l ser/idor (aestro lle/ar %n arc!i/o de registro T.inlogT donde se registrarn todas las solicit%des de act%ali"aci*n >%e se realicen en las .ases de datos. Para acti/ar la creaci*n de este arc!i/o de.e(os editar el arc!i/o BetcB(y.cn& y agregar las sig%ientes lneas en la secci*n _(ys>ld`: _(ys>ld` logC.in ser/erCid Z ) 8l ser/idor (aestro de.e identi&icarse con %n id@ en este caso ser el n(ero ). a contin%aci*n@ reinicia(os el ser/idor: BetcBinit.dB(ys>l restart #inal(ente@ cons%lta(os el no(.re del arc!i/o T.inlogT y la 6osici*n de co(6ensaci*n ?estos datos son necesarios 6ara con&ig%rar el escla/oA: (ys>lN s!oP (aster stat%sQ ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE W #ile W Position W BinlogVdoVd. W BinlogVignoreVd. W ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE W (aestroC.in.77) W 43 W W W ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE ....3 Con,i+uracin del servidor esclavo 8n el ser/idor escla/o@ edita(os el arc!i/o 0etc0my.cnf y agrega(os@ al ig%al >%e en el (aestro@ la acti/aci*n del arc!i/o T.inlogT y %n identi&icador del ser/idor ?>%e de.e ser distinto del identi&icador del ser/idor (aestroA: _(ys>ld` logC.in ser/erCid Z , =einicia(os el ser/idor escla/o: 3, [ BetcBinit.dB(ys>l restart Con&ig%ra(os los datos del (aestro en el ser/idor escla/o: (ys>lN c!ange (aster to CN (asterV!ost Z T(aestro.e(6resa.co(T@ CN (asterV%ser Z Tre6licadorT@ CN (asterV6assPord Z TsecretoT@ CN (asterVlogV&ile Z T(aestroClog.77)T@ CN (asterVlogV6os Z 43Q 8l lti(o 6aso es iniciar el ser/idor escla/o: (ys>lN start sla/eQ S ya tendre(os el ser/idor escla/o &%ncionando. %.* Importacin & e+portacin de datos 8n (%c!as ocasiones es necesario (o/er datos de %na a6licaci*n a otra@ 6ara ello son necesarios &or(atos estndares >%e 6%edan ser escritos 6or la a6licaci*n origen y ledos 6or la a6licaci*n destino. 8l (s si(6le de esos &or(atos es el te9to 6lano@ donde cada arc!i/o es %na ta.la@ cada &ila es %n registro y los /alores de los ca(6os se se6aran 6or ta.%ladores. MySQL 6%ede leer este ti6o de arc!i/os@ incl%yendo /alores n%los re6resentados 6or IRNI?N (aysc%laA. :tili"ando el cliente mysql@ 6ode(os introd%cir los datos del arc!i/o local proveedores.t(t en la ta.la proveedores: (ys>lN load data local infile T6ro/eedores.t9tT CN into table 6ro/eedoresQ Si se o(ite la 6ala.ra local@ MySQL .%scar el arc!i/o en el ser/idor y no en el cliente. 8n %n arc!i/o se 6%eden entreco(illar los ca(6os@ %tili"ar co(as 6ara se6ararlos y ter(inar las lneas con los caracteres IRrRnI ?co(o en los arc!i/os OindoPsA. 8l co(ando load data tiene dos cla%s%las o6cionales@ &ields@ en el >%e se es6eci&ican estos 6ar(etros. 30 (ys>lN load data local infile T6roo/eedores.t9tT CN into table 6ro/eedores CN fields terminated b( T@T CN enclosed b( TKT CN lines terminated b( TRrRnTQ La o6ci*n enclosed .y 6%ede tener la &or(a o6tionaly enclosed .y@ en caso de >%e los ca(6os n%(ricos no sean deli(itados. 2de(s 6%eden o(itirse las 6ri(eras lineas del arc!i/o si contienen in&or(aci*n de enca.e"ados: (ys>lN load data local infile T6ro/eedores.t9tT CN into table 6ro/eedores CN ignore ) linesQ ..2.1 "ys6li"$ort La %tilidad m(s,limport >%e se incl%ye en la distri.%ci*n 6%ede reali"ar el (is(o tra.a$o >%e load data. 8stos son alg%nos de s%s 6ar(etros: m(s,limport C% %s%ario C6 CClocal .asededatos arc!i/o.t9t La o6ci*n ++local indica >%e el arc!i/o se enc%entra local(ente o en el clienteQ otro as6ecto i(6ortante es >%e el no(.re del arc!i/o ?arc,ivo.t(tA@ este de.e coincidir con el no(.re de la ta.la donde se insertarn los datos@ de lo contrario m(s,limport arro$a %n error indicando >%e no locali"a la ta.la con dic!o no(.re del arc!i/o. 8stos son alg%nos de los arg%(entos de m(s,limport 6ara reali"ar las tareas e>%i/alentes a la sentencia load data: CC&ieldsCter(inatedC.yZ CC&ieldsCenclosedC.yZ CC&ieldsCo6tionallyCenclosedC.yZ CC&ieldsCesca6edC.yZ CClinesCter(inatedC.yZ La &or(a (s si(6le 6ara e96ortar datos es redireccionando la salida del cliente (ys>l. 8l 6ar(etro Ce 3+ 6er(ite e$ec%tar %n co(ando en (odo de 6rocesa(iento 6or lotes. MySQL detecta si la salida es en 6antalla o est redireccionada a %n arc!i/o y elige la 6resentaci*n adec%ada: con enca.e"ados y lneas de se6araci*n 6ara la salida en 6antalla@ y sin enca.e"ados y con ta.%ladores 6ara %n arc!i/o: L m(s,l de(o Ce Jselect ^ &ro( 6ro/eedoresK N 6ro/eedores.t9t La sentencia select ta(.in c%enta con %na o6ci*n 6ara reali"ar la tarea in/ersa de la sentencia load data: (ys>lN select ^ CN into outfile JB.acG%6B6ro/eedores.t9tK CN fields termitated b( T@T CN optionall( enclosed b( TKT CN lines termitates b( TRnT CN from 6ro/eedoresQ ..2.2 "ys6ldu"$ La %tilidad (ys>ld%(6 reali"a el /olcado de .ases de datos y 6%ede %tili"arse 6ara trans6ortar datos de %na .ase a otra >%e ta(.in entienda SQL. Sin e(.argo@ el arc!i/o de.e ser editado antes de %tili"arse@ ya >%e alg%nas o6ciones son e9cl%si/as de MySQL. Por lo general@ .asta con eli(inar el ti6o de ta.la >%e se es6eci&ica al &inal de %n co(ando create ta.le. 8l sig%iente co(ando reali"a el /aciado co(6leto de la .ase de datos de(o: L m(s,ldump de(o N de(o.s>l 8n alg%nos casos@ los co(andos insert son s%&icientes y no necesita(os las de&iniciones de las ta.las. 8l sig%iente co(ando reali"a %n /aciado de la ta.la proveedores de la .ase de datos demo &iltrando la salida con el co(ando 'rep de :NIH >%e selecciona s*lo las lneas >%e contienen la 6ala.ra INS8=T. De este (odo@ el arc!i/o pro'eedoresDinsert.t%t contiene e9cl%si/a(ente co(andos insert: L m(s,ldump de(o 6ro/eedores W gre6 INS8=T N 6ro/eedoresCinsert.t9t 31 2. Clientes /r8,icos *.1 P,pm&admin php=(&dmin es %na !erra(ienta escrita en PFP con la intenci*n de (ane$ar la ad(inistraci*n de MySQL a tra/s de 6ginas Pe.@ %tili"ando Internet. 2ct%al(ente 6%ede crear y eli(inar Bases de Datos@ crear@ eli(inar y alterar ta.las@ .orrar@ editar y aDadir ca(6os@ e$ec%tar c%al>%ier sentencia SQL@ ad(inistrar cla/es en ca(6os@ ad(inistrar 6ri/ilegios@ e96ortar datos en /arios &or(atos y est dis6oni.le en 3, idio(as. Se enc%entra dis6oni.le .a$o la licencia <PL. 8ste 6royecto se enc%entra /igente desde el aDo );;5@ siendo el (e$or e/al%ado en la co(%nidad de descargas de So%rce#orge.net co(o la descarga del (es de dicie(.re del ,77,. Co(o esta !erra(ienta corre en (>%inas con Ser/idores Oe.s y So6orte de PFP y MySQL@ la tecnologa %tili"ada !a ido /ariando d%rante s% desarrollo. *.2 !&S'L -dministrator MySQL 2d(inistrator es %na !erra(ienta >%e 6er(ite reali"ar tareas de ad(inistraci*n en %n .ase de datos MySQL. (ys>lCad(inistrator 6er(ite@ entre otras cosas: 8ncender y 6arar el S<BD. <estionar el &ic!ero de con&ig%raci*n BetcB(y.cn& de &or(a gr&ica. <estionar %s%arios y 6ri/ilegios. Monitori"ar el %so del gestor >%e se est !aciendo del (is(o@ el n(ero de cone9iones@ cons%ltas si(%ltneas y todo ti6o de in&or(aci*n estadstica. Cons%ltar los &ic!eros de registro ?logA del ser/idor. <estionar co6ias de seg%ridad. <estionar la re6licaci*n de .ases de datos. Crear y .orrar .ases de datos ?SCF8M2A. 3. 0esu"en MySQL es %n S<BD relacional de &cil %so y alto rendi(iento@ dos caractersticas (%y /aliosas 6ara %n desarrollador de siste(as: s% &acilidad de %so 6er(ite la creaci*n de .ases de datos con ra6ide" y sin (%c!as co(6licaciones@ y s% alto rendi(iento lo !ace s%(a(ente atracti/o 6ara a6licaciones co(erciales i(6ortantes o 6ortales Pe. de (%c!o tr&ico. Si a ello le aDadi(os la dis6oni.ilidad de c*digo y s% licencia d%al@ se co(6rende >%e MySQL sea atracti/o y accesi.le 6ara todo el (%ndo. 8stos atri.%tos tienen s%s costes: (antenerlo con %n alto rendi(iento !ace algo (s lento s% desarrollo@ 6or lo >%e no es el (s a/an"ado en c%anto a 6restaciones y co(6ati.ilidad con estndares. MySQL carece de caractersticas >%e (%c!os otros S<BD 6oseen. Pero no se de.e ol/idar >%e est en contin%o desarrollo@ 6or lo >%e &%t%ras /ersiones incl%irn n%e/as caractersticas. Por s%6%esto@ 6ara MySQL es 33 (s i(6ortante la e&iciencia >%e incl%ir 6restaciones s*lo 6or co(6etir o satis&acer a alg%nos %s%arios. 34