Páginas

domingo, 1 de febrero de 2009

Mysql en Gentoo

Mysql es un servidor de base de datos.



Para realizar una instalacion optimizada:

hypatia gentoo # emerge -pv mysql

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] dev-db/mysql-5.0.90-r2  USE="berkdb community perl ssl -big-tables -cluster -debug -embedded -extraengine -latin1 -max-idx-128 -minimal -profiling (-selinux) -static -test" 0 kB

Agrego al archivo /etc/portage/package.use

dev-db/mysql  USE="berkdb community perl ssl -big-tables -cluster -debug -embedded -extraengine -latin1 -max-idx-128 -minimal -profiling (-selinux) -static -test"

Instalo Mysql:
hypatia gentoo # emerge mysq


Esta versión permite ejecutar la configuración del servidor mysql instalado y la inicialización de la contraseña root.
emerge --config =dev-db/mysql-[versión]
hypatia gentoo # emerge --config =dev-db/mysql-5.0.90-r2


Configuring pkg...

 * Please provide a password for the mysql 'root' user now,
 * or in the MYSQL_ROOT_PASSWORD env var.
 * Avoid ["'\_%] characters in the password
    >
 * Retype the password
    >
 * Creating the mysql database and setting proper
 * permissions on it ...
 * Starting mysqld ...                                                     [ ok ]
 * Setting root password ...                                              [ ok ]
 * Loading "zoneinfo", this step may require a few seconds ... ...        [ ok ]
 * Stopping the server ...
 * Done

Para iniciar o detener el servidor se puede utilizar el comando:
/etc/init.d/mysql start/stop
MySQL comandos simples

MySQL es una de las RDBM's mas utilizadas en el mundo del Open Source.

Necesitas especificar un usuario:
$ mysql -u root -p (debe poner el password que le pidió en la instalacion)


Una vez adentro, el prompt cambiará a el de mysql lo que significa que está listo para recibir comandos:

mysql>

Crear una nueva base de datos:

CREATE DATABASE nombre_bd;

Crear tabla empleado

CREATE TABLE empleado(id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,cedula varchar(13),nombre varchar(30),apellido varchar(40),direccion varchar(50),telefono varchar(12),nacimiento varchar(10),entrada varchar(10),salario int(8),extras int(8),puesto varchar(20),D_tss int(6),salida varchar(10),vacaciones varchar(10),nss varchar(8));

mysql> CREATE TABLE nombre_tabla
(campo_1 TIPO(TAMAóO), field2_name TIPO(TAMAóO));
ejemplo:
mysql> CREATE TABLE alumnos (nombre VARCHAR(35),
sexo CHAR(1), fecha_nacimiento DATE);

Insertar un nuevo registro en la tabla empleado:

INSERT INTO empleado (`id`, `cedula`, `nombre`, `apellido`, `direccion`, `telefono`, `nacimiento`, `entrada`, `saladio`, `extras`, `puesto`, `D_tss`, `salida`, `vacaciones`, `nss`) VALUES (3,"059-0020564-1","Cesar","Luna Frias","Rabo de Chivo, Castillo","829-6754538","","17-07-2007",5000,3000,"Maestro bizcocho",114,"","17-07-200x","6254137-8");

Insertar un nuevo registro en la tabla alumno:
mysql>INSERT INTO alumnos (`nombre`, `sexo`, `fecha_nacimiento`)
VALUES ("Belia Romero", "F", "13-09-1983");

Ver las bases de datos existentes
mysql> SHOW DATABASES;

Seleccionar una Base de Datos:<> USE nombre_basededatos;

Ver las tablas en la base de datos
mysql> SHOW TABLES;

Ver la información de la estructura de la tabla
mysql> DESCRIBE nombre_tabla;

Ver la información guardada en la tabla
mysql>SELECT * FROM alumnos;

mysql>SELECT nombre, fecha_nacimiento
FROM alumnos
WHERE sexo = 'F' AND name LIKE '%belia%';

mysql>SELECT alumnos.nombre, materias.nombre
FROM alumnos, materias
WHERE sexo = 'F' AND materias.id_alumno = alumnos.id_alumno
LIMIT 0, 9 GROUP BY alumnos.id_alumno;

Modificar la información de un registro

UPDATE empleado SET vacaciones="04-09-200x" WHERE vacaciones="";
mysql> UPDATE nombre_tabla SET campo = "new_value" WHERE campo = "value";

ejemplo:
mysql> UPDATE alumnos
SET fecha_nacimiento = '21-04-1983' WHERE id_alumno = '1';

No inclur campos repetidos de una tabla:
mysql> SELECT DISTINCT campo FROM table;

ejemplo:
mysql> SELECT DISTINCT nombre FROM materias;

Ordenar los resultados de un Query en forma ascendente (Menor a Mayor)
mysql> SELECT campo1, campo2, campo3 FROM tabla ORDER BY campo1

ejemplo:
mysql> SELECT id_alumno, nombre FROM alumnos ORDER BY id_alumno;

Ordenar los resultados de un Query en forma descendente (Mayor a Menor)
mysql> SELECT campo1, campo2, campo3 FROM tabla ORDER BY campo1 DESC;

ejemplo:
mysql> SELECT nombre, promedio FROM alumnos ORDER BY promedio DESC;

Contar el número de registros en la tabla
mysql> SELECT count(campo) FROM tabla;

ejemplo:
mysql> SELECT count(id_alumno) AS total_alumnos FROM alumnos;
mysql> SELECT salon, count(id_alumno) as total_por_salon
FROM salones_alumno
GROUP BY salon
ORDER BY total_por_salon;


Copiar y restaurar base de datos de MySQL


fuente: http://yvoictra.wordpress.com/2008/02/20/copiar-y-restaurar-base-de-datos-de-mysql/

Lo primero que hay que hacer es hacer un backup de la base de datos, para ello usaremos el comando mysqldump.

$ mysqldump --add-drop-table -u root -p dbname >~/db_name.sql

donde…

root, es el usuario de la base de datos.

dbname, es el nombre de la base de datos que queremos usar.

y ~/db_name.sql es la ruta del fichero donde se guardará el backup.

Una vez hecho esto, podemos restaurar la base de datos, por ejemplo, en otra máquina. Para ello primero arrancamos mysql:

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.45-Debian_1ubuntu3.1-log Debian etch distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database dbname_copy
mysql> use dbname_copy

recuerda que “mysql>” es el prompt que interpreta los comando de mysql..

ahora para restaurarla usamos el siguiente código:

mysql> source ~/db_name.sql

Y ya estaría copiada. Estos últimos pasos también se podrían haber hecho de la siguiente forma:

mysql -u root -p dbname < ~/db_name.sql


Referencia de uso de 'ALTER TABLE' 


ALTER TABLE ejemplo ENGINE = InnoDB
Cambiar el tipo de motor (engine) de la tabla 'ejemplo'
ALTER TABLE personas RENAME usuarios
Cambia el nomnbre de la tabla 'personas' a 'usuarios'
ALTER TABLE ejemplo AUTO_INCREMENT=1000
En la tabla 'ejemplo' cualquiera que sea la columna que tenga 'AUTO_INCREMENT' en sus propiedades (solo puede haber una), los nuevos registros comenzarán a partir de '1000' o cualquier número indicado, no es posible utilizar un valor ya existente.
ALTER TABLE ejemplo CONVERT TO CHARACTER SET latin1
La tabla 'ejemplo' ahora almacenará sus valores en base al juego de caracteres 'latin1' (iso-8859-1).
OPERACIONES CON DROP
ALTER TABLE ejemplo DROP COLUMN nombre
Elimina la columna 'nombre' de la tabla 'ejemplo'.
ALTER TABLE ejemplo DROP COLUMN nombre, DROP COLUMN paterno
Elimina más de una columna.
ALTER TABLE ejemplo DROP COLUMN nombre, DROP COLUMN paterno
Elimina más de una columna.
ALTER TABLE ejemplo DROP INDEX usuario
Elimina el índice 'usuario'.
ALTER TABLE ejemplo DROP PRIMARY KEY
Elimina la llave primaria de la tabla 'ejemplo'
ALTER TABLE ejemplo DROP FOREIGN KEY id_usuario
Elimina de la tabala 'ejemplo' la llave foranea 'id_usuario'.
OPERACIONES CON CHANGE Y MODIFY
ALTER TABLE ejemplo CHANGE monto cantidad FLOAT(8,2)
Cambia el nombre de la columna 'monto' al nuevo nombre 'cantidad' con la definición del tipo de datos.
ALTER TABLE ejemplo CHANGE cantidad cantidad FLOAT(10,2)
Cambia solo el tipo de datos de la columna, conservando el mismo nombre.
ALTER TABLE ejemplo MODIFY cantidad FLOAT(10,2)
Cambia solo el tipo de datos de la columna, conservando el mismo nombre. (Igual que el anterior)
ALTER TABLE ejemplo MODIFY cantidad FLOAT(6,2) NOT NULL
Cambia el tipo de datos de la columna 'cantidad' y especifica que no admite nulos.
ALTER TABLE ejemplo MODIFY paterno VARCHAR(30)
Modifica el tamaño de la columna 'paterno'.
ALTER TABLE ejemplo MODIFY correo CONVERT TO CHARACTER SET utf8
Es posible convertir solo una columna, en este caso 'correo' a un juego de caracteres distinto al de todo el resto de la tabla.
OPERACIONES CON ADD
ALTER TABLE ejemplo ADD fecha DATE
Añade una columna llamada 'fecha' del tipo 'DATE' al final de todas las demás existentes.
ALTER TABLE ejemplo ADD INDEX(categoria)
Añade un índice a la columna 'categoria'.
ALTER TABLE ejemplo ADD INDEX(categoria), ADD PRIMARY KEY(clave)
Añade un índice a la columna 'categoria' y además crea la llave primaria en la columna 'clave'.
ALTER TABLE ejemplo ADD UNIQUE(email)
Añade a la columna 'email' un índice del tipo único, no puede haber dos iguales.
ALTER TABLE ejemplo ADD consecutivo BIGINT AUTO_INCREMENT, ADD INDEX(consecutivo)
Añade la columna 'consecutivo' con la característica de auto incremento y además genera un índice sobre la misma.
ALTER TABLE ejemplo ADD materno VARCHAR(20) AFTER paterno
Añade la columna 'materno' después de la columna 'paterno'.
ALTER TABLE ejemplo ADD id INT FIRST
Añade la columna 'id' en primer lugar con respecto a las existentes.
ALTER TABLE usuarios ADD FOREIGN KEY(id) REFERENCES entradas(id_user)
Añade un 'Foreign key' en la columna 'id' de la tabla 'usuarios' que apunta a la columna 'id_user' de la tabla 'entradas'.

Instalando apache2 mysql php phpmyadmin en Gentoo Linux actualmente, no es necesario tocar ficheros de configuración excepto:

# vi /etc/apache2/httpd.conf
ServerName localhost

# vi /etc/php/apache2-php5.3/php.ini
cp /var/www/localhost/htdocs/phpmyadmin/config.sample.inc.php /var/www/localhost/htdocs/phpmyadmin/config.inc.php
vi /var/www/localhost/htdocs/phpmyadmin/config.inc.php

Agregar -D php5 al archivo /etc/conf.d/apache2
# vi /etc/conf.d/apache2

APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5"

Después de instalar apache2, mysql, php y phpmyadmin (normalmente no es necesario pero puede pasar, me sucedió en una instalación en la distro Debian Squeeze), que el enlace lo tengamos que crear a mano:

#  ln -s /usr/share/phpmyadmin/.
Desde el navegador.
http://localhost/phpmyadmin


Linux es genial!

No hay comentarios:

Publicar un comentario