Mysql Admin Esp
-
Upload
parreiracarlos16 -
Category
Documents
-
view
90 -
download
10
Transcript of 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
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 • mysqldmax version optimizada, con symbolic links, InnoDB y tablas berkeley
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.
• 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: *******
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.
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.
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.
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]
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.
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.
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.
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.
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 1255caracteres, 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 caseinsensitive (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ñomesdia 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
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
¡ 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:
[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.
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 adddroptable 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:
addlocks Añade LOCK TABLES antes, y UNLOCK TABLE después de la copia de cada tabla.
adddroptable Añade un drop table antes de cada sentencia create
A, alldatabases 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.
allowkeywords 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, completeinsert 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.
e, extendedinsert 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.
fieldsterminatedby=... fieldsenclosedby=... fieldsoptionallyenclosedby=... fieldsescapedby=... linesterminatedby=... Estas opciones se utilizan con la opción T y tienen el mismo significado que la correspondientecláusula LOAD DATA INFILE.
F, flushlogs 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, locktables. 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, locktables 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, disablekeys 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, nocreatedb No se incluirá en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta línease incluye si la opción databases o alldatabases fue seleccionada.
t, nocreateinfo No incluirá la información de creación de la tabla (sentencia CREATE TABLE).
d, nodata 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 adddroptable addlocks extendedinsert locktables. 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.
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, quotenames Entrecomilla las tablas y nombres de columna con los caracteres ``'.
r, resultfile=... 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'.
singletransaction 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=pathtosomedirectory 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 fieldsxxx y linesxxx 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, firstslave Bloquea todas las tablas de todas las bases de datos
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'
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
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.
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
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
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
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.