SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Introducción a MySQL




                          Introducción a MySQL
      En este artículo se tratan diversos temas que tienen que ver con el
                 funcionamiento básico del servidor MySQL




  www.mysql-hispano.org                     Fecha de creación: 29 May del 2003 - 12:39 pm
Introducción a MySQL


Este artículo es el primero de toda una serie que ofrecerá MySQL AB con el fin de proporcionar al lector
información valiosa sobre el servidor de bases de datos MySQL. Aunque en artículos futuros se tratarán
temas más avanzados tales como replicación, ODBC y optimización, se pensó que era prudente si el
primer tutorial comenzaba por los conceptos básicos. Por lo tanto, el objetivo de este artículo es
informar al lector sobre varios temas relacionados con el funcionamiento básico de MySQL. Una
sinopsis de los temas que serán cubiertos se muestra a continuación 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 información
proporcionada en la sección de instalación de la documentación de MySQL. Se asume también 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 Sección
4.16, "Post-Instalación, configuración y pruebas" de la documentación de MySQL.

Se asume también que el lector tiene una comprensión básica 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 configuración de MySQL: my.cnf

  » Las tablas de privilegios de MySQL

  » Conectándose al servidor MySQL por primera vez

  » Salir y conectarse de nuevo al monitor de MySQL

  » ¡Cuidado con esa contraseña!

  » Seleccionando una base de datos

  » mysqladmin

  » Asegurando una base de datos




  www.mysql-hispano.org                                                                     1 of 13
Introducción a MySQL

   » El comando GRANT

   » El comando REVOKE

   » Respaldos de bases de datos

   » mysqldump

   » mysqlhotcopy

   » Conclusiones



Notas importantes

* Este documento está basado en el artículo original en inglés An Introduction to MySQL, de W. J.
Gilmore, más no es una traducción literal del mismo.

* En algunos casos se omitió la traducción de palabras como "host", "root", "shell", ya que se pensó que
tienen un mayor significado si se leen en inglés.

* El artículo lleva una estructura secuencial de los temas, por lo que se recomienda que se lea de esta
forma para una mayor comprensión.


Bien, he instalado MySQL. ¿Ahora Qué?

El propósito de este tutorial es informar a los nuevos usuarios de MySQL sobre varios aspectos clave de
este maravilloso servidor de bases de datos. Se introducirán conceptos que van desde la funcionalidad
general del servidor, la seguridad, la administración de usuarios y privilegios, el trabajo con bases de
datos y tablas, y los respaldos de las bases de datos. Mientras que el lector probablemente encuentre
mucho de este material fácil de entender, hay que tener presente que estos conceptos son una parte
fundamental para trabajar eficiente y apropiadamente con el servidor MySQL, además de que
resultarán muy útiles para entender aspectos más avanzados que se discutirán en los posteriores
artículos. Por lo tanto se sugiere al lector que se tome el tiempo no sólo para leer el tutorial, sino también
para seguir los pasos descritos en los ejemplos para experimentar con su propia instalación de MySQL.


El archivo de configuración de MySQL: my.cnf

Es muy probable que la primera tarea que un administrador querrá emprender es la configuración
apropiada del archivo de configuración de MySQL. Este archivo, denominado my.cnf, contiene información
sobre las opciones de inicio tanto para el servidor, como para los clientes. La configuración de este
archivo influye de alguna manera para manejar la optimización de MySQL, la adecuación de varios
búffers de memoria y algunas otras opciones igualmente importantes.

Resulta muy interesante que el alcance de este archivo se pueda fijar de acuerdo a su ubicación. Las
opciones se considerarán globales para todos los servidores MySQL si el archivo my.cnf está en el
directorio /etc. Serán globales para un servidor en específico si el archivo se localiza en el directorio en
el cual se almacenan las bases de datos (seguramente /usr/local/mysql/data o /var/lib/mysql).



   www.mysql-hispano.org                                                                           2 of 13
Introducción a MySQL


Finalmente, su alcance puede ser limitado para un usuario en específico 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 máquina), se continuará la
búsqueda para un archivo específico de servidor, y entonces un archivo específico de usuario. Se puede
pensar en las opciones de configuración finales como el resultado de evaluar los archivos /etc/my.cnf,
mysql-data-dir/my.cnf, y ~/.my.cnf .

Con el propósito de ayudar a los administradores en la apropiada configuración de este archivo, los
desarrolladores de MySQL han incluido cuatro archivos de configuración de ejemplo junto con la
distribución. 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 configuración de acuerdo con la disponibilidad de recursos
con que se cuente.

Lecturas adicionales en la documentación de MySQL (en inglés):

4.16.5 Option files


Las tablas de privilegios de MySQL

Antes de entrar en detalle con los ejemplos que consitituyen este tutorial, se hará una breve
introducción de uno de los aspectos más importantes (y muchas veces mal entendido!) del servidor de
MySQL; el mecanismo mediante el cuál MySQL asegura sus datos y la integridad: las tablas de
privilegios de MySQL. Las tablas de privilegios de MySQL son responsables de la autenticación de
usuarios cuando accesan al servidor MySQL, y la subsecuente asociación de un conjunto de privilegios
una vez que han conseguido acceso al servidor. Este conjunto de privilegios determina lo que un
usuario es capaz de hacer mientras está conectado al servidorMySQL, controlando las actividades del
usuario en todo el servidor, en una base de datos, en una tabla o incluso en una columna de una tabla.

Por ejemplo, un administrador podría otorgar privilegios a un usuario para conectarse a una base de
datos específica de MySQL, y denegarle el acceso a todas las demás bases de datos. Además, a ese
mismo usuario pueden otorgarse sólo ciertos privilegios mientras está conectado a esa base de datos,
por ejemplo, la selección, la inserción, y la actualización. Asociado con sólo estos tres privilegios, a este
usuario le sería negado cualquier intento de borrar los datos, puesto que a este usuario no ha sido
otorgado el privilegio de eliminar datos.

Aunque una introducción más a fondo de las tablas de privilegios está fuera del alcance de este
artículo, es importante que el lector entienda el papel tan importante que juegan estas tablas al asegurar
un servidor MySQL. Al trabajar en los ejemplos a través del resto de este artículo, se debe tener
presente que las tablas de privilegios influyen en cada consulta y comando que se ejecuta,
asegurándose que el usuario que ejecuta dichos comandos o consultas tiene los permisos apropiados
para hacerlo. También es bastante recomendado que el lector se tome algún tiempo para revisar las
ligas mostradas a continuación, ya que cada uno de ellos describe en mayor detalle los mecanismos
fundamentales de estas tablas.

Lecturas adicionales en la documentación de MySQL (en inglés):
6.9 How the Privilege System Works
6.2 How to Make MySQL Secure Against Crackers
6.14 Adding New User Privileges to MySQL




   www.mysql-hispano.org                                                                        3 of 13
Introducción a MySQL



Conectándose a MySQL por primera vez

El programa cliente de MySQL, también conocido como el monitor de MySQL, es una interfase que le
permite a un usuario conectarse a un servidor MySQL, crear y modificar bases de datos, y ejecutar
consultas y ver los resultados. Este programa es iniciado ejecutando el comando mysql en el prompt
del sistema. En general, la sintaxis de este comando es:


  shell> mysql [opciones] [base de datos]


En donde [opciones] pueden ser una o más opciones usadas en conjunción 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 conjunción 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

Deberá de aparecer algo como los siguiente:


  Welcome to the MySQL monitor. Commands end with ; or g.
  Your MySQL connection id is 8 to server version: 3.23.28-gamma-log

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

  mysql>


Felicidades, ahora se encuentra conectado al monitor de MySQL como el usuario root (el
todopoderoso). La primera acción oficial como el líder supremo del servidor de bases de datos MySQL es
asegurarse que nadie más pueda declararse en esta posición, haciendo esto posible cuando alguién
quiera conectarse como root al servidor deba de proporcionar una contraseña. Hay que cambiar la
contraseña de su valor actual (un valor nulo), a algo difícil 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 terminología de redes, 'localhost' es un
nombre usado para referirse al servidor local; en este caso, el servidor sobre el cuál reside MySQL.
Por lo tanto, al escribir 'root'@'localhost', este comando le dice al servidor MySQL que ponga la
contraseña para un usuario denominado 'root' que se conectará específicamente del servidor local
('localhost').



   www.mysql-hispano.org                                                                       4 of 13
Introducción a MySQL


Más específicamente, este comando cambiará la contraseña actualizando lo que se conoce
comúnmente como la tabla de privilegios de MySQL. Estas tablas, que se encuentran en la base de
datos llamada mysql, contienen información con respecto a las capacidades de conexión y uso de todos
los usuarios que intentan usar el servidor de base de datos MySQL. Más específicamente, 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
parámetro a la función PASSWORD().

Por supuesto, no olvidar esta contraseña. Puesto que ésta es almacena en un texto encriptado dentro
de la base de datos, no puede ser recuperada fácilmente en el caso de que sea olvidada.

Hay también un método alternativo para actualizar la contraseña:


  shell> mysqladmin -u root password 'la_palabra_secreta'


Este comando tiene el mismo efecto que el comando introducido previamente.


Salir y conectarse de nuevo al monitor MySQL

Para verificar que la nueva contraseña funciona, salir del monitor MySQL usando el siguiente comando:

  mysql> q

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 contraseña del usuario root, como se muestra
a continuación:

  Enter password:


En este punto, debe de suministrarse la contraseña que se asignó al usuario root previamente.
Asumiendo que ésta ha sido proporcionada correctamente, aparecerá el saludo estándar de MySQL,
y root será conectado al servidor MySQL una vez más.


¡Cuidado con esa contraseña!

Muchos lectores pueden estar tentados a incluir la contraseña en la misma línea de comandos, como
sigue:


  shell> mysql -u root -pla_palabra_secreta




   www.mysql-hispano.org                                                                     5 of 13
Introducción a MySQL

¡No hacer esto!. ¡No sólo es un método sumamente inseguro para proporcionar la contraseña, sino que
no producirá los resultados esperados!. Es inseguro porque permitirá a cualquier persona observar la
contraseña en este formato de texto plano, pero también porque cualquier usuario puede usar el
comando 'ps' de Unix para ver los comandos que se están ejecutando y ver allí la contraseña en su
formato de texto plano.

Quizás sea una buena idea almacenar la contraseña en nuestro archivo de configuración my.cnf,
localizado en~/.my.cnf . Si usted no sabe lo que es este archivo, lea por favor la sección previa titulada El
archivo de configuración de MySQL.


Seleccionado una base de datos

Por supuesto, simplemente conectarse al servidor MySQL no servirá de mucho. Seguramente se
querrá seleccionar una base de datos para trabajar sobre con ella. Esto se puede hacer de dos
maneras:

Una de ellas es incluir el nombre de la base de datos al ejecutar el comando mysql. Por ejemplo, para
conectarse al servidor MySQL y seleccionar al mismo tiempo la base de datos es:


  shell> mysql -u root -p mibasededatos


Tal vez cause algo de confusión en algunos lectores, ya que parece que se proporciona la palabra
"mibasededatos" como la contraseña 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 dirigirán hacia la base de
datos hipotética 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
están corriendo (ejecutando) dentro de MySQL. La sintaxis general es:


  shell> mysqladmin [opciones] comando(s)




   www.mysql-hispano.org                                                                          6 of 13
Introducción a MySQL

Dónde [opciones] puede ser toda una serie de opciones usadas en conjunción 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 conjunción con el programa de
mysqladmin. Para demostrar como son usadas estas opciones, a continuación vamos a decirle a
mysqladmin que necesitamos crear una base de datos llamada widgets, la cuál será usada a través
del resto de este artículo para ver otras funciones útiles de MySQL.

Una base de datos se crea como sigue:

  shell> mysqladmin -u root -p create widgets
  Enter Password:

Después de la ejecución, mysqladmin creará la base de datos y regresará el shell del sistema.
Típicamente, 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 sección.

Lecturas adicionales en la documentación de MySQL (en inglés):
14.5 Administering a MySQL Server


Asegurando una base de datos

La seguridad debe ser lo primero que debe venir a la mente de un administrador de MySQL después
de crear una base de datos. Como se discutió en la sección "Las tablas de privilegios", asegurar una base
de datos consiste en hacer modificaciones a las tablas que se encuentran en la base de datos llamada
mysql. En esta sección, el lector aprenderá a asegurar la base de datos widgets que se creó
anteriormente. Antes de hacer esto, se va a realizar un breve resumen de cómo son modificadas las
tablas de privilegios.

Hay dos métodos usados para modificar las tablas de privilegios. El primero es a través del uso de las
sentencias típicas de SQL tales como INSERT, UPDATE, y DELETE. Sin embargo el uso de este
método ha sido depreciado para introducir el segundo método, el cual involucra el uso de los
comandos especiales GRANT yREVOKE. Por lo tanto, sólo este método se discutirá a continuación.


El comando GRANT

La función 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
Introducción a MySQL

Una comprensión de cómo trabaja el comando GRANT se obtiene mejor a través 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 vía el
localhost usando la contraseña ilovewidgets. Hay que tener presente que sólo se otorgan privilegios de
conexión, no se permitirá que el usuario haga nada en el servidor MySQL. Vamos a proseguir
cambiándonos a la base de datos mysql y ejecutando la siguiente consulta:


  mysql> SELECT * FROM user;


Nótese que la fila conteniendo el usuario widgetAdmin tiene valores N para todos los demás privilegios.
Esto es bueno, puesto que la tabla user contiene privilegios de carácter 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 están
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 fácilmente 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 tendría que usar el comando GRANT de la
siguiente manera:


  mysql>GRANT SELECT, INSERT, UPDATE, DELETE
  ->ON widgets.* TO widgetAdmin@localhost;


Después de la ejecución 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



         ALL PRIVILEGES                  FILE                          RELOAD
         ALTER                           INDEX                         SELECT
         CREATE                          INSERT                        SHUTDOWN
         DELETE                          PROCESS                       UPDATE
         DROP                            REFERENCES                    USAGE




   www.mysql-hispano.org                                                                         8 of 13
Introducción a MySQL

Para ver los nuevos privilegios que han sido asignados, se puede ejecutar la siguiente consulta:


  mysql> SELECT * FROM db;


Nótese 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 aún no existe cuando se ejecute esta consulta, tanto la tabla
"user", como la tabla "db" serán 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 sección.


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, quizás la mejor manera de entender realmente cómo funciona
este comando es experimentado con varios ejemplos. Asumiendo que el administrador tiene la
necesidad de revocar el privilegio DELETE que había 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 conexión), é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
Introducción a MySQL

¡Mientras esto tendría como resultado que sean revocados todos los privilegios del usuario
widgetAdmin, éste no borraría 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 documentación de MySQL (en inglés):
7.34 Grant and Revoke Syntax


Respaldos de bases de datos

El concepto final discutido en este tutorial es uno verdaderamente importante: respaldos de datos. En
esta sección se discuten dos métodos de hacer respaldos de datos y de las estructuras de las bases de
datos MySQL, los comandos mysqldump y mysqlhotcopy.


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 método más eficiente para crear
respaldos (mysqlhotcopy se describe a continuación), é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, sólo una de ellas, o incluso ciertas tablas de una base
de datos dada. En esta sección se ilustra la sintaxis involucrada con varios posibles escenarios, seguida
con unos pocos ejemplos.

Usando el comando mysqldump para respaldar sólo 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


Usando mysqldump para respaldar varias bases de datos:


  shell> mysqldump [opciones] --databases [opciones] nombre_bd1 nombre_bd2...




   www.mysql-hispano.org                                                                      10 of 13
Introducción a MySQL


Usando mysqldump para respaldar todas las bases de datos:


  shell> mysqldump [opciones] --all-databases [opciones]


Las opciones pueden ser vistas ejecutando el siguiente comando:


  shell> mysqldump --help


- 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, quizás se requiera respaldar únicamente los datos, esto es logrado al incluir la
opción --no-create-info, lo que significa que no se creen los datos relativos a la creación de las tablas.


  shell>mysqldump -u root -p --no-create-info widgets


Otra variación es respaldar únicamente la estructura de las tablas, esto es logrado al incluir la opción --no-
data, que significa la no creación 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 opción "--opt". Esto nos dará un respaldo
optimizado de los datos que tendrá como resultado un tiempo más rápido de lectura cuando se
quieran cargar los datos en otro servidor MySQL.

Mientras mysqldump proporciona un método conveniente para respaldar datos, hay un segundo
método, el cuales más rápido, y más eficiente. Esto se describe en la siguiente sección.



mysqlhotcopy

El comando mysqlhotcopy es un script de Perl que usa varios comandos SQL y del sistema para
respaldar una base de datos. Más específicamente éste bloquea las tablas, limpia las tablas, hace una
copia, y desbloquea las tablas. Aunque este sea el método disponible más rápido para respaldar una
base de datos MySQL, éste se limita a respaldar sólo las bases de datos que residen en la misma
máquina en la cual está siendo ejecutado el comando mysqlhotcopy.




   www.mysql-hispano.org                                                                          11 of 13
Introducción a MySQL


El comando mysqlhotcopy puede ser ejecutado para respaldar una base de datos, varias bases de
datos, o sólo las bases de datos cuyo nombre coincida con una expresión regular. En esta sección, se
muestra la sintaxis involucrada con cada posible escenario seguida de unos pocos ejemplos.

Usando mysqlhotcopy para respaldar sólo una base de datos:


  shell> mysqlhotcopy [opciones] nombre_bd /ruta/nuevo/directorio


Usando mysqlhotcopy para respaldar varias bases de datos:


  shell> mysqlhotcopy [opciones] nombre_bd1.. nombre_bdN /ruta/nuevo/directorio


Usando mysqlhotcopy para respaldar sólo las tablas de una base de datos cuyo nombre coincida con
una expresión 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 año.

Si se desean respaldar las tablas relativas al año "2000", el comando mysqlhotcopy tendría que usarse
como sigue:


  shell> mysqlhotcopy -u root -p widgets./^.+('2000')$/ /usr/mysql/backups


En el ejemplo de arriba, la expresión /^.+('2000')$/ le dice a mysqlhotcopy que respalde sólo las tablas
cuyo nombre finalice con la cadena "2000".




   www.mysql-hispano.org                                                                    12 of 13
Introducción a MySQL

Lecturas adicionales en la documentación de MySQL (en inglés):
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 básica
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 más rápida de llegar
a sentirse cómodo con MySQL.

La próxima vez, hecharemos un vistazo en algunos detalles de configuración, enfocándonos en el archivo
my.cnf, que fué introducido a principios de este tutorial.




   www.mysql-hispano.org                                                                       13 of 13

Weitere ähnliche Inhalte

Was ist angesagt?

Administrando la Instancia en Oracle database 11g-Z052 05
Administrando la Instancia en Oracle database 11g-Z052 05Administrando la Instancia en Oracle database 11g-Z052 05
Administrando la Instancia en Oracle database 11g-Z052 05
Alexander Calderón
 
Estructuras de almacenamiento de Oracle 11g R2
Estructuras de almacenamiento de Oracle 11g R2Estructuras de almacenamiento de Oracle 11g R2
Estructuras de almacenamiento de Oracle 11g R2
Carmen Soler
 
07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin
José M. Padilla
 
Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7
Mario Alfonso
 
Installacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En LinuxInstallacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En Linux
andres
 
Bases distribuidas en mysql
Bases distribuidas en mysqlBases distribuidas en mysql
Bases distribuidas en mysql
Giovanni Peruch
 

Was ist angesagt? (20)

Integración de Mahara con Moodle (MoodleMoot España 2010)
Integración de Mahara con Moodle (MoodleMoot España 2010)Integración de Mahara con Moodle (MoodleMoot España 2010)
Integración de Mahara con Moodle (MoodleMoot España 2010)
 
Administrando la Instancia en Oracle database 11g-Z052 05
Administrando la Instancia en Oracle database 11g-Z052 05Administrando la Instancia en Oracle database 11g-Z052 05
Administrando la Instancia en Oracle database 11g-Z052 05
 
QUÉ ES MySQL
QUÉ ES MySQLQUÉ ES MySQL
QUÉ ES MySQL
 
Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012
 
Instalación de MySQL en Linux Mint
Instalación de MySQL en Linux MintInstalación de MySQL en Linux Mint
Instalación de MySQL en Linux Mint
 
Estructuras de almacenamiento de Oracle 11g R2
Estructuras de almacenamiento de Oracle 11g R2Estructuras de almacenamiento de Oracle 11g R2
Estructuras de almacenamiento de Oracle 11g R2
 
Mysql
MysqlMysql
Mysql
 
COPIA DE SEGURIDAD Y RESTAURACIÓN.
COPIA DE SEGURIDAD Y RESTAURACIÓN.COPIA DE SEGURIDAD Y RESTAURACIÓN.
COPIA DE SEGURIDAD Y RESTAURACIÓN.
 
Admon PG 1
Admon PG 1Admon PG 1
Admon PG 1
 
07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin
 
Unidad 3 actividad 1
Unidad 3 actividad 1Unidad 3 actividad 1
Unidad 3 actividad 1
 
My Sql Comunity Edition
My Sql Comunity EditionMy Sql Comunity Edition
My Sql Comunity Edition
 
Pasos para Instalar MySQL server
Pasos para Instalar MySQL server Pasos para Instalar MySQL server
Pasos para Instalar MySQL server
 
Fragmentación vertical - MySQL
Fragmentación vertical - MySQLFragmentación vertical - MySQL
Fragmentación vertical - MySQL
 
Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7
 
Replicacion de base de datos
Replicacion de  base de datosReplicacion de  base de datos
Replicacion de base de datos
 
Installacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En LinuxInstallacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En Linux
 
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
 
INTRODUCCIÓN A ORACLE SQL
INTRODUCCIÓN A ORACLE SQLINTRODUCCIÓN A ORACLE SQL
INTRODUCCIÓN A ORACLE SQL
 
Bases distribuidas en mysql
Bases distribuidas en mysqlBases distribuidas en mysql
Bases distribuidas en mysql
 

Andere mochten auch

Introducción a la accesibilidad web
Introducción a la accesibilidad webIntroducción a la accesibilidad web
Introducción a la accesibilidad web
tayzee
 
Introducción al Diseño web
Introducción al Diseño webIntroducción al Diseño web
Introducción al Diseño web
ciwmx
 

Andere mochten auch (15)

Introducción a la accesibilidad web
Introducción a la accesibilidad webIntroducción a la accesibilidad web
Introducción a la accesibilidad web
 
Introducción a la accesibilidad Web
Introducción a la accesibilidad WebIntroducción a la accesibilidad Web
Introducción a la accesibilidad Web
 
Html5
Html5Html5
Html5
 
HTML - HyperText Markup Language - HTML5
HTML - HyperText Markup Language - HTML5HTML - HyperText Markup Language - HTML5
HTML - HyperText Markup Language - HTML5
 
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicacionesWPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
WPF 10. mejorando la funcionalidad y usabilidad de las aplicaciones
 
2 (de 3). Evaluación de Usabilidad
2 (de 3).  Evaluación de Usabilidad2 (de 3).  Evaluación de Usabilidad
2 (de 3). Evaluación de Usabilidad
 
UX y SEO: Como posicionar tu web con técnicas de usabilidad
UX y SEO: Como posicionar tu web con técnicas de usabilidadUX y SEO: Como posicionar tu web con técnicas de usabilidad
UX y SEO: Como posicionar tu web con técnicas de usabilidad
 
Historia de HTML5
Historia de HTML5Historia de HTML5
Historia de HTML5
 
Usabilidad y ROI en las empresas - 2016
Usabilidad y ROI en las empresas - 2016Usabilidad y ROI en las empresas - 2016
Usabilidad y ROI en las empresas - 2016
 
Módulo 4: Usabilidad Web
Módulo 4: Usabilidad WebMódulo 4: Usabilidad Web
Módulo 4: Usabilidad Web
 
HTML5: empieza hoy
HTML5: empieza hoyHTML5: empieza hoy
HTML5: empieza hoy
 
Introducción HTML5 y CSS3
Introducción HTML5 y CSS3Introducción HTML5 y CSS3
Introducción HTML5 y CSS3
 
HTML5
HTML5HTML5
HTML5
 
Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3
 
Introducción al Diseño web
Introducción al Diseño webIntroducción al Diseño web
Introducción al Diseño web
 

Ähnlich wie Introduccion my sql

Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificado
Yusef Yamel
 
Html,php
Html,phpHtml,php
Html,php
softyed
 
Instalaciion de mysql para windows
Instalaciion de mysql para windowsInstalaciion de mysql para windows
Instalaciion de mysql para windows
Carlos Cortés
 

Ähnlich wie Introduccion my sql (20)

curso_mysql.pdf
curso_mysql.pdfcurso_mysql.pdf
curso_mysql.pdf
 
Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificado
 
Base de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL ServerBase de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL Server
 
Base datos f05
Base datos f05Base datos f05
Base datos f05
 
79 Php. Ficheros My Sql
79 Php. Ficheros My Sql79 Php. Ficheros My Sql
79 Php. Ficheros My Sql
 
Sistema Gestor de Base de Datos MYSQL
Sistema Gestor de Base de Datos MYSQLSistema Gestor de Base de Datos MYSQL
Sistema Gestor de Base de Datos MYSQL
 
Guía de MySql - Lissette Torrealba
Guía de MySql  - Lissette TorrealbaGuía de MySql  - Lissette Torrealba
Guía de MySql - Lissette Torrealba
 
Html,php
Html,phpHtml,php
Html,php
 
Base de dato
Base de  dato Base de  dato
Base de dato
 
Base de dato act4
Base de  dato act4Base de  dato act4
Base de dato act4
 
Mysql
MysqlMysql
Mysql
 
Mysql
MysqlMysql
Mysql
 
Ds dprn3 u3_a1_alcz
Ds dprn3 u3_a1_alczDs dprn3 u3_a1_alcz
Ds dprn3 u3_a1_alcz
 
MariaDb VS MySql
MariaDb VS MySql MariaDb VS MySql
MariaDb VS MySql
 
14.- Servidor my sql
14.- Servidor my sql14.- Servidor my sql
14.- Servidor my sql
 
Mysql posgresql
Mysql posgresqlMysql posgresql
Mysql posgresql
 
Instalaciion de mysql para windows
Instalaciion de mysql para windowsInstalaciion de mysql para windows
Instalaciion de mysql para windows
 
Sq lite
Sq liteSq lite
Sq lite
 
Nestor Nieto BaseDatos_Tarea01
Nestor Nieto BaseDatos_Tarea01Nestor Nieto BaseDatos_Tarea01
Nestor Nieto BaseDatos_Tarea01
 
My sql clase_1
My sql clase_1My sql clase_1
My sql clase_1
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Kürzlich hochgeladen (11)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Introduccion my sql

  • 1. Introducción a MySQL Introducción a MySQL En este artículo se tratan diversos temas que tienen que ver con el funcionamiento básico del servidor MySQL www.mysql-hispano.org Fecha de creación: 29 May del 2003 - 12:39 pm
  • 2. Introducción a MySQL Este artículo es el primero de toda una serie que ofrecerá MySQL AB con el fin de proporcionar al lector información valiosa sobre el servidor de bases de datos MySQL. Aunque en artículos futuros se tratarán temas más avanzados tales como replicación, ODBC y optimización, se pensó que era prudente si el primer tutorial comenzaba por los conceptos básicos. Por lo tanto, el objetivo de este artículo es informar al lector sobre varios temas relacionados con el funcionamiento básico de MySQL. Una sinopsis de los temas que serán cubiertos se muestra a continuación 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 información proporcionada en la sección de instalación de la documentación de MySQL. Se asume también 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 Sección 4.16, "Post-Instalación, configuración y pruebas" de la documentación de MySQL. Se asume también que el lector tiene una comprensión básica 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 configuración de MySQL: my.cnf » Las tablas de privilegios de MySQL » Conectándose al servidor MySQL por primera vez » Salir y conectarse de nuevo al monitor de MySQL » ¡Cuidado con esa contraseña! » Seleccionando una base de datos » mysqladmin » Asegurando una base de datos www.mysql-hispano.org 1 of 13
  • 3. Introducción a MySQL » El comando GRANT » El comando REVOKE » Respaldos de bases de datos » mysqldump » mysqlhotcopy » Conclusiones Notas importantes * Este documento está basado en el artículo original en inglés An Introduction to MySQL, de W. J. Gilmore, más no es una traducción literal del mismo. * En algunos casos se omitió la traducción de palabras como "host", "root", "shell", ya que se pensó que tienen un mayor significado si se leen en inglés. * El artículo lleva una estructura secuencial de los temas, por lo que se recomienda que se lea de esta forma para una mayor comprensión. Bien, he instalado MySQL. ¿Ahora Qué? El propósito de este tutorial es informar a los nuevos usuarios de MySQL sobre varios aspectos clave de este maravilloso servidor de bases de datos. Se introducirán conceptos que van desde la funcionalidad general del servidor, la seguridad, la administración de usuarios y privilegios, el trabajo con bases de datos y tablas, y los respaldos de las bases de datos. Mientras que el lector probablemente encuentre mucho de este material fácil de entender, hay que tener presente que estos conceptos son una parte fundamental para trabajar eficiente y apropiadamente con el servidor MySQL, además de que resultarán muy útiles para entender aspectos más avanzados que se discutirán en los posteriores artículos. Por lo tanto se sugiere al lector que se tome el tiempo no sólo para leer el tutorial, sino también para seguir los pasos descritos en los ejemplos para experimentar con su propia instalación de MySQL. El archivo de configuración de MySQL: my.cnf Es muy probable que la primera tarea que un administrador querrá emprender es la configuración apropiada del archivo de configuración de MySQL. Este archivo, denominado my.cnf, contiene información sobre las opciones de inicio tanto para el servidor, como para los clientes. La configuración de este archivo influye de alguna manera para manejar la optimización de MySQL, la adecuación de varios búffers de memoria y algunas otras opciones igualmente importantes. Resulta muy interesante que el alcance de este archivo se pueda fijar de acuerdo a su ubicación. Las opciones se considerarán globales para todos los servidores MySQL si el archivo my.cnf está en el directorio /etc. Serán globales para un servidor en específico si el archivo se localiza en el directorio en el cual se almacenan las bases de datos (seguramente /usr/local/mysql/data o /var/lib/mysql). www.mysql-hispano.org 2 of 13
  • 4. Introducción a MySQL Finalmente, su alcance puede ser limitado para un usuario en específico 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 máquina), se continuará la búsqueda para un archivo específico de servidor, y entonces un archivo específico de usuario. Se puede pensar en las opciones de configuración finales como el resultado de evaluar los archivos /etc/my.cnf, mysql-data-dir/my.cnf, y ~/.my.cnf . Con el propósito de ayudar a los administradores en la apropiada configuración de este archivo, los desarrolladores de MySQL han incluido cuatro archivos de configuración de ejemplo junto con la distribución. 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 configuración de acuerdo con la disponibilidad de recursos con que se cuente. Lecturas adicionales en la documentación de MySQL (en inglés): 4.16.5 Option files Las tablas de privilegios de MySQL Antes de entrar en detalle con los ejemplos que consitituyen este tutorial, se hará una breve introducción de uno de los aspectos más importantes (y muchas veces mal entendido!) del servidor de MySQL; el mecanismo mediante el cuál MySQL asegura sus datos y la integridad: las tablas de privilegios de MySQL. Las tablas de privilegios de MySQL son responsables de la autenticación de usuarios cuando accesan al servidor MySQL, y la subsecuente asociación de un conjunto de privilegios una vez que han conseguido acceso al servidor. Este conjunto de privilegios determina lo que un usuario es capaz de hacer mientras está conectado al servidorMySQL, controlando las actividades del usuario en todo el servidor, en una base de datos, en una tabla o incluso en una columna de una tabla. Por ejemplo, un administrador podría otorgar privilegios a un usuario para conectarse a una base de datos específica de MySQL, y denegarle el acceso a todas las demás bases de datos. Además, a ese mismo usuario pueden otorgarse sólo ciertos privilegios mientras está conectado a esa base de datos, por ejemplo, la selección, la inserción, y la actualización. Asociado con sólo estos tres privilegios, a este usuario le sería negado cualquier intento de borrar los datos, puesto que a este usuario no ha sido otorgado el privilegio de eliminar datos. Aunque una introducción más a fondo de las tablas de privilegios está fuera del alcance de este artículo, es importante que el lector entienda el papel tan importante que juegan estas tablas al asegurar un servidor MySQL. Al trabajar en los ejemplos a través del resto de este artículo, se debe tener presente que las tablas de privilegios influyen en cada consulta y comando que se ejecuta, asegurándose que el usuario que ejecuta dichos comandos o consultas tiene los permisos apropiados para hacerlo. También es bastante recomendado que el lector se tome algún tiempo para revisar las ligas mostradas a continuación, ya que cada uno de ellos describe en mayor detalle los mecanismos fundamentales de estas tablas. Lecturas adicionales en la documentación de MySQL (en inglés): 6.9 How the Privilege System Works 6.2 How to Make MySQL Secure Against Crackers 6.14 Adding New User Privileges to MySQL www.mysql-hispano.org 3 of 13
  • 5. Introducción a MySQL Conectándose a MySQL por primera vez El programa cliente de MySQL, también conocido como el monitor de MySQL, es una interfase que le permite a un usuario conectarse a un servidor MySQL, crear y modificar bases de datos, y ejecutar consultas y ver los resultados. Este programa es iniciado ejecutando el comando mysql en el prompt del sistema. En general, la sintaxis de este comando es: shell> mysql [opciones] [base de datos] En donde [opciones] pueden ser una o más opciones usadas en conjunción 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 conjunción 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 Deberá de aparecer algo como los siguiente: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 8 to server version: 3.23.28-gamma-log Type 'help;' or 'h' for help. Type 'c' to clear the buffer mysql> Felicidades, ahora se encuentra conectado al monitor de MySQL como el usuario root (el todopoderoso). La primera acción oficial como el líder supremo del servidor de bases de datos MySQL es asegurarse que nadie más pueda declararse en esta posición, haciendo esto posible cuando alguién quiera conectarse como root al servidor deba de proporcionar una contraseña. Hay que cambiar la contraseña de su valor actual (un valor nulo), a algo difícil 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 terminología de redes, 'localhost' es un nombre usado para referirse al servidor local; en este caso, el servidor sobre el cuál reside MySQL. Por lo tanto, al escribir 'root'@'localhost', este comando le dice al servidor MySQL que ponga la contraseña para un usuario denominado 'root' que se conectará específicamente del servidor local ('localhost'). www.mysql-hispano.org 4 of 13
  • 6. Introducción a MySQL Más específicamente, este comando cambiará la contraseña actualizando lo que se conoce comúnmente como la tabla de privilegios de MySQL. Estas tablas, que se encuentran en la base de datos llamada mysql, contienen información con respecto a las capacidades de conexión y uso de todos los usuarios que intentan usar el servidor de base de datos MySQL. Más específicamente, 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 parámetro a la función PASSWORD(). Por supuesto, no olvidar esta contraseña. Puesto que ésta es almacena en un texto encriptado dentro de la base de datos, no puede ser recuperada fácilmente en el caso de que sea olvidada. Hay también un método alternativo para actualizar la contraseña: shell> mysqladmin -u root password 'la_palabra_secreta' Este comando tiene el mismo efecto que el comando introducido previamente. Salir y conectarse de nuevo al monitor MySQL Para verificar que la nueva contraseña funciona, salir del monitor MySQL usando el siguiente comando: mysql> q 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 contraseña del usuario root, como se muestra a continuación: Enter password: En este punto, debe de suministrarse la contraseña que se asignó al usuario root previamente. Asumiendo que ésta ha sido proporcionada correctamente, aparecerá el saludo estándar de MySQL, y root será conectado al servidor MySQL una vez más. ¡Cuidado con esa contraseña! Muchos lectores pueden estar tentados a incluir la contraseña en la misma línea de comandos, como sigue: shell> mysql -u root -pla_palabra_secreta www.mysql-hispano.org 5 of 13
  • 7. Introducción a MySQL ¡No hacer esto!. ¡No sólo es un método sumamente inseguro para proporcionar la contraseña, sino que no producirá los resultados esperados!. Es inseguro porque permitirá a cualquier persona observar la contraseña en este formato de texto plano, pero también porque cualquier usuario puede usar el comando 'ps' de Unix para ver los comandos que se están ejecutando y ver allí la contraseña en su formato de texto plano. Quizás sea una buena idea almacenar la contraseña en nuestro archivo de configuración my.cnf, localizado en~/.my.cnf . Si usted no sabe lo que es este archivo, lea por favor la sección previa titulada El archivo de configuración de MySQL. Seleccionado una base de datos Por supuesto, simplemente conectarse al servidor MySQL no servirá de mucho. Seguramente se querrá seleccionar una base de datos para trabajar sobre con ella. Esto se puede hacer de dos maneras: Una de ellas es incluir el nombre de la base de datos al ejecutar el comando mysql. Por ejemplo, para conectarse al servidor MySQL y seleccionar al mismo tiempo la base de datos es: shell> mysql -u root -p mibasededatos Tal vez cause algo de confusión en algunos lectores, ya que parece que se proporciona la palabra "mibasededatos" como la contraseña 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 dirigirán hacia la base de datos hipotética 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 están corriendo (ejecutando) dentro de MySQL. La sintaxis general es: shell> mysqladmin [opciones] comando(s) www.mysql-hispano.org 6 of 13
  • 8. Introducción a MySQL Dónde [opciones] puede ser toda una serie de opciones usadas en conjunción 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 conjunción con el programa de mysqladmin. Para demostrar como son usadas estas opciones, a continuación vamos a decirle a mysqladmin que necesitamos crear una base de datos llamada widgets, la cuál será usada a través del resto de este artículo para ver otras funciones útiles de MySQL. Una base de datos se crea como sigue: shell> mysqladmin -u root -p create widgets Enter Password: Después de la ejecución, mysqladmin creará la base de datos y regresará el shell del sistema. Típicamente, 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 sección. Lecturas adicionales en la documentación de MySQL (en inglés): 14.5 Administering a MySQL Server Asegurando una base de datos La seguridad debe ser lo primero que debe venir a la mente de un administrador de MySQL después de crear una base de datos. Como se discutió en la sección "Las tablas de privilegios", asegurar una base de datos consiste en hacer modificaciones a las tablas que se encuentran en la base de datos llamada mysql. En esta sección, el lector aprenderá a asegurar la base de datos widgets que se creó anteriormente. Antes de hacer esto, se va a realizar un breve resumen de cómo son modificadas las tablas de privilegios. Hay dos métodos usados para modificar las tablas de privilegios. El primero es a través del uso de las sentencias típicas de SQL tales como INSERT, UPDATE, y DELETE. Sin embargo el uso de este método ha sido depreciado para introducir el segundo método, el cual involucra el uso de los comandos especiales GRANT yREVOKE. Por lo tanto, sólo este método se discutirá a continuación. El comando GRANT La función 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
  • 9. Introducción a MySQL Una comprensión de cómo trabaja el comando GRANT se obtiene mejor a través 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 vía el localhost usando la contraseña ilovewidgets. Hay que tener presente que sólo se otorgan privilegios de conexión, no se permitirá que el usuario haga nada en el servidor MySQL. Vamos a proseguir cambiándonos a la base de datos mysql y ejecutando la siguiente consulta: mysql> SELECT * FROM user; Nótese que la fila conteniendo el usuario widgetAdmin tiene valores N para todos los demás privilegios. Esto es bueno, puesto que la tabla user contiene privilegios de carácter 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 están 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 fácilmente 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 tendría que usar el comando GRANT de la siguiente manera: mysql>GRANT SELECT, INSERT, UPDATE, DELETE ->ON widgets.* TO widgetAdmin@localhost; Después de la ejecución 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 ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN DELETE PROCESS UPDATE DROP REFERENCES USAGE www.mysql-hispano.org 8 of 13
  • 10. Introducción a MySQL Para ver los nuevos privilegios que han sido asignados, se puede ejecutar la siguiente consulta: mysql> SELECT * FROM db; Nótese 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 aún no existe cuando se ejecute esta consulta, tanto la tabla "user", como la tabla "db" serán 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 sección. 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, quizás la mejor manera de entender realmente cómo funciona este comando es experimentado con varios ejemplos. Asumiendo que el administrador tiene la necesidad de revocar el privilegio DELETE que había 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 conexión), é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
  • 11. Introducción a MySQL ¡Mientras esto tendría como resultado que sean revocados todos los privilegios del usuario widgetAdmin, éste no borraría 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 documentación de MySQL (en inglés): 7.34 Grant and Revoke Syntax Respaldos de bases de datos El concepto final discutido en este tutorial es uno verdaderamente importante: respaldos de datos. En esta sección se discuten dos métodos de hacer respaldos de datos y de las estructuras de las bases de datos MySQL, los comandos mysqldump y mysqlhotcopy. 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 método más eficiente para crear respaldos (mysqlhotcopy se describe a continuación), é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, sólo una de ellas, o incluso ciertas tablas de una base de datos dada. En esta sección se ilustra la sintaxis involucrada con varios posibles escenarios, seguida con unos pocos ejemplos. Usando el comando mysqldump para respaldar sólo 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 Usando mysqldump para respaldar varias bases de datos: shell> mysqldump [opciones] --databases [opciones] nombre_bd1 nombre_bd2... www.mysql-hispano.org 10 of 13
  • 12. Introducción a MySQL Usando mysqldump para respaldar todas las bases de datos: shell> mysqldump [opciones] --all-databases [opciones] Las opciones pueden ser vistas ejecutando el siguiente comando: shell> mysqldump --help - 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, quizás se requiera respaldar únicamente los datos, esto es logrado al incluir la opción --no-create-info, lo que significa que no se creen los datos relativos a la creación de las tablas. shell>mysqldump -u root -p --no-create-info widgets Otra variación es respaldar únicamente la estructura de las tablas, esto es logrado al incluir la opción --no- data, que significa la no creación 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 opción "--opt". Esto nos dará un respaldo optimizado de los datos que tendrá como resultado un tiempo más rápido de lectura cuando se quieran cargar los datos en otro servidor MySQL. Mientras mysqldump proporciona un método conveniente para respaldar datos, hay un segundo método, el cuales más rápido, y más eficiente. Esto se describe en la siguiente sección. mysqlhotcopy El comando mysqlhotcopy es un script de Perl que usa varios comandos SQL y del sistema para respaldar una base de datos. Más específicamente éste bloquea las tablas, limpia las tablas, hace una copia, y desbloquea las tablas. Aunque este sea el método disponible más rápido para respaldar una base de datos MySQL, éste se limita a respaldar sólo las bases de datos que residen en la misma máquina en la cual está siendo ejecutado el comando mysqlhotcopy. www.mysql-hispano.org 11 of 13
  • 13. Introducción a MySQL El comando mysqlhotcopy puede ser ejecutado para respaldar una base de datos, varias bases de datos, o sólo las bases de datos cuyo nombre coincida con una expresión regular. En esta sección, se muestra la sintaxis involucrada con cada posible escenario seguida de unos pocos ejemplos. Usando mysqlhotcopy para respaldar sólo una base de datos: shell> mysqlhotcopy [opciones] nombre_bd /ruta/nuevo/directorio Usando mysqlhotcopy para respaldar varias bases de datos: shell> mysqlhotcopy [opciones] nombre_bd1.. nombre_bdN /ruta/nuevo/directorio Usando mysqlhotcopy para respaldar sólo las tablas de una base de datos cuyo nombre coincida con una expresión 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 año. Si se desean respaldar las tablas relativas al año "2000", el comando mysqlhotcopy tendría que usarse como sigue: shell> mysqlhotcopy -u root -p widgets./^.+('2000')$/ /usr/mysql/backups En el ejemplo de arriba, la expresión /^.+('2000')$/ le dice a mysqlhotcopy que respalde sólo las tablas cuyo nombre finalice con la cadena "2000". www.mysql-hispano.org 12 of 13
  • 14. Introducción a MySQL Lecturas adicionales en la documentación de MySQL (en inglés): 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 básica 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 más rápida de llegar a sentirse cómodo con MySQL. La próxima vez, hecharemos un vistazo en algunos detalles de configuración, enfocándonos en el archivo my.cnf, que fué introducido a principios de este tutorial. www.mysql-hispano.org 13 of 13