TUTORIAL DE STORED PROCEDURE

Posted: jueves, 23 de junio de 2011 by Skuarch in Etiquetas: , , ,
0



En esta entrada explico un stored procedure sencillo este nuevo post sobre stored procedure toma cosas mas complejas como la es crear un select con variables y asi es como empezamos.

La estructura basica para crear un stored procedure es la siguiente

#para el caso de desarrollo siempre tenemos que tener este comando
DROP PROCEDURE IF EXISTS mysp;

DELIMITER //
CREATE PROCEDURE mysp ()

BEGIN

#declaracion de variables y con DEFAULT se inicializan
DECLARE var1 INT DEFAULT 0;
DECLARE var2 VARCHAR(15);

END

//
DELIMITER ;



Para poder crear un select dinamico utilizando variables dentro de este mismo nececitamos crear un string y despues prepararlo para que sea ejecutado, de la siguente forma


SET @qry = CONCAT("SELECT * FROM tabla WHERE id = ", var1);
PREPARATE query FROM @qry;
EXECUTE query;


Con esto podemos crear un select dinamico y puede ser mas complejo.


SET @qry = CONCAT("SELECT algo INTO var2 FROM tabla WHERE id = ", var1);
PREPARATE query FROM @qry;
EXECUTE query;



Entonces nuestro stored procedure quedaria mas o menos asi


DELIMITER //
CREATE PROCEDURE mysp ()

BEGIN

#declaracion de variables y con DEFAULT se inicializan
DECLARE var1 INT DEFAULT 0;
DECLARE var2 VARCHAR(15);

SET @qry = CONCAT("SELECT algo INTO var2 FROM tabla WHERE id = ", var1);
PREPARATE query FROM @qry;
EXECUTE query;


END

//
DELIMITER ;


las variables que tienen @ como @qry son variables de usuario

EXPORTAR UNA TABLA DE MYSQL A .csv

Posted: miércoles, 22 de junio de 2011 by Skuarch in Etiquetas: , , ,
0




Con este sencillo comando puedes exportar la base de datos con todos los datos a un archivo .csv

mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\" --fields-terminated-by=,



opcionalmente puedes utilizar esto para solo guardar una tabla

SELECT *
INTO OUTFILE '/opt/tmp/products.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM products


si deseas exportar los datos con un select tienes que habilitar la opcion tmpdir y despues reiniciar mysql entonces en tu archivo de configuracion de mysql (my.cnf o my.ini) quedaria mas o menos asi

[mysqld]
tmpdir=/opt/tmp/


tienes que asegurarte de que la carpeta tenga permisos de lectura y escritura, si no los tiene pues se los das

sudo chmod 777 -R /opt/tmp


si te aparece el error MYSQL ERROR : Can't create/write to file '/opt/tmp/
pueden ser problemas de permisos en la carpeta y lo puedes solucionar cambiando de propietario la carpeta

sudo chown root:root /opt/tmp
* Asignar Permisos
sudo chmod 1777 /opt/tmp
* Reiniciar mysql
sudo service mysqld restart

INSTALAR INFOBRIGHT, BASE DE DATOS MYSQL OPTIMIZADA

Posted: martes, 21 de junio de 2011 by Skuarch in Etiquetas: , , , ,
0




Cuando se tienen bases de datos muy grandes, me refiero a unos 15 millones de datos o mas, mysql empieza a bajar el rendimiendo, claro esta que esto depende del servidor donde este corriendo mysql, para solucionar esto podemos usar infobright esta base de datos es un mysql optimizado y aqui te muestro como instalarlo en ubuntu

Para este tutorial se utilizaron los siguientes archivos
infobright-3.5.2-p1-i686-ice.deb
ubuntu server 10.10


Lo primero es instalar lo esencial para compilar
sudo apt-get install build-essential

Lo segundo que tienes que hacer este instalar el servidor nscd
sudo apt-get install nscd

abrir con el editor de texto que tu quieras el archivo /etc/nscd.conf
buscar la linea que dice
enable-cache hosts no

y cambiar el no por un yes
enable-cache hosts yes

reiniciar el servicio
sudo service nscd restart

despues vaz a la pagina de infobright y bajas el .deb
cuando instales el .deb no tienes que estar en las carpetas de /home/ /home/usuario/ /home/usuario/desktop/ ni /root en mi caso lo movi a /opt
sudo cp infobright.deb /opt/

le di permisos
sudo chmod 777 -R infobright.deb

y lo instale
sudo dpkg -i infobright.deb

despues se tiene que activar ICE (infobright comunity edition)
entramos a la siguiente ruta
cd /usr/local/infobright/

ejecutamos el script
sudo sh postconfig.sh

nos pedira que nos registremos, le decimos que no y volvemos a correr el script
sudo sh postconfig.sh

aqui nos dira si queremos cambiar algunos parametros como es el puerto y la carpeta de data y a todos les decimos que no, con esto queda activado ICE.
arrancamos el servidor de base de datos
sudo /etc/init.d/mysqld-ib start

despues le le ponemos password al usuario root
/usr/local/infobright-3.5.2-i686/bin/mysqladmin -u root password 'new-password'

accedemos a la base de datos
/usr/bin/mysql-ib -uroot -p

ponemos nuestro password y con eso ya estamos en el 90% de la instalacion
el archivo de configuracion se encuentra en
/etc/my-ib.cnf

a este archivo al ultimo le ponemos estas tres lineas
skip-host-cache
skip-name-resolve
bind-address=0.0.0.0



Posibles problemas


Access denied for user: 'root@localhost' (Using password: NO)
Para solucionar esto tienes que entrar a mysql
de la base de datos mysql y de la tabla user tienes que insertar lo siguente
use mysql

insert into user (host,user) values ('%', 'root');

despues le tenemos que poner password
update user set password=PASSWORD('elPassword') where user = 'root';

se le tiene que dar permisos
GRANT ALL ON *.* TO 'root'@'%';

con esto todo el que accede tiene permisos de hacer lo que quiera si se loguea como root
por ultimo ponemos esto
flush privileges;

reinicias el servidor y listo
sudo /etc/init.d/mysqld-ib restart