MySQL (mysql.com, paquetes mysql-server php5-mysql) es una base de datos con arquitectura cliente-servidor, por lo que necesita:
- un servidor (mysqld) que escuche en el puerto 3306 TCP (por defecto) que atienda las consultas.
- un cliente (como mysql), que permita conectar con el servidor.
Equivalencias en Windows: MS-SQL Server.
MySQL puede manejarse de varias maneras:
- desde consola, utilizando el cliente MySQL mysql.
- mediante algún interfaz web como phpMyAdmin (necesita Apache y PHP). Esta es la opción más recomendable, manejar la base de datos vía web usando páginas web dinámicas.
- mediante algún frontal gráfico como Knoda o OpenOffice.org.
Recursos
- Manual de Referencia – MySQL: dev.mysql.com/doc/refman/5.0/es/
- Manual MySQL- conclase.net: mysql.conclase.net/curso/
Configuración de MySQL
- El script de inicio que inicia el demonio de MySQL es /etc/init.d/mysql
- Los archivos de configuración están en el directorio /etc/mysql
- Las bases de datos están en /var/lib/mysql/<base_de_datos>
- Los usuarios de MySQL son independientes de los usuarios del sistema: el usuario root
de MySQL no es el usuario root de Linux. Con los usuarios de MySQL haremos lo siguiente:
- mysql: crearemos este usuario con todos los permisos: será el que utilicemos en nuestros scripts y para acceder a las bases de datos.
- root: existe por defecto y sin contraseña. Lo borraremos.
Atención
¡Antes de borrar el usuario root de MySQL crear el usuario mysql!
- debian-syst-main: existe por defecto, con contraseña, lo utiliza MySQL en los scripst de inicio y parada. Ni tocarlo, es un usuario de sistema
Manejar MySQL desde consola
Para conectar con el servidor MySQL usaremos el comando mysql, cuya sintaxis es:
$ mysql -h <host> -u <usuario> datababse=<base_de_datos> -p |
- -h: host donde está el servidor (por defecto localhost).
- -u: usuario.
- -p: password.
- -P: puerto.
- database=: nombre de la base de datos a abrir.
Por ejemplo (el prompt de MySQL nos indica está listo para recibir comandos):
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 6 to server version: 5.0.18-Debian_9-log Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> |
Como vemos, hemos entrado como root sin contraseña. Usaremos el comando SHOW para ver las bases de datos existentes:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 3 rows in set (1.32 sec) |
La base de datos mysql contiene la información de los privilegios de los usuarios de MySQL.
Para poner contraseña a root haremos:
mysql> SET PASSWORD FOR root@localhost=PASSWORD('root_clave'); |
Nos desconectamos ejecutando:
mysql> quit Bye |
Intentamos entrar como antes pero no nos deja:
$ mysql -u root ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) |
Ahora necesitamos contraseña:
$ mysql -u root -p Enter password: ****** mysql> |
Veamos un pequeño ejemplo:
- crear la base de datos animales:
mysql> CREATE DATABASE animales; Query OK, 1 row affected (1.02 sec)
- consultar las bases de datos existentes:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | animales | | mysql | +--------------------+ 4 rows in set (1.02 sec)
- abrir animales:
mysql> USE animales; Database changed
- crear la tabla mascotas:
mysql> CREATE TABLE mascotas(nombre VARCHAR(20), especie VARCHAR(20)); Query OK, 0 rows affected (0.89 sec)
- consultar las tablas de animales:
mysql> SHOW TABLES; +---------------------+ | Tables_in_animales | +---------------------+ | mascotas | +---------------------+ 1 row in set (0.00 sec)
- consultar la estructura de mascotas:
mysql> DESCRIBE mascotas; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | nombre | varchar(20) | YES | | NULL | | | especie | varchar(20) | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 2 rows in set (0.14 sec)
- para terminar, nos desconectamos:
mysql> quit
Ejemplo para comprobar PHP y MySQL
Una vez creada la base de datos en MySQL, vamos a comprobar que podemos acceder a ella mediante el navegador utilizando el servidor Apache y PHP. Para ello vamos a crear una página web (/var/www/conectar.php) que nos diga si se consigue una conexión con nuestra base de datos en MySQL, que contendrá lo siguiente:
<html> <body> <?php function Conectarse() { if (!($link=mysql_connect("localhost","root","root_clave"))) { echo "Error conectando a la base de datos."; exit(); } if (!mysql_select_db("animales",$link)) { echo "Error seleccionando la base de datos."; exit(); } echo "Conexion con la base de datos conseguida.<br>"; return $link; } $link=Conectarse(); mysql_close($link); echo "Conexion con la base de datos cerrada.<br>Fin."; ?> </body> </html> |
Tecleamos en el navegador la dirección http://127.0.0.1/conectar.php y, si todo está correcto, obtendremos:
Manejar MySQL mediante phpMyAdmin
phpMyAdmin (phpmyadmin.net, paquete phpmyadmin) es un programa escrito en PHP que nos proporciona una interfaz web para manejar MySQL (necesita Apache y PHP). Permite crear bases de datos, tablas, borrar o modificar datos, añadir registros, hacer copias de seguridad, etc.
Equivalencias en Windows: MS-SQL Server Management.
- Iniciar phpMyAdmin
Iniciaremos phpMyAdmin tecleando en el navegador la dirección http://localhost/phpmyadmin y logueándonos como root (contraseña root_clave). Apache servirá /usr/share/phpmyadmin mediante el enlace /var/www/phpmyadmin o mediante una directiva Alias.
- Crear un nuevo usuario para MySQL
Lo primero que haremos será crear el usuario mysql con contraseña mi_clave, que será el que utilicemos para acceder a las bases de datos y en nuestros scripts. Para ello pulsaremos Privilegios / Agregar nuevo usuario, le daremos todos los permisos marcando todas las casillas que aparecen en Privilegios globales y le daremos acceso desde Cualquier servidor si pensamos acceder en remoto (de lo contrario seleccionaremos Local).
Nota
Siempre que se hagan cambios en los usuarios o en los permisos, debemos volver a cargar los privilegios desde Reload privileges para que los cambios sean efectivos.
- Configurar phpMyAdmin
Los archivos de configuración de phpMyAdmin están en el directorio /etc/phpmyadmin. Editaremos el archivo /etc/phpmyadmin/config.inc.php y descomentaremos las siguientes líneas:
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method $cfg['Servers'][$i]['user'] = 'mysql'; // MySQL user $cfg['Servers'][$i]['password'] = 'mi_clave'; // MySQL password
Para que la sesión no caduque a los 1800 segundos de inactividad (30 minutos, valor por defecto), cosa francamente molesta, añadiremos la siguiente línea:
$cfg['LoginCookieValidity'] = 7200; // Validity of cookie login (seconds)
- Configurar los scripts para el nuevo usuario
En nuestros scripts PHP que trabajen con MySQL usaremos el usuario y contraseña que hemos creado, de tal forma que para conectar con MySQL haremos:
mysql_connect("127.0.0.1","mysql","mi_clave");
- Configurar Apache para phpMyAdmin
Editaremos el archivo de configuración de Apache /etc/apache/httpd.conf y añadiremos una directiva Directory en la que permitimos que la configuración del directorio /usr/share/phpmyadmin se defina en el archivo /usr/share/phpmyadmin/.htaccess:
<Directory /usr/share/phpmyadmin/> AllowOverride All </Directory>
Exportar e importar bases de datos MySQL grandes
Habitualmente para administrar una base de datos MySQL usaremos phpMyAdmin (phpmyadmin.net) pero en ocasiones, si nuestra base de datos es grande, nos encontraremos con problemas a la hora de exportar e importar datos por las limitaciones que PHP impone al tamaño máximo de los ficheros importados o la duración del tiempo de ejecución de los scripts.
En estos casos recurriremos a la consola utilizando dos comandos, mysqldump para volcar la base de datos en un fichero de texto y mysql para importar los datos. Lo haremos en dos pasos:
- Primero volcaremos la base de datos en un fichero de texto usando el comando
mysqldump, siendo los parámetros el usuario de MySQL (USER),
el servidor (SERVER) y el nombre de la base de datos a exportar (NAME).
Si nuestra base de datos tiene gran cantidad de tablas usaremos la opción
–skip-lock-tables para evitar el error Can’t open file when using LOCK TABLES:
$ mysqldump --skip-lock-tables -u USER -p -h SERVER NAME > NAME.sql Enter password:
- Para importar los datos usaremos mysql, teniendo los parámetros el mismo significado:
$ mysql -u USER -p -h SERVER NAME < NAME.sql Enter password:
Este método manual nos será de gran utilidad cuando tengamos que migrar de servidor grandes bases de datos, ya que nos permite evitar las limitaciones de PHP.
Gracias… muchas gracias.. fue de extrema ayuda
exelente aporte, pero cuando me meto a la consola, me meto al mysql, pero de ahi intento crear la BD
mysql> create database miBASED
>(eso, no paso nada)
>(aprete enter, y nada)
>(intento salir)
>quit
>(y nada)
>exit (tampoco, ni salir , ni chao, ni adios, nada)
si sabes por que me falta, el servidor apache funciona y php tambien esta instalado (php5)
eso vale
pablo, los comandos terminan con ‘punto y coma’ (;)…
por que cuando creo un usuario usando la sentencia
CREATE USER usuario IDENTIFIED BY ‘contraseña’
me sale el error:
consulta SQL:
CREATE USER root IDENTIFIED BY ‘dragon’
MySQL ha dicho:
#1064 – Algo está quivocado en su sintax cerca ‘USER root IDENTIFIED BY ‘dragon” en la linea 1
agradesco su respuesta a mi correo o msn, [email protected]
Gracias por el aporte, me fue de gran ayuda.
Muy buen explicado, gracias y sigue asi
Felicidades por la aportación de este manual, muchas gracias por la ayuda
Muy bueno justo lo que buscaba, uso mysql en win pero en linux estaba medio perdido
Gracias
Hola:
Me fije que cuando uno trabaja con este asunto de mysql hay que escribir todo en mayúscula y terminado en punto y comas, sino simplemente salta una linea y mustra
>
>
>
>
asi que todo en mayúscula excepto claro el nombre de tu base de datos, los campos, las tablas, etc.. los cuales no son obligatorias en mayuscula o miniscula.
Los tipos de datos tambien hay que escribirlos con mayuscula sino tampoco funcionan (Esta es mi experiencia personal usando mysql-server y Ubuntu 8.10 asique no se si en otros casos podría funcionar así o no.
Espero sirva a alguien. Saludos desde Vaparaiso, Chile.
Olvidaba que para los que no puedan salir y solo les salga
>
>
>
hay que escribir q
es decir:
>q y saldrán sin problemas
hola saludos esta muy bien todo pero lo que no entendi es como asignar la clave principal directamente desde consola
disculpen alguien me puede ayudar se los supliko de manera mas atenta porfavor ..me encargarn como trabajo final una base de datos en mysql y ke jale en internet.. debo de hacer una agenda..segun yoo asi empeze
mysql^^show database
mysql^^create database agenda_2009
mysql^^show table
mysql^^show table usuario(
mysql^^nombre VARCHAR(20), domicilio VARCHAR(20)colonia VARCHAR(20)
BUENO DE AHI NO SE KE ONDA DIGANME SI VOY BIEN O KE PEX PORFA,, KE PASO SIGUE PARA HACER LA BASE DE DATOS
Yosemite, te sale error pues no puedes crear un usuario root, debido a que este usuario es el usuario por defecto cuando instalas el MySql.
Por que cuando instale phpmyadmin, y trato de iniciarlo tecleando en el navegador localhost/phpmyadmin lo que hace es como descargarme un archivo? Ayudenme con eso
AL FIN ENCONTRÉ ALGO QUE SIRVE!!!!!
Muchisimas gracias!!!!……me has quitado 10 toneladas de encima!!!! :D
Buenos dias, será que alguno de ustedes me ayudan a crear un script o no se una base de datos, donde:
* puedan cargar las notas de un alumno y el formulario debe tener lo sigueinte.
-Nombre
-Apellido
-C.I (Cedula de Identidad)
-Semestre
-Carrera
-Notas del Primer Parcial
-Notas del Segundo Parcial
-Notas del Final
-Reparacion
* Y que cuando ellos cuando vallan a consultarlas mediante un formulario de consulta puedan hacerlo mediante su cedula. Muchas Gracias y se los agradezco con el alma, o pues si tambien me hacen un tutorial de paso a paso y disculpen la molestias y de ante mano que Dios se los pague. mi correo es [email protected]
Hola:
Esta respuesta es a la pregunta de Snyflex
<>
Creo recordar que mi me sucede cuando intento arrancar phpmyadmin sin tener iniciado el servidor web (Apache en mi caso).
Perfecto Me resulto todo bien
bua esta bueno pero necesito una lap para probar ………..
en donde lo ejecuto? en phpmyadmin? no solicita en ninguna parte una contraseña de usuario??
Se ejecuta desde la consola
para los que no sepan donde ejecutar ese comando, vean este video…. http://www.youtube.com/watch?v=e2SBqi3yw2Y
Hola compañeros,
Cuando le pongo localhost/phpmyadmin lo que me sale es un listdo del directorio donde esta el phpmyadmin ?¿?¿?¿?
¿que hice mal??
Llevo días buscando la solución pero no soy capaz de encontrarla.
Ayudénme please!!! Gracias de antemano :)
Probaste si tenes el servidor apache con php funcionando?
Si no intenta darl’e permiso al apache a la carpeta usando el chown -R `usuario` `carpeta`
usuario generalmente es www-data
pero si pones skip-lock-tables… no estarías dejando de backupear las tablas que esten bloqueadas en ese momento?
La opción –skip-lock-tables realiza un backup completo de todas las tablas, pero sin bloquearlas.
Con esta opción se evita el error Cant open file when using LOCK TABLES, pero se corre el riesgo de que si las tablas no están bloqueadas los datos pueden cambiar en medio del backup, lo que podría provocar que el backup tuviera datos inconsistentes.
Existen otras opciones para evitar ese error, como detener la aplicación mientras se hace un backup, etc. La solución más adecuada dependerá de cada caso particular.
Excelente