Professional Documents
Culture Documents
Introduccin a MySQL
En este artculo se tratan diversos temas que tienen que ver con el funcionamiento bsico del servidor MySQL
www.mysql-hispano.org
Introduccin a MySQL
Este artculo es el primero de toda una serie que ofrecer MySQL AB con el fin de proporcionar al lector informacin valiosa sobre el servidor de bases de datos MySQL. Aunque en artculos futuros se tratarn temas ms avanzados tales como replicacin, ODBC y optimizacin, se pens que era prudente si el primer tutorial comenzaba por los conceptos bsicos. Por lo tanto, el objetivo de este artculo es informar al lector sobre varios temas relacionados con el funcionamiento bsico de MySQL. Una sinopsis de los temas que sern cubiertos se muestra a continuacin en la Tabla de contenidos.
Las suposiciones
En este punto, se asume que el lector ha instalado exitosamente el servidor de bases de datos MySQL. Si un no se ha instalado MySQL, por favor tomarse un poco de tiempo para revisar la informacin proporcionada en la seccin de instalacin de la documentacin de MySQL. Se asume tambin que la base de datos de Mysql ha sido creada (usando mysql_install_db), y que el servidor MySQL ha sido inicializado usando safe_mysqld. Si esto no ha sido realizado, tomarse un momento para leer la Seccin 4.16, "Post-Instalacin, configuracin y pruebas" de la documentacin de MySQL. Se asume tambin que el lector tiene una comprensin bsica de la sintaxis de SQL (el Lenguaje Estructurado de Consulta). Para los lectores nuevos en el mundo de SQL, las ligas siguientes hacen referencia a documentos particularmente tiles para conocer SQL: Curso de SQL Manual de SQL Tutorial de SQL
Tabla de contenidos
Bien, he instalado MySQL. Ahora Qu? El archivo de configuracin de MySQL: my.cnf Las tablas de privilegios de MySQL Conectndose al servidor MySQL por primera vez Salir y conectarse de nuevo al monitor de MySQL Cuidado con esa contrasea! Seleccionando una base de datos mysqladmin Asegurando una base de datos
www.mysql-hispano.org
1 of 13
Introduccin a MySQL
El comando GRANT El comando REVOKE Respaldos de bases de datos mysqldump mysqlhotcopy Conclusiones
Notas importantes
* Este documento est basado en el artculo original en ingls An Introduction to MySQL, de W. J. Gilmore, ms no es una traduccin literal del mismo. * En algunos casos se omiti la traduccin de palabras como "host", "root", "shell", ya que se pens que tienen un mayor significado si se leen en ingls. * El artculo lleva una estructura secuencial de los temas, por lo que se recomienda que se lea de esta forma para una mayor comprensin.
www.mysql-hispano.org
2 of 13
Introduccin a MySQL
Finalmente, su alcance puede ser limitado para un usuario en especfico si el archivo se localiza en el directorio del usuario (~/.my.cnf). Se debe tener presente que aunque MySQL localice un archivo my.cnf en el directorio /etc/ (global para todos los servidores MySQL en una mquina), se continuar la bsqueda para un archivo especfico de servidor, y entonces un archivo especfico de usuario. Se puede pensar en las opciones de configuracin finales como el resultado de evaluar los archivos /etc/my.cnf, mysql-data-dir/my.cnf, y ~/.my.cnf . Con el propsito de ayudar a los administradores en la apropiada configuracin de este archivo, los desarrolladores de MySQL han incluido cuatro archivos de configuracin de ejemplo junto con la distribucin. Sus nombres son my-huge-cnf.sh, my-large.cnf.sh, my-medium.cnf.sh, y my-small.cnf.sh, y en cada uno de ellos se incluyen opciones de configuracin de acuerdo con la disponibilidad de recursos con que se cuente. Lecturas adicionales en la documentacin de MySQL (en ingls): 4.16.5 Option files
www.mysql-hispano.org
3 of 13
Introduccin a MySQL
En donde [opciones] pueden ser una o ms opciones usadas en conjuncin con el programa mysql, y [base de datos] es el nombre de la base de datos sobre la que se va a trabajar. Puesto que se asume que es la primera vez que se usa el monitor MySQL, debe tomarse un momento para revisar todas las opciones permitidas al ejecutar el siguiente comando:
shell> mysql --help
ste produce una larga lista de opciones que se pueden usar en conjuncin con el programa mysql. Por el momento, sin embargo, la meta principal es simplemente conectarse al servidor de bases de datos. Por lo tanto, hay que ejecutar el siguiente comando:
shell> mysql -u root
Felicidades, ahora se encuentra conectado al monitor de MySQL como el usuario root (el todopoderoso). La primera accin oficial como el lder supremo del servidor de bases de datos MySQL es asegurarse que nadie ms pueda declararse en esta posicin, haciendo esto posible cuando alguin quiera conectarse como root al servidor deba de proporcionar una contrasea. Hay que cambiar la contrasea de su valor actual (un valor nulo), a algo difcil de adivinar usando el siguiente comando:
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('la_palabra_secreta');
El "root", que es el nombre de usuario, y "localhost", que es el nombre del host, constituyen un usuario nico en MySQL. Para aquellos lectores no familiarizado con la terminologa de redes, 'localhost' es un nombre usado para referirse al servidor local; en este caso, el servidor sobre el cul reside MySQL. Por lo tanto, al escribir 'root'@'localhost', este comando le dice al servidor MySQL que ponga la contrasea para un usuario denominado 'root' que se conectar especficamente del servidor local ('localhost').
www.mysql-hispano.org
4 of 13
Introduccin a MySQL
Ms especficamente, este comando cambiar la contrasea actualizando lo que se conoce comnmente como la tabla de privilegios de MySQL. Estas tablas, que se encuentran en la base de datos llamada mysql, contienen informacin con respecto a las capacidades de conexin y uso de todos los usuarios que intentan usar el servidor de base de datos MySQL. Ms especficamente, este comando actualiza la tabla user, actualizando el campo password de la fila en la cual el valor de campo user es root. El campo password se actualizar con el valor encriptado de la cadena que se pasa como parmetro a la funcin PASSWORD(). Por supuesto, no olvidar esta contrasea. Puesto que sta es almacena en un texto encriptado dentro de la base de datos, no puede ser recuperada fcilmente en el caso de que sea olvidada. Hay tambin un mtodo alternativo para actualizar la contrasea:
shell> mysqladmin -u root password 'la_palabra_secreta'
Esto nos regresa al shell del sistema. Ahora hay que volver al monitor, pero esta vez usando el siguiente comando:
shell> mysql -u root -p
El hacer esto resulta en un prompt para proporcionar la contrasea del usuario root, como se muestra a continuacin:
Enter password:
En este punto, debe de suministrarse la contrasea que se asign al usuario root previamente. Asumiendo que sta ha sido proporcionada correctamente, aparecer el saludo estndar de MySQL, y root ser conectado al servidor MySQL una vez ms.
www.mysql-hispano.org
5 of 13
Introduccin a MySQL
No hacer esto!. No slo es un mtodo sumamente inseguro para proporcionar la contrasea, sino que no producir los resultados esperados!. Es inseguro porque permitir a cualquier persona observar la contrasea en este formato de texto plano, pero tambin porque cualquier usuario puede usar el comando 'ps' de Unix para ver los comandos que se estn ejecutando y ver all la contrasea en su formato de texto plano. Quizs sea una buena idea almacenar la contrasea en nuestro archivo de configuracin my.cnf, localizado en~/.my.cnf . Si usted no sabe lo que es este archivo, lea por favor la seccin previa titulada El archivo de configuracin de MySQL.
Tal vez cause algo de confusin en algunos lectores, ya que parece que se proporciona la palabra "mibasededatos" como la contrasea del usuario root. Esto no es correcto. Hay que tomarse un momento para revisar la sintaxis que se describe en la salida del comando mysql --help, puesto que debe de ser evidente que "-u root -p" se refiere a la parte de [opciones] y "mibasededatos" a la parte de [base de datos]. La otra manera de seleccionar una base de datos, es cuando uno ya est conectado al servidor MySQL. Para ello se debe usar el siguiente comando:
mysql> use mibasededatos
Una vez ejecutado cualquiera de los dos comandos, todas las consultas se dirigirn hacia la base de datos hipottica mibasededatos.
mysqladmin
El programa mysqladmin se usa para administrar varios aspectos del servidor de bases de datos MySQL. Al usarlo, el administrador puede realizar las tareas tales como: crear y eliminar bases de datos, dar de baja el servidor MySQL, actualizar las tablas de privilegios, y ver los procesos que se estn corriendo (ejecutando) dentro de MySQL. La sintaxis general es:
shell> mysqladmin [opciones] comando(s)
www.mysql-hispano.org
6 of 13
Introduccin a MySQL
Dnde [opciones] puede ser toda una serie de opciones usadas en conjuncin con el programa mysqladmin. Puesto que se asume que es la primera vez que se usa el programa mysqladmin, se recomienda que se revisen con detalle todas las opciones que se tienen permitidas con este programa. Usar el siguiente comando:
shell> mysqladmin --help
Esto produce una larga lista de las opciones que se pueden usar en conjuncin con el programa de mysqladmin. Para demostrar como son usadas estas opciones, a continuacin vamos a decirle a mysqladmin que necesitamos crear una base de datos llamada widgets, la cul ser usada a travs del resto de este artculo para ver otras funciones tiles de MySQL. Una base de datos se crea como sigue:
shell> mysqladmin -u root -p create widgets Enter Password:
Despus de la ejecucin, mysqladmin crear la base de datos y regresar el shell del sistema. Tpicamente, el siguiente paso consiste en asegurar la nueva base de datos modificando las tablas de privilegios. Los detalles de como se hace esto es el objetivo de la siguiente seccin. Lecturas adicionales en la documentacin de MySQL (en ingls): 14.5 Administering a MySQL Server
El comando GRANT
La funcin del comando GRANT es crear nuevos usuarios, y asignarle sus privilegios. Su sintaxis es:
GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION]
www.mysql-hispano.org
7 of 13
Introduccin a MySQL
Una comprensin de cmo trabaja el comando GRANT se obtiene mejor a travs de ejemplos. En el ejemplo siguiente, el comando GRANT es usado para agregar un nuevo usuario a la base de datos. Este usuario ser usado para accesar a la base de datos widgets:
mysql>GRANT usage ON *.* TO widgetAdmin@localhost ->IDENTIFIED BY 'ilovewidgets';
Esto crear un nuevo usuario denominado widgetAdmin, capaz de conectarse al servidor MySQL va el localhost usando la contrasea ilovewidgets. Hay que tener presente que slo se otorgan privilegios de conexin, no se permitir que el usuario haga nada en el servidor MySQL. Vamos a proseguir cambindonos a la base de datos mysql y ejecutando la siguiente consulta:
mysql> SELECT * FROM user;
Ntese que la fila conteniendo el usuario widgetAdmin tiene valores N para todos los dems privilegios. Esto es bueno, puesto que la tabla user contiene privilegios de carcter global. Para clarificar esto, si un valor "Y" se pone para cualquier privilegio en la tabla user, ese usuario puede aplicar ese privilegio a cualquier base de datos de MySQL. Por lo tanto, casi siempre ser mejor si todos los privilegios estn en "N" dentro de esta tabla. Bien, entonces como se asignan los privilegios a un usuario para una base de datos en particular?. Esto se hace fcilmente modificando ligeramente el comando GRANT del ejemplo previo. Por ejemplo, si asumimos que el administrador quiere otorgar los privilegios SELECT, INSERT, UPDATE y DELETE al usuario widgetAdmin sobre la base de datos widgets, se tendra que usar el comando GRANT de la siguiente manera:
mysql>GRANT SELECT, INSERT, UPDATE, DELETE ->ON widgets.* TO widgetAdmin@localhost;
Despus de la ejecucin de este comando, el usuario widgetAdmin puede inmediatamente hacer uso de estos privilegios.
Los privilegios introducidos aqu no son los nicos disponibles para el administrador. La tabla 1-1 proporciona un lista de todos los privilegios disponibles.
Tabla 1-1: privilegios disponibles para usar con el comando GRANT y REVOKE
www.mysql-hispano.org
8 of 13
Introduccin a MySQL
Para ver los nuevos privilegios que han sido asignados, se puede ejecutar la siguiente consulta:
mysql> SELECT * FROM db;
Ntese que una fila ha sido agregada a la tabla "db" para el registro del usuario widgetAdmin, con los valores "Y" asignados a los campos SELECT, INSERT, UPDATE y DELETE. Aunque en este ejemplo se mostr como crear un usuario, y posteriormente como asignarle los privilegios, es posible hacer estos dos pasos en uno solo, al ejecutar el comando GRANT visto anteriormente, con una ligera variante.
mysql>GRANT SELECT, INSERT, UPDATE, DELETE ->ON widgets.* TO widgetAdmin@localhost ->IDENTIFIED BY 'ilovewidgets';
Asumiendo que el usuario widgetAdmin an no existe cuando se ejecute esta consulta, tanto la tabla "user", como la tabla "db" sern actualizadas con las registros necesarios. Por supuesto, el administrador puede revocar los privilegios otorgados en cualquier momento. ste es el objetivo que se cubre en la siguiente seccin.
La sentencia REVOKE
La sentencia REVOKE es usada para rescindir los privilegios que han sido previamente otorgados a un usuario. Su sintaxis es la siguiente:
REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...]
Como en el caso del comando GRANT, quizs la mejor manera de entender realmente cmo funciona este comando es experimentado con varios ejemplos. Asumiendo que el administrador tiene la necesidad de revocar el privilegio DELETE que haba sido otorgado al usuario widgetAdmin, se tiene que ejecutar el comando REVOKE de la siguiente manera:
mysql>REVOKE DELETE ON widgets.* ->FROM widgetAdmin@localhost;
Un punto que se debe tener presente es que mientras REVOKE puede quitar todos los privilegios otorgados a un usuario (inclusive los privilegios de conexin), ste no quita al usuario de la tabla de privilegios. Para ilustrar esto, hay que considerar el siguiente comando:
mysql>REVOKE ALL PRIVILEGES ON widgets.* ->FROM widgetAdmin@localhost;
www.mysql-hispano.org
9 of 13
Introduccin a MySQL
Mientras esto tendra como resultado que sean revocados todos los privilegios del usuario widgetAdmin, ste no borrara registros trascendentes de las tablas de privilegios!. Si lo que se desea es borrar completamente a un usuario de la base de datos se tiene que hacer uso de la sentencia DELETE como sigue:
mysql>DELETE FROM user WHERE user = 'widgetAdmin'; Query OK, 1 row affected (0.00 sec) mysql>FLUSH PRIVILEGES;
Cuando ha sido ejecutada esta sentencia, se elimina a un usuario de manera definitiva de la tabla de privilegios. Lecturas adicionales en la documentacin de MySQL (en ingls): 7.34 Grant and Revoke Syntax
mysqldump
El comando mysqldump proporciona una manera conveniente para respaldar datos y estructuras de tablas. Hay que notar que mientras el comando mysqldump no es el mtodo ms eficiente para crear respaldos (mysqlhotcopy se describe a continuacin), ste ofrece un medio conveniente para copiar datos y estructuras de tablas que puede ser usado para "poblar" otro servidor SQL, no importando si se trata, o no de un servidor MySQL. El comando mysqldump puede ser usado para crear respaldos de todas las bases de datos, algunas bases de datos, slo una de ellas, o incluso ciertas tablas de una base de datos dada. En esta seccin se ilustra la sintaxis involucrada con varios posibles escenarios, seguida con unos pocos ejemplos. Usando el comando mysqldump para respaldar slo una base de datos:
shell> mysqldump [opciones] nombre_base_datos
Usando el comando mysqldump para respaldar varias tablas de una base de datos:
shell> mysqldump [opciones] nombre_base_datos tabla1 tabla2. . . tablaN
www.mysql-hispano.org
10 of 13
Introduccin a MySQL
- Ejemplos Respaldar ambos, la estructura y los datos encontrados dentro de la base de datos widgets puede ser realizado como sigue:
shell> mysqldump -u root -p --opt widgets
Alternativamente, quizs se requiera respaldar nicamente los datos, esto es logrado al incluir la opcin --no-create-info, lo que significa que no se creen los datos relativos a la creacin de las tablas.
shell>mysqldump -u root -p --no-create-info widgets
Otra variacin es respaldar nicamente la estructura de las tablas, esto es logrado al incluir la opcin --nodata, que significa la no creacin de los datos de las tablas.
shell>mysqldump -u root -p --no-data widgets
Si se est planeando usar mysqldump con el fin de respaldar datos para que puedan ser movidos a otro servidor MySQL, es recomendado que se use la opcin "--opt". Esto nos dar un respaldo optimizado de los datos que tendr como resultado un tiempo ms rpido de lectura cuando se quieran cargar los datos en otro servidor MySQL. Mientras mysqldump proporciona un mtodo conveniente para respaldar datos, hay un segundo mtodo, el cuales ms rpido, y ms eficiente. Esto se describe en la siguiente seccin.
mysqlhotcopy
El comando mysqlhotcopy es un script de Perl que usa varios comandos SQL y del sistema para respaldar una base de datos. Ms especficamente ste bloquea las tablas, limpia las tablas, hace una copia, y desbloquea las tablas. Aunque este sea el mtodo disponible ms rpido para respaldar una base de datos MySQL, ste se limita a respaldar slo las bases de datos que residen en la misma mquina en la cual est siendo ejecutado el comando mysqlhotcopy.
www.mysql-hispano.org
11 of 13
Introduccin a MySQL
El comando mysqlhotcopy puede ser ejecutado para respaldar una base de datos, varias bases de datos, o slo las bases de datos cuyo nombre coincida con una expresin regular. En esta seccin, se muestra la sintaxis involucrada con cada posible escenario seguida de unos pocos ejemplos. Usando mysqlhotcopy para respaldar slo una base de datos:
shell> mysqlhotcopy [opciones] nombre_bd /ruta/nuevo/directorio
Usando mysqlhotcopy para respaldar slo las tablas de una base de datos cuyo nombre coincida con una expresin regular:
shell> mysqlhotcopy [opciones] nombre_bd./expresionregular/
Las opciones completas del comando mysqlhotcopy pueden ser vistas ejecutando el siguiente comando:
shell> mysqlhotcopy --help
- Ejemplos Para usar mysqlhotcopy para respaldar la base de datos widgets al directorio "/usr/mysql/backups/" se tiene que ejecutar el siguiente comando:
shell>mysqlhotcopy -u root -p widgets /usr/mysql/backups
Un segundo ejemplo asume que la base de datos widgets contiene las tablas "productos2000", "productos2001", "clientes2000", y "clientes2001", con los cuatro digitos representando los datos correspondientes a cada ao. Si se desean respaldar las tablas relativas al ao "2000", el comando mysqlhotcopy tendra que usarse como sigue:
shell> mysqlhotcopy -u root -p widgets./^.+('2000')$/ /usr/mysql/backups
En el ejemplo de arriba, la expresin /^.+('2000')$/ le dice a mysqlhotcopy que respalde slo las tablas cuyo nombre finalice con la cadena "2000".
www.mysql-hispano.org
12 of 13
Introduccin a MySQL
Lecturas adicionales en la documentacin de MySQL (en ingls): 14.6 Dumping MySQL Database and Table Structures and Data 11 Replication in MySQL 14.7 Copying MySQL Databases and Tables
Conclusiones
El objetivo de este tutorial fue introducir los temas esenciales relacionados con la funcionalidad bsica del servidor MySQL. Se sugiere que los lectores novatos dediquen algo de tiempo para experimentar con todos los ejemplos, como bien se dice, "aprendiendo haciendo" es la manera ms rpida de llegar a sentirse cmodo con MySQL. La prxima vez, hecharemos un vistazo en algunos detalles de configuracin, enfocndonos en el archivo my.cnf, que fu introducido a principios de este tutorial.
www.mysql-hispano.org
13 of 13