Mysql Admin Esp

26
Administrar MySQL mysqld (el daemon) Mysql es una base de datos cliente/servidor, lo cual quiere decir que tenemos un server (o daemon) que se ejecuta en segundo plano, a la escucha de las peticiones del programa cliente. En mysql, el daemon o servidor es mysqld y el cliente, mysql. Ayudas: En una sesión de SHELL navegamos hacia [abiertos@wilton]$ (o la ruta donde tengamos instalado mysql y escribimos [abiertos@wilton]$mysqld --help Para obtener la lista de comandos disponibles a mysqld. Lamentablemente verás que la información desborda la pantalla ¡ y que en SHELL no hay barras de scroll vertical !. No hay problema. Un nuevo truco de SHELL: el carácter pipe, es decir, la barra vertical, acompañada de la palabra more, así: [abiertos@wilton]$ mysqld -–help | less Verás que ahora la información se muestra pantalla a pantalla, pulsando la barra espaciadora para ir avanzando. Arrancando el servidor Como usuario con permisos de adminitracion (root) corremos el script que inicia el demon. [abiertos@wilton ]su [abiertos@wilton ]$:/etc/init.d/mysqld start Bien, aunque la pantalla no muestra nada, ya tenemos el daemon mysqld corriendo en segundo plano. Para comprobarlo,  ps aux | grep mysql. O haz un ping: [abiertos@wilton]$mysqladmin ping mysqld is alive Utilizamos la herramienta de administración mysqladmin para hacer un ping, y el server nos contesta mysqld is alive. Para cerrar el servidor usamos de nuevo mysqladmin, sin olvidar nuestro nombre de usuario y password !!: [abiertos@wilton]$mysqladmin -u nombredeusuario -p shutdown Enter password: ******* [abiertos@wilton]/etc/init.d/mysqld stop

Transcript of Mysql Admin Esp

Page 1: Mysql Admin Esp

Administrar MySQL

mysqld (el daemon)

Mysql es una base de datos cliente/servidor, lo cual quiere decir que tenemos un server (o daemon)que se ejecuta en segundo plano, a la escucha de las peticiones del programa cliente. En mysql, eldaemon o servidor es mysqld y el cliente, mysql.

Ayudas:

En una sesión de SHELL navegamos hacia [abiertos@wilton]$ (o la ruta donde tengamosinstalado mysql y escribimos

[abiertos@wilton]$mysqld --help

Para obtener la lista de comandos disponibles a mysqld. Lamentablemente verás que la informacióndesborda la pantalla ¡ y que en SHELL no hay barras de scroll vertical !. No hay problema. Unnuevo truco de SHELL: el carácter pipe, es decir, la barra vertical, acompañada de la palabra more,así:

[abiertos@wilton]$ mysqld -–help | less

Verás que ahora la información se muestra pantalla a pantalla, pulsando la barra espaciadora para iravanzando. 

Arrancando el servidor

Como usuario con permisos de adminitracion (root) corremos el script que inicia el demon.

[abiertos@wilton]su 

[abiertos@wilton]$:/etc/init.d/mysqld start

Bien, aunque la pantalla no muestra nada, ya tenemos el daemon mysqld corriendo en segundoplano. Para comprobarlo,  ps aux | grep mysql. O haz un ping:

[abiertos@wilton]$mysqladmin pingmysqld is alive

Utilizamos la herramienta de administración mysqladmin para hacer un ping, y el server noscontesta mysqld is alive.

Para cerrar el servidor usamos de nuevo mysqladmin, sin olvidar nuestro nombre de usuario ypassword !!:

[abiertos@wilton]$mysqladmin -u nombredeusuario -p shutdownEnter password: *******

[abiertos@wilton]/etc/init.d/mysqld stop

Page 2: Mysql Admin Esp

Recuerda que el nombre de usuario se introduce siempre precedido de -u y que si escribes acontinuacion -p, al pulsar enter, mysql te permitirá que teclees la contraseña.

Verificamos que el proceso mysqld ya no está corriendo  y ya sabemos encender y apagar mysqld. 

¿ que servidor ejecuto ?

Las versiones binarias para Linux suelen traer diversos ejecutables del daemon. ¿cual escoger ? aquipuedes ver sus diferencias.

• mysqld con soporte para debug, symbolic links, InnoDB y BDB • mysqld­max version optimizada, con symbolic links, InnoDB y tablas berkeley 

Page 3: Mysql Admin Esp

mysqladmin

Mysqladmin es una utilidad para realizar tareas de mantenimiento de nuestras bases de datos, queviene incluida en la distribución de mysql.

Su sintaxis es:

prompt>mysqladmin [OPCIONES] comando [opciones de comando] comando2 ...

Puedes obtener una lista de las opciones disponibles en tu version de mysql tecleandomysqladmin --help|more

A continuación una lista de las opciones mas corrientes. Primero vemos su denominacion abreviada,y separado con una barra vertical | su nombre completo: 

• ­p|­­password [=pwd]La contraseña para conectar con el server. Si usamos ­­p sin proporcionar la contraseña,mysql nos la preguntará antes de ejecutar el comando. 

• ­u|­­user [=nombre de usuario]El nombre de usuario. Es necesario especificarlo si no hemos hecho aun log en el server 

• ­h|­­host=hostnameConecta al servidor. Si no lo especificamos, intentará localhost 

• ­P|­­port=pnumEspecifica el puerto por el que conectara al server. Si no se especifica usará el puerto pordefecto 

• ­f|­­forceMediante esta opción podemos hacer drop en una base de datos (eliminarla) sin que pidaconfirmación. Si usamos esta opción en una orden que incluya varios comandos, obligamosa la ejecución de todos ellos incluso aunque haya algun error. 

• ­?|­­helpmuestra la ayuda y sale de la ejecución 

• ­s|­­silentCierra la ejecución si no puede conectar con el server 

• ­v|­­verboseEspecifica que el server debe contestar con toda la infromación disponible a cada comandoque ejecutemos 

• ­V|­­versionMuestra la versión y sale 

• ­w|­­wait [=num de intentos]Reintenta la conexión si el server esta caido 

Comandos de mysqladmin 

Podemos usar con mysqladmin los siguientes comandos: 

• create nombre_base_datosCrea una nueva base de datos con el nombre proporcionado. 

• drop nombre_base_datosElimina la base de datos especificada (y todas sus tablas). 

• statusproporciona un mensaje con el status del server. 

Page 4: Mysql Admin Esp

• extended-statusMensaje con información extendida sobre el server. 

• versionOfrece la version del servidor. 

• flush-hostsVacía los servidores almacenados en cache. 

• flush-logs Vacia los archivos de registro 

• flush-tablesVacía todas las tablas. 

• flush-privilegesRecarga las tablas con los permisos de usuario (igual que reload). 

• kill id,id,...Elimina los subrprocesos especificados. 

• passwordEspecifica una nueva contraseña 

• ping Comprueba si mysqld se está ejecutando. • processlist

Muestra los subprocesos abiertos en el server. • reload

Recarga los permisos de usuario. • refresh

Vacía las tablas de permisos, cierra y abre los archivos de registro. • shutdown Apaga el server. • variables

Muestra las variables disponibles. 

Ejemplo: para crear una base de datos llamada dbtest

prompt>mysqladmin -u root -p create dbtestEnter password: *******

Page 5: Mysql Admin Esp

Primeros pasos tras la instalación

Siempre que queramos utilizar MySQL deberemos hacer login como usuarios en el servidor.

MySQL permite asignar a cada usuario privilegios distintos, que determinan las tareas que podrárealizar cada uno: acceder, modificar, consultar datos y realizar tareas administrativas y de controlen la base de datos. 

El sistema de usuarios MySQL es independiente del sistema de usuarios de la plataforma Linux  enque esté ejecutándose. El usuario root no es el usuario root de Linux.

Al instalar MySQL, por defecto se crea el usuario root, sin ninguna contraseña. Este el usuariomás importante, ya que posee total control sobre las bases de datos, por lo que lo primero quedebemos hacer es proporcionarle una contraseña. De lo contrario, cualquier persona que tengaacceso local o remoto a nuestro ordenador podría acceder y hacer cualquier cosa con los datos, lastablas o las bases. 

Asimismo, es aconsejable crear un nuevo usuario para acceder a las bases de datos, al que daremossolo los permisos necesarios para las tareas que debemos hacer con él, y dejar a root solo paratareas administrativas y de control. Otra buena idea es la de borrar los usuarios que se crean pordefecto.

Los usuarios que MySQL crea por defecto al instalarse tienen distintos permisos según hayasinstalado MySQL en Linux.

Despues de instalar MySQL en linux, los privilegios de acceso por defecto se establecen ejecutandoscripts/mysql_install_db. Este script lanza el servidor mysqld y crea los siguientesusuarios y permisos:

root es un superusuario con todos los permisos. Debe conectarse desde localhost. Carece decontraseña.

Se crea un usuario anónimo que tiene todos los privilegios respecto de las bases de datos cuyosnombres sean test o empiecen por test_. Accede también desde localhost. 

Page 6: Mysql Admin Esp

Las tablas en mysql

En toda instalación MySQL se crea la base de datos mysql, que controla el acceso a todas las basesde datos. Contiene varias tablas, con la información que vamos a ver a continuación.

Con el uso adecuado de estas tablas podemos tener un gran control y variedad de formas de acceso anuestras bases. Podremos dar a usuarios permisos totales sobre parte de las bases de datos, opermisos parciales para todas las bases de datos, o descender a detalles como permisos sobre tablaso incluso sobre columnas.

Al tiempo de escribirse este artículo, MySQL crea seis tablas en la base de datos mysql: user,db, host, tables_priv, columns_priv, func. Cada tabla tiene una serie de campos(los primeros) que determinan su alcance o finalidad (permiten especificar valores para usuarios,bases de datos, puntos de acceso), mientras que el resto de campos sirve para conceder o denegarpermisos para acciones concretas (Y/N)

En primer lugar, la tabla user, donde se especifican permisos globales. 

Host localhost localhost % %

User root irv root phpuser

Password 5a1a 5aff 5ffa 4975

Select_priv Y Y Y N

Insert_priv Y Y Y N

Update_priv Y Y Y N

Delete_priv Y Y Y N

Create_priv Y Y Y N

Drop_priv Y Y Y N

Reload_priv Y Y Y N

Shutdown_priv Y Y Y N

Process_priv Y Y Y N

File_priv Y Y Y N

Grant_priv Y N Y N

References_priv Y Y Y N

Index_priv Y Y Y N

Alter_priv Y Y Y N

Vamos a explicar su contenido. Para empezar, el signo % en MySQL es un comodín, así que si paraun usuario especificamos, en el campo host el signo %, queremos decir que podrá acceder desdecualquier host.

En el ejemplo de la tabla superior puedes ver que los usuarios root y phpuser pueden accederdesde cualquier host.

Page 7: Mysql Admin Esp

Las tres primeras columnas, host, user, password sirven para almacenar el nombre deusuario, host desde el que puede acceder y contraseña, encriptada. Las restantes columnas señalanlos privilegios para cada usuario, y pueden tener un valor Y/N, segun tengan o no dicho privilegio. 

Los permisos que puedes reconocer aqui se refieren a operaciones Select, Insert, Update, Delete,Create, Drop, Reload, Shutdown, Process, File, Grant, References, Index, Alter

En la tabla db podemos especificar permisos para bases de datos individuales. Las tres primerascolumnas sirven para especificar el nombre de usuario a quien se reconoce permisos, el host desdeel que puede acceder, y la base de datos a la que se van a aplicar los permisos. Los siguientescampos se refieren, como en el caso anterior, a los privilegios que se conceden/deniegan (valoresY/N). Los permisos indicados en esta tabla solo se aplican a la base de datos identificada en cadacolumna:

Host % % %

Db sample_db php_category php_directory

User phpuser phpuser phpuser

Select_priv Y Y Y

Insert_priv Y Y Y

Update_priv Y Y Y

Delete_priv Y Y Y

Create_priv  Y Y Y

Drop_priv Y Y Y

Grant_priv N N N

References_priv Y Y Y

Index_priv Y Y Y

Alter_priv Y Y Y

la tabla host controla permisos globales para máquinas con acceso a nuestras bases de datos.Contiene los mismos campos que la tabla db.

tables_priv es similar a la tabla db aunque su rango es inferior, ya que permite especificarpermisos para tablas concretas dentro de bases de datos. En esta tabla, el campo Table_name es elnombre de la tabla de la base de datos.Grantor contiene el nombre de la persona que haconcedido los permisos y Table_priv los permisos para la tabla. 

columns_priv permite especificar permisos para ciertas columnas de tablas determinadas. En elcampo Column_priv controlamos el grado de acceso del usuario a esa columna. 

Las tablas estan relacionadas entre sí, y por ejemplo un usuario autorizado con carácter global nopodrá acceder desde una concreta máquina que tenga prohibido o restringido el acceso en la tablahost, de la misma forma que desde una máquina autorizada en host no podrá acceder un usuarioque expresamente no esté autorizado en user. Un usuario sin permisos globales puede vermodalizados sus privilegios para una base concreta en la tabla db.

Page 8: Mysql Admin Esp

Como los permisos de la tabla user tienen alcance global, la regla es, respecto de los permisos masimportantes, denegarlos con carácter general y autorizarlos con carácter particular. Por ejemplo,denegando Delete_priv a un usuario en la tabla user y reconociendoselo en la tabla db parauna base concreta, conseguimos que solo pueda borrar en esa base de datos.

Si ves con detalle el contenido de cada una de las tablas te darás cuenta de que todos los permisosde administración del servidor, es decir, shutdown, reload, process, etc... se especifican únicamenteen la tabla user mientras que los permisos de acceso a las bases de datos (insert, delete, alter ...)pueden especificarse, segun su rango y alcance, en el resto de las tablas. 

Jerarquia de control

En cada acceso que se produce al servidor MySQL, en primer lugar se compara la entrada con latabla user para ver si existe coincidencia con el nombre de usuario, host y contraseña. Si es así, seautoriza el login

Si una vez realizada la conexión el usuario realiza una consulta sql, MySQL compara primero lospermisos del usuario en la tabla user, y si carece de ellos, consulta a la tabla bd para comprobar sihay permisos especificos para ese usuario, host y base de datos. Si tampoco ahi estan los permisosnecesarios, consulta por último las tablas Tables_priv y Columns_priv. Si tampoco losencuentra, genera un mensaje de error. 

Como ves, se realizan dos filtros independientes, uno para admitir la conexión, y otro para cadaconsulta

Para afinar los permisos la técnica, como se ha dicho anteriormente, es denegarlos en las tablasglobales y concederlos en las tablas particulares.

privilegios de usuarios

Una buena práctica es utilizar el superusuario root solo cuando verdaderamente sea necesario, yfuncionar habitualmente con otro usuario con los permisos adecuados para la tarea a desarrollar.Puedes sacar ventaja del hecho de que puedes asignar permisos distintos para cada nueva base dedatos, distinguir segun el usuario acceda de forma local o remota, etc.

Podemos asignar permisos actuando directamente sobre las tablas de la base de datos mysql perono es la forma mas cómoda ni mas segura. Lo indicado es, una vez hecho login como root, asignarpermisos con el comando GRANT:

mysql> grant select, insert on *.* to tester@'%' identified by 'blah';Query OK, 0 rows affected (0.17 sec)

Con este comando creamos un usuario llamado tester que tiene el derecho de seleccionar einsertar datos en todas las bases de datos y tablas (*.*), con la contraseña blah. 

Como ya sabes el signo % despues del nombre de usuario significa que tester podrá hacer logindesde cualquier máquina. Si en su lugar hubieramos escrito tester@localhost solo podriaconectar en modo local; y si solo queremos dar permiso a tester desde una máquina remota,deberiamos haber escrito el nombre de dicha máquina: [email protected]

Page 9: Mysql Admin Esp

El comando GRANT no solo concede permisos, sino que sirve para crear nuevos usuarios. Basta conconceder permisos a un usuario para que si este no existía, sea creado en la tabla user.

mysql> GRANT select, insert, update, create, alter, delete, dropON directorio.*TO tester@localhostIDENTIFIED BY 'blah';

En este otro ejemplo damos permisos a tester si accede por localhost para seleccionar,insertar datos, actualizar, crear, modificar y borrar tablas en todas las tablas de la base de datosdirectorio (directorio.*)

mysql> GRANT all ON directorio.alfa To tester@localhost IDENTIFIED BY 'Blah';

concede todos (all) los permisos disponibles para la tabla alfa dentro de la base de datos directorio atester

mysql> GRANT USAGE ON *.* To tester@localhost IDENTIFIED BY 'Blah';

permite la conexión a tester a cualquier base de datos y tablas, pero no concede ningun otroprivilegio.

Finalmente si queremos retirar permisos, usamos REVOKE, de forma similar a GRANT:

mysql> REVOKE ALL ON *.* FROM tester@'5';

Glosario

Host es el nombre de la máquina del usuario.

User el nombre del usuario que va a acceder a MySQL, al que concedemos o negamos permisos.

Password la contraseña del usuario .

Select_priv Permiso para realizar consultas SELECT.

Insert_priv Permiso para añadir datos con INSERT.

Update_priv Permiso para editar y actualizar datos con UPDATE.

Delete_priv Permiso para borrar datos con DELETE.

Create_priv Permiso para crear nuevas tablas o bases de datos con CREATE.

Drop_priv Permiso para borrar tablas o bases de datos con DROP.

Page 10: Mysql Admin Esp

Reload_priv Permiso para actualizar las tablas de permisos con FLUSH.

Shutdown_priv Permiso para apagar el servidor.

Process_priv Permiso para consultar los procesos del servidor con MYSQLADMINPROCESSLIST o SHOW PROCESSLIST (o cancelar esos procesos).

File_priv Permiso para que el usuario lea o escriba en ficheros residentes en el server.

Grant_priv Permiso para que el usuario pueda conceder permisos a otros usuarios con GRANT.

References_priv ??.

Index_priv Permiso para indexar tablas (crear o borrar índices).

Alter_priv Permiso para cambiar la estructura de una tabla.

Db La base de datos a la cual son aplicables los privilegios. Un servidor MySQL puede albergarvarias bases de datos. 

Page 11: Mysql Admin Esp

Tipos de tablas en MySQL

1. ISAM.­ es el formato de almacenaje mas antiguo, y posiblemente pronto desaparecerá.Presentaba limitaciones (los ficheros no eran transportables entre máquinas con distintaarquitectura, no podía manejar ficheros de tablas superiores a 4 gigas). Si aun tienes tablastipo ISAM, cambialas a MYISAM ya! 

2. MYISAM.­ es el tipo de tabla por defecto en MySQL desde la versión 3.23. Optimizadapara sistemas operativos de 64 bits, permite ficheros de mayor tamaño que ISAM. Ademáslos datos se almacenan en un formato independiente, con lo que se pueden copiar tablas deuna máquina a otra de distinta plataforma. Posibilidad de indexar campos BLOB y TEXT 

3. HEAP.­ Crea tablas en memoria. Son temporales y desaparecen cuando el servidor se cierra;a diferencia de una tabla TEMPORARY, que solo puede ser accedida por el usuario que lacrea, una tabla HEAP puede ser utilizada por diversos usuarios. 

4. BDB.­ Base de datos Berkeley. TST. Solo en MySQL MAX 5. INNODB.­ TST, ACID, con posibilidad de commit, rollback, recuperación de errores y

bloqueo a nivel de fila. 6. MERGE mas que un tipo de tabla es la posibilidad de dividir tablas MYISAM de gran

tamaño (solo útil si son verdaderamente de GRAN tamaño) y hacer consultas sobre todasellas con mayor rapidez. Las tablas deben ser myisam e idénticas en su estructura. 

Con MySQL puedes variar el tipo de tabla después de creada

TST se refiere a 'Transactions safe tables', o tablas para transacciones seguras. A este tipopertenecen DBD y INNODB.

Las tablas tipo TST son menos rápidas y ocupan mas memoria, pero a cambio ofrecen mayorseguridad frente a fallos durante la consulta.

Aunque ya disponibles, imagino que las tablas TST solo se popularizarán cuando el uso de laversión 4.0 de MySQL se generalice (actualmente en fase gamma)

Las tablas TST permiten ir introduciendo consultas y finalizar con un COMMIT (que las ejecuta) oROLLBACK (que ignora los cambios)

ACID es un acrónimo de atomicidad, consistencia, separacion (isolation) y durabilidad. Poratomicidad se quiere significar que son posibles consultas complejas tratadas como una sola, de talforma que solo se ejecutan cuando todas ellas tienen éxito, en caso de que alguna falle no se ejecutaninguna. Consistencia significa que solo datos válidos pueden ser escritos en la base de datos. Si seejecuta una transacción que compromete la consistencia interna de la base de datos, toda latransacción debe deshacerse. Por isolation se entiende que las transacciones que tengan lugarsimultaneamente deben ejecutarse aisladas unas de otras hasta que finalizan. Y durabilidad, lagarantía de que una transacción enviada a la base de datos no se perderá aunque la transacción seainterrumpida por cualquier motivo.

Page 12: Mysql Admin Esp

tipos de datos en mysql

Al diseñar nuestras tablas tenemos que especificar el tipo de datos y tamaño que podrá almacenarcada campo. Una correcta elección debe procurar que la tabla no se quede corta en su capacidad,que destine un tamaño apropiado a la longitud de los datos, y la máxima velocidad de ejecución

Básicamente mysql admite dos tipos de datos: números y cadenas de carácteres. Junto a estos dosgrandes grupos, se admiten otros tipos de datos especiales: formatos de fecha, etc.

datos numéricos

En este tipo de campos solo pueden almacenarse números, positivos o negativos, enteros odecimales, en notación hexadecimal, cientifica o decimal.Los tipos numéricos tipo integer admiten los atributos SIGNED y UNSIGNED indicando en elprimer caso que pueden tener valor negativo, y solo positivo en el segundo.

Los tipos numéricos pueden además usar el atributo ZEROFILL en cuyo caso los números secompletaran hasta la máxima anchura disponible con ceros (column age INT(5) zerofill=> valor 23 se almacenará como 00023)

BIT o BOOL, para un número entero que puede ser 0 ó 1

TINYINT es un número entero con rango de valores válidos desde ­128 a 127. Si se configuracomo unsigned (sin signo), el rango de valores es de 0 a 255 

SMALLINT, para números enteros, con rango desde ­32768 a 32767. Si se configura comounsigned, 0 a 65535.

MEDIUMINT para números enteros; el rango de valores va desde ­8.388608 a 8388607. Si seconfigura como unsigned, 0 a 16777215

INT para almacenar números enteros, en un rango de ­2147463846 a 2147483647. Si configuramoseste dato como unsigned, el rango es 0 a 4294967295

BIGINT número entero con rango de valores desde ­9223372036854775808 a9223372036854775807. Unsigned, desde 0 a 18446744073709551615. 

FLOAT (m,d) representa números decimales. Podemos especificar cuantos dígitos (m) puedenutilizarse (término también conocido como ancho de pantalla), y cuantos en la parte decimal (d).Mysql redondeará el decimal para ajustarse a la capacidad.

DOUBLE Número de coma flotante de precisión doble. Es un tipo de datos igual al anterior cuyaúnica diferencia es el rango numérico que abarca

DECIMAL almacena los números como cadenas. 

Page 13: Mysql Admin Esp

Caracteres o cadenas

CHAR Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca desde 1 a255 caracteres.

VARCHAR Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1­255caracteres, pero en este caso, de longitud variable. Un campo CHAR ocupará siempre el máximo delongitud que le hallamos asignado, aunque el tamaño del dato sea menor (añadiendo espaciosadicionales que sean precisos). Mientras que VARCHAR solo almacena la longitud del dato,permitiendo que el tamaño de la base de datos sea menor. Eso si, el acceso a los datos CHAR esmas rápido que VARCHAR. 

No pueden alternarse columnas CHAR y VARCHAR en la misma tabla. Mysql cambiará lascolumnas CHAR a VARCHAR. Tambien cambia automaticamente a CHAR si usamos VARCHARcon valor de 4 o menos. 

TINYTEXT, TINYBLOB para un máximo de 255 caracteres. La diferencia entre la familia dedatatypes text y blob es que la primera es para cadenas de texto plano (sin formato) y case­insensitive (sin distinguir mayusculas o minusculas) mientras que blob se usa para objetos binarios:cualquier tipo de datos o información, desde un archivo de texto con todo su formato (se diferenciaen esto de el tipo Text) hasta imágenes, archivos de sonido o video

TEXT y BLOB se usa para cadenas con un rango de 255 ­ 65535 caracteres. La diferencia entreambos es que TEXT permite comparar dentro de su contenido sin distinguir mayusculas yminusculas, y BLOB si distingue.

MEDIUMTEXT, MEDIUMBLOB textos de hasta 16777215 caracteres.

LONGTEXT, LONGBLOB, hasta máximo de 4.294.967.295 caracteres

Varios

DATE para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a 999912 31.

DATETIME Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 alas 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59segundos. El formato de almacenamiento es de año­mes­dia horas:minutos:segundos 

TIMESTAMP Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037.El formato de almacenamiento depende del tamaño del campo

TIME almacena una hora. El rango de horas va desde ­838 horas, 59 minutos y 59 segundos a 838,59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS' 

YEAR almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. Elcampo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o

Page 14: Mysql Admin Esp

cuatro dígitos. 

SET un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tenerun máximo de 64 valores. 

ENUM es igual que SET, pero solo se puede almacenar uno de los valores de la lista

Page 15: Mysql Admin Esp

¡ ha ocurrido un desastre !

He perdido la contraseña del root

Si has perdido la contraseña que usas como root, es decir, para administrar MySQL, puedesestablecer otra, usando el mismo ordenador donde físicamente está instalado el daemon:

1. Apaga el servidor 2. Inicia el servidor con la opción --skip-grant-tables. 3. Conecta con el servidor usando mysql -u root mysql. Con eso no te pedira la

password y accederas directamante a la base de datos MySQL que es la que guarda lainformacion de usuarios. 

4. cambia la contraseña usando este comando SQL: 

mysql> UPDATE user SET Password=PASSWORD('nuevacontraseña') WHEREUser='root';

5. Ejecuta un nuevo comando SQL: 

mysql> FLUSH PRIVILEGES;

6. Apaga y reinicia el servidor y ya podras usar la nueva password 

El servidor termina de repente

Lo primero que has de ver es si efectivamente se ha caido el servidor o si es el programa cliente elque falla. mysql>mysqladmin -u root -p version servirá para ver si el servidor esta enfuncionamiento, ps aux | grep mysql  o top para ver si esta corriendo el servidor.

Si se ha caído el server, prueba a ver si encuentras pistas en el archivo tu_host.err, queencontrarás haciendo un find / -name “host.err” (como root). En este log deerrores se guardan los arranques y cierres del server, y otra información útil. 

Tambien puedes crear un log general iniciando mysqld con la opción --log[=archivo]. Porejemplo:[abiertos@wilton]$mysqld --log=log_general.log creará en la carpeta data elarchivo log_general.log. Este es un ejemplo de su contenido:

[abiertos@wilton]$mysqld Version: 4.0.12-max-debug-log, started with:Tcp port: 3306 Unix socket: MySQLTime Id Command Argument030504 16:07:21 1 Connect Acceso negado para usuario: '[email protected]' (Usando clave: SI)030504 16:07:40 2 Connect [email protected] on 030504 16:07:47 2 Query show databases030504 16:07:52 3 Connect [email protected] on 3 Query show status 2 Quit

El servidor debe siempre cerrarse de forma adecuada, bien desde la ventana SHELL  con elcomando: 

Page 16: Mysql Admin Esp

[abiertos@wilton]$mysqladmin -u root -p shutdown

Cerrar el servidor de otra forma puede corromper los datos de las tablas y ser fuente de problemas.

Page 17: Mysql Admin Esp

El comando mysqldump del sistema gestor de base de datos MySQLsirve para hacer copias de seguridad. Lo explicamos condetenimiento y vemos sus opciones más importantes.

Este comando permite hacer la copia de seguridad de una o múltiples bases de datos. Ademáspermite que estas copias de seguridad se puedan restaurar en distintos tipos de gestores de bases dedatos, sin la necesidad de que se trate de un gestor de mysql. Esto lo consigue creando unosficheros, que contienen todas las sentencias sql necesarias para poder restaurar la tabla, que incluyendesde la sentencia de creación de la tabla, hasta una sentencia insert por cada uno de los registrosque forman parte de la misma.

El comando dispone de una amplia variedad de opciones que nos permitirá realizar la copia de laforma más conveniente para el propósito de la misma.Para poder restaurar la copia de seguridad, bastará con ejecutar todas las sentencias sql que seencuentran dentro del fichero, bien desde la línea de comandos de mysql, o desde la pantalla decreación de sentencias sql de cualquier entorno gráfico como puede ser el Mysql Control Center.

Las limitaciones de la restauración dependerán de las opciones que se han especificado a la hora dehacer la copia de seguridad, por ejemplo, si se incluye la opción ­­add­drop­table al hacer la copiade seguridad, se podrán restauran tablas que existen actualmente en el servidor (borrándolasprimero). Por lo que es necesario estudiar primero los procedimientos que se utilizarán tanto en lacopia como en la restauración, para que todo salga correcto! 

Algunas de las opciones que tiene son:

­­add­locks Añade LOCK TABLES antes, y UNLOCK TABLE después de la copia de cada tabla. 

­­add­drop­table Añade un drop table antes de cada sentencia create

­A, ­­all­databases Copia todas las bases de datos. Es lo mismo que utilizar ­­databases seleccionando todas. 

­a, ­­all Incluye todas las opciones de creación específicas de Mysql. 

­­allow­keywords Permite la creación de nombes de columnas que son palabras clave, esto se realiza poniendo deprefijo a cada nombre de columna, el nombre de la tabla

­c, ­­complete­insert Utiliza inserts incluyendo los nombres de columna en cada sentencia (incrementa bastante eltamaño del fichero)

­C, ­­compress Comprime la información entre el cliente y el servidor, si ambos soportan compresión.

­B, ­­databases Para copiar varias bases de datos. En este caso, no se especifican tablas. El nombre de losargumentos se refiere a los nombres de las bases de datos. Se incluirá USE db_name en la salidaantes de cada base de datos. 

­­delayed Inserta las filas con el comando INSERT DELAYED. 

Page 18: Mysql Admin Esp

­e, ­­extended­insert Utiliza la sintaxis de INSERT multilinea. (Proporciona sentencias de insert más compactas yrápidas.) 

­#, ­­debug[=option_string] Utilización de la traza del programa (para depuración). 

­­help Muestra mensaje de ayuda y termina. 

­­fields­terminated­by=... ­­fields­enclosed­by=... ­­fields­optionally­enclosed­by=... ­­fields­escaped­by=... ­­lines­terminated­by=... Estas opciones se utilizan con la opción ­T y tienen el mismo significado que la correspondientecláusula LOAD DATA INFILE. 

­F, ­­flush­logs Escribe en disco todos los logs antes de comenzar con la copia

­f, ­­force, Continúa aunque se produzca un error de SQL durante la copia.

­h, ­­host=.. Copia los datos del servidor de Mysql especificado. El servidor por defecto es localhost. 

­l, ­­lock­tables. Bloquea todas las tablas antes de comenzar con la copia. Las tablas se bloquean con READ LOCALpara permitir inserts concurrentes en caso de las tablas MyISAM. Cuando se realiza la copia demúltiples bases de datos, ­­lock­tables bloqueará la copia de cada base de datos por separado. Deforma que esta opción no garantiza que las tables serán consistentes lógicamente entre distintasbases de datos. Las tablas en diferentes bases de datos se copiarán en estados completamentedistintos. 

­K, ­­disable­keys Se inluirá en la salida /*!40000 ALTER TABLE tb_name DISABLE KEYS */; y /*!40000 ALTERTABLE tb_name ENABLE KEYS */; Esto hará que carga de datos en un servidor MySQL 4.0 serealice más rápido debido a que los índices se crearán después de que todos los datos hayan sidorestaurados. 

­n, ­­no­create­db No se incluirá en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta línease incluye si la opción ­­databases o ­­all­databases fue seleccionada. 

­t, ­­no­create­info No incluirá la información de creación de la tabla (sentencia CREATE TABLE). 

­d, ­­no­data No incluirá ninguna información sobre los registros de la tabla. Esta opción sirve para crear unacopia de sólo la estructura de la base de datos.

­­opt Lo mismo que ­­quick ­­add­drop­table ­­add­locks ­­extended­insert ­­lock­tables. Esta opción ledebería permitir realizar la copia de seguridad de la base de datos de la forma más rápida y efectiva.

Page 19: Mysql Admin Esp

­pyour_pass, ­­password[=your_pass] Contraseña utilizada cuando se conecta con el servidor. Si no se especifica, `=your_pass',mysqldump preguntará la contraseña.

­P, ­­port=... Puerto utilizado para las conexiones TCP/IP

­­protocol=(TCP | SOCKET | PIPE | MEMORY) Especifica el protocolo de conexión que se utilizará.

­q, ­­quick No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza mysql_use_result()para realizarlo. 

­Q, ­­quote­names Entrecomilla las tablas y nombres de columna con los caracteres ``'. 

­r, ­­result­file=... Redirecciona la salida al fichero especificado. Esta opción se debería utilizar en MSDOS, porquepreviene la conversión de nueva línea `\n' en nueva línea y retorno de carro`\n\r'. 

­­single­transaction Utiliza el comando BEGIN antes de realizar la copia desde el servidor. Es muy útil con las tablesInnoDB y el nivel de transacción READ_COMMITTED, porque en este modo realizará la copia deseguridad en un estado consistente sin necesidad de bloquear las aplicaciones. Consultar el manualpara más detalles. 

­S /path/to/socket, ­­socket=/path/to/socket El fichero de sockets que se especifica al conectar al localhost (que es el host predeterminado).

­­tables sobreescribe la opción ­­databases (­B). 

­T, ­­tab=path­to­some­directory Crea un fichero table_name.sql, que contiene la sentencia de creación de SQL, y un ficherotable_name.txt, que contiene los datos de cada tabla. El formato del fichero `.txt' se realiza deacuerdo con las opciones ­­fields­xxx y ­­lines­­xxx options. Nota: Esta opción sólo funciona si elcomando mysqldump se ejecuta en la misma másquina que el demonio mysqld, el usuario deberátener permisos para crear y escribir el fichero en la ubicación especificada

­u nombre_usuario, ­­user=nombre_usuarioEl nombre de usuario que se utilizará cuando se conecte con el servidor, el valor predeterminado esel del usuario actual.

­v, ­­verbose Va mostrando información sobre las acciones que se van realizando (más lento)

­w, ­­where='cláusula where' Sirve para realizar la copia de determinados registros

­X, ­­xml Realiza la copia de seguridad en un documento xml

­x, ­­first­slave Bloquea todas las tablas de todas las bases de datos

Page 20: Mysql Admin Esp

Ejemplo:

Para realizar la copia se seguridad de la base de datos mibase al fichero copia_seguridad.sql

mysqldump --opt mibase > copia_seguridad.sql

mysqldump --opt php_pos ventas_customers > bup.sql

mysqldump --xml php_pos ventas_customers -u root -p > bup.xml

mysqldump mercator ventas_items -w "id = 1" -u root -p

mysqlcheck (chequea/corrige problemas en tablas/db):

Opciones de chequeo CHECK (-c,-m,-C), REPAIR (-r), ANALYZE (-a)

c: chequea tabla en busca de errores.

C: chequea cambios en la tabla/bd's.

m: realiza un chequeo rápido.

r: intenta reparar la tabla/bd's.

a: simple análisis.

mysqlimport:

Inserta un texto plano (generado por OpenOffice o Excel) en unatabla.

Opciones:

Donde los campos se separen por coma:

--fields-terminate-by=','

Donde los campos esten encerrados entre comilla doble:

--fields-enclosed-by='”'

Donde el carácter de fin de linea sea un [ENTER]

--fields-escaped-by='\n'

Page 21: Mysql Admin Esp

Acceso seguro a bases de datos remotasCreación de canales de comunicación seguros entre un ciente y servidor MySQL remoto con SecureShell.

Introducción 

De manera predeterminada MySQL usa conexiones no encriptadas (inseguras) entre el cliente y elservidor, lo que significa que cualquier individuo mal intensionado puede ver, y aún modificar losdatos que están siendo transmitidos entre éstos. Dependiendo del tipo de información que se estámanejando, puede que esta situación resulte bastante preocupante, y por ello sea necesario buscar unmétodo o mecanismo que permita asegurarnos de que los datos que están siendo transmitidos através de una red son confiables. 

SSL es un protocolo que usa diferentes algoritmos de encriptación para asegurarse de que los datosque viajan a través de una red pública (ej. Internet) pueden ser fiables. Para la versión 4.0, MySQLtendrá soporte nativo para SSL, mientras tanto, en las versiones 3.23.x de MySQL se puede usarSSH para crear un canal de comunicación seguro, es decir, al usar SSH podemos establecer unaconexión encriptada entre un cliente y un servidor MySQL. SSH es un protocolo que proporcionaautenticación, encriptación e integridad de datos para asegurar las comunicaciones en una red, y enprincipio es una solución bastante efectiva para resolver el problema de la inseguridad de los datosque viajan sobre una red. 

El objetivo de esta guía es precisamente dar a conocer cuáles son los pasos a seguir para poder crearun canal de comunicación seguro entre un cliente y un servidor MySQL utilizando el protocoloSSH. 

Port Forwarding 

SSH   proporciona   una   herramienta   muy   poderosa   denominada  Port   Forwarding,   que   permiteasegurar prácticamente cualquier tipo de servicio basado en el protocolo TCP/IP. Esto significa quese pueden encriptar por ejemplo, los datos que manejan protocolos de correo electrónico bastanteusados, tales como IMAP, POP3 y SMTP. En efecto, con el Port Forwarding se podría encriptar lacomunicación entre nuestra computadora local, y nuestro servidor de correo POP3 que seguramenteestaría ejecutando a la vez un servidor SSH. 

Existen dos tipos de  Port Forwarding,   local y remoto. En el  Port Forwarding  local (el  que setratará en este artículo) los datos que llegan a un puerto en un host local se reenvían a un puerto enun host remoto sobre un canal seguro (un "túnel"). En este tipo de  Port Forwarding  el túnel escreado, o bien, iniciado por el cliente. 

Para   usar   el  Port   Forwarding,   la   aplicación   cliente   debe   ser   configurada   para   conectarse   ahostlocal:puertolocal en vez de hostremoto:puertoremoto. La información enviada por un cliente ahostlocal:puertlocal   es   interceptada   por   SSH,   encriptada   y   enviada   a   través   del   túnel   alhostremoto:puertoremoto. 

En la mayoría de los casos, el puerto local puede ser cualquier puerto que no esté siendo usado en el

Page 22: Mysql Admin Esp

host local, sin embargo, el puerto remoto generalmente es un puerto "bien conocido" (3306 paraMySQL). 

Entorno seguro para MySQL 

Para mostrar un caso práctico en el que puede ser bastante útil el Port Forwarding, presentamos unasituación bastante común y real, en la cuál una aplicación web requiere acceso a una base de datosMySQL para su funcionamiento. Tenemos el siguiente panorama. 

 

Como se muestra en la figura anterior, el servidor web (el cliente) envía y recibe información dealguna base de datos en un servidor MySQL. Como se explicó anteriormente, está información quese transmite no está protegida, y por lo tanto no es fiable ya que MySQL no cuenta con mecanismospara encriptar estos datos. 

Para solventar este problema, una solución consiste en hacer uso de Secure Shell para crear un túnelentre el servidor web y el servidor MySQL. 

 

Si se observa la figura anterior, parecerá como si se tu tuviera un servidor de bases de datos MySQLejecutándose localmente en el servidor web. Realmente lo que está sucediendo es que los datos quellegan al puerto 3306 en el servidor web están siendo enviados de forma segura al puerto 3306 en elservidor de bases de datos a través del túnel. 

Page 23: Mysql Admin Esp

Mecanismos de autenticación en SSH 

Antes de crear propiamente el túnel comentaremos algo acerca de la autenticación de llave pública.Éste es uno de los métodos más seguros para autenticar cuando se usa Secure Shell. En este tipo deautenticación se usan un par de llaves generadas por computadora ­una llave pública y una privada.Cada llave tiene usualmente entre 1024 y 2048 bits de longitud. 

Ejemplo de una llave privada del tipo RSA. 

-----BEGIN RSA PRIVATE KEY-----MIICWQIBAAKBgQC63MxNWlknrELe6leK2ETGNKbaM2z0bSlEan7LgL+DA5lkZx2g1M/sc3ix42+mSVz6qvhFsNiXQWXU98lM8R9CNb67lxHD5mdcQoaiOoIC6NTzCtvVvrUaUm+p5bvdSh28VF2wD/WVboufUhLoSDh7G/BPqv5s2ZVwSs2MtKRG5QIBIwKBgCAImA1CsDKv0PMDmfqLeYEQVx4XccN/ve54qAWhCuNCfhE2P5fp98IibHZEPwaQeTWh1+6re/hWQcU4uadofeWYW8Oz7lTeyMVrP+BvnZIjakEA5ba8//4LJtWR+44sdvExzvHK5hhG7d0NTxzXq9V7V+CqTEuE65hatJgmrhd/m4fX3m/8b3ANPUj0C+lttT/+GwJBANA+xK19paFuv4IJAhCHGGcEMuJNkcdgjgCBvFP/gpOkroKmkDwKEhgeei5rGCB85+9pCEygGzNj/KKaLHRNHv8CQFVSgLbas69Wo++4dupZlihLLhrzEwfkZAdxHOgNdvTBKU+Jw6f2wprZbXPc16ArJEtOKo/KiJMbGNE5ceQ8VxECQE1ZJHr0J5O7a7P0t5+9JlImIYdBYgg5zlf1hDx02Lp+/v1Tzyw+QTwok8gZJjfz4R5o1zJnWo9uR+SfqhyRrG0CQCKgbvVgBkXr+aeg3X1nhjwzQl00gmWm53cUNTm/HWmq3v6FYyz+8fnkEuB+jDozOFeV6cTlXpVkLSDxGwjH2R8=-----END RSA PRIVATE KEY-----

Una llave pública es inútil si no se cuenta con la correspondiente llave privada. 

Para accesar a un servidor por SSH, una copia de la llave pública debe ser puesta en el servidor.Cuando el cliente se conecta al servidor, éste debe proporcionar su llave privada para que el accesoal servidor le sea permitido. 

Por obvias razones la llave privada debe de cuidarse mucho y conservarse en un lugar seguro. Eneste tipo de autenticación nunca se le permite el acceso a un cliente a menos de que proporcione la"clave secreta", es decir su llave privada. 

Lo que haremos a continuación será crear un par de llaves RSA sin passphrase para permitir que eltúnel SSH pueda iniciar automáticamente. Por lo tanto, tenemos que hacer lo siguiente: 

[bingo@webserver]$ ssh-keygen -b 1024 -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/bingo/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/bingo/.ssh/id_rsa.Your public key has been saved in /home/bingo/.ssh/id_rsa.pub.

[bingo@webserver]$ scp .ssh/id_rsa.pub dbserver:

[bingo@dbserver]$ cd ~[bingo@dbserver]$ cat id_rsa.pub >> .ssh/authorized_keys2[bingo@dbserver]$ chmod -R go-rwx .ssh[bingo@dbserver]$ rm id_rsa.pub

Verificamos que podemos acceder al servidor de bases de datos sin proporcionar un password. 

[bingo@webserver]$ ssh dbserverLast login: Wed Nov 12 10:20:41 2002

Page 24: Mysql Admin Esp

bash-2.05$

No es necessario que esta conexión se mantenga abierta para que funcione el Port Forwarding, esúnicamente  para  probar  que  nos  podemos  conectar  por  SSH al   servidor  de  bases  de  datos   sinproporcionar un password. Nuestra llave privada es nuestro medio de entrada al servidor. 

bash-2.05$ exitlogoutConnection to dbserver closed.[bingo@webserver]$

Configuración del Port Forwarding 

Ahora sí, vamos a crear el túnel. El comando para abrir el túnel SSH queda de la siguiente manera: 

[bingo@webserver]$ ssh -f -q -N -L3306:dbserver:3306 dbserver

La descripción de las opciones utilizadas con el comando ssh se muestra en la siguiente tabla. 

Opción  Significado

­f Le indica a ssh que se ejecute en segundo plano (background).

­q Para que no se muestren las advertencias y mensajes.

­N Para que ssh no permita ejecutar comandos remotos a través de laconexión. Es útil cuando se está usando el Port Forwarding. 

­L Esta es la opción principal que hace posible el Port Forwardinglocal. Indica que el puerto especificado en el host local (elcliente) tiene que ser "forwardeado" al puerto remoto en el hostremoto. 

Se puede entonces probar el acceso a alguna base de datos MySQL desde el servidor web utilizandoel túnel SSH. Será  necesario tener los permisos ajustados correctamente en MySQL para que elnombre de usuario y la contraseña que se usen permitan establecer la conexión a MySQL. 

[bingo@webserver]$ mysqlshow -h 127.0.0.1 -P 3306 -u bingo -pEnter password: ********

+--------------+| Databases |+--------------+| agendita || apache || multimail || mysql || zoologico || test |+--------------+

[bingo@webserver]$ mysql -h 127.0.0.1 -P 3306 -u bingo -p zoologicoEnter password: ********Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A

Page 25: Mysql Admin Esp

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 4 to server version: 3.23.41

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;+---------------------+| Tables_in_zoologico |+---------------------+| mascotas |+---------------------+1 row in set (0.00 sec)

mysql> exit Bye[bingo@webserver]$

Es muy importante enfatizar en que se tiene que modificar el código de las aplicaciones que hacenuso de MySQL desde el servidor web, para que en lugar de conectarse directamente al servidor debases de datos por un canal inseguro, lo hagan a través del túnel SSH. 

Por ejemplo, en PHP tendríamos lo siguiente: 

$host = "dbserver";$user = "bingo";$passwd = "holahola";$dbname = "mibase";

$conn = mysql_connect("$host","$user","$passwd");mysql_select_db("$dbname");....

En principio, lo único que tendríamos que cambiar es la variable $host $host = "127.0.0.1:3306";$user = "bingo";$passwd = "holahola";$dbname = "mibase";

$conn = mysql_connect("$host","$user","$passwd");mysql_select_db("$dbname");

Ahora los datos que se envían y se reciben de MySQL viajarán por el túnel SSH y por lo tantopodemos estar seguros de la confiabilidad de los datos que se trasmiten entre el servidor web y elservidor de bases de datos MySQL. 

Por último, es importante recordar que si el túnel SSH se cae, las aplicaciones web que lo esténusando no podrán acceder las base de datos en el servidor MySQL. 

Observaciones finales 

Si la seguridad y confiabilidad que proporciona el Port Forwarding no es suficiente, y se requiere

Page 26: Mysql Admin Esp

aún   hacer   uso   de   algún  firewall  para   proteger   el   servidor   de   bases   de   datos,   no  hay  ningúnproblema. Es decir, aunque el servidor MySQL se encuentre detrás de un  firewall, todavía puedeseguir usándose el Port Forwarding. 

Esta situación es mostrada en la siguiente figura. 

 

Como se puede observar, el único requisito que se debe de cumplir es que en el firewall se abra elpuerto 22, el puerto de Secure Shell, y de esta manera el túnel entre el servidor web y el servidor debases de datos se pueda crear. 

En   concreto,   esta   es   una   de   las   maneras   más   seguras   en   que   se   puede   tener   trabajando   unaaplicación web distribuida. Por una parte, no se compromete la seguridad del servidor de bases dedatos al ponerlo detrás de un  firewall, y de esta manera protegerlo, y por la otra, se garantiza laconfiabilidad de los datos enviados de y hacía el servidor MySQL ya que éstos se transmiten através del túnel SSH.