Mostrando entradas con la etiqueta MYSQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta MYSQL. Mostrar todas las entradas

ACCESO REMOTA A MYSQL

Posted: martes, 17 de septiembre de 2013 by Skuarch in Etiquetas: , ,
0


Para poder entrar a mysql desde cualquier computadora como root tenemos que seguir estos pasos.

1.- entrar a la base de datos podria ser de esta forma
mysql -uroot -p
2.- usar la base de datos mysql
use mysql 
3.- borrar los usuarios que no tengan nada
delete from user where user='';
4.- actualizar los host con un "%"  a los usuario que tengan localhost
update user set host='%' where host='localhost';
5.- actualizamos el password al usuario root
update user set password=PASSWORD('myPassword') where user='root';
6.- reiniciamos los privilegios
flush privileges;
7.- editar el archivo que esta en /etc/mysql/my.cnf con tu editor favorito y buscar la linea bind-address            = 127.0.0.1 y cambiarel 127.0.0.1 por 0.0.0.0

[opcional]
Poner el password con la encriptacion anterior de mysql, algunos clientes de mysql siguen usando la encriptacion antigua de mysql
update user set password=old_password('myPassword') where user='root';
y despues reiniciar los privilegios
flush privileges;

Un nivel bajo de seguridad es cambiar el puerto de mysql que por default es el 3306, como abrimos el acceso al usuario root desde cualquier maquina es recomendable hacer esto pero solo es un nivel basico de seguridad.

Para cambiar el puerto de mysql solo se edita el archivo my.cnf que esta en /etc/mysql y se cambia la linea port = 3306 por el puerto que quieras.

CONEXION ORIENTADA A OBJETOS PHP Y MYSQL

Posted: lunes, 5 de marzo de 2012 by Skuarch in Etiquetas: , , , ,
0




Como todos sabemos las ventajas de la programacion orientada a objectos es poder reutilizar el codigo, aqui les muestro como hacer una clase en PHP para conectarse a la base de datos, tambien se creara una capa superior a la conexion para poder reutilizar nuestro codigo.

La clase no sera un singleton, debido a que si en cualquier momento se requiere cambiar de servidor de base de datos o se utilizen varias conexiones a diferentes bases de datos, el singleton no nos funcionaria.

Unos de los principios de la clase para conectarse es que pueda ser utilizada por cualquiera, recibira todos las parametros necesarios para crear la conexion y como servidor de base de datos se utiliza MySQL.


class ConnectionDatabase {

    private $user;
    private $password;
    private $database;
    private $server;
    private $link;
    private $result;

    //===================================================================
function __construct($user, $password, $database, $server) {
$this->user = $user;
$this->password = $password;
$this->database = $database;
$this->server = $server;
} // end __construct


Primero declararemos las variables y en el contructor recibimos los parametros necesarios para inicializar las variables, como puedes ver con esto, esta clase se puede conectarse a cualquier servidor.



//===================================================================
private function connect(){

if(isset($this->link)){

$this->link = mysql_connect($this->server,$this->user,$this->password) or die(mysql_error());
$this->selectDatabase();

}

return $this->link;

} // end connect


//===================================================================
private function selectDatabase(){

mysql_select_db($this->database,$this->link) or die(mysql_error());

}


Estos metodos son privados por que los demas metodos lo utilizaran, entonces no tiene caso que sea publico.

//===================================================================
public function executeQuery($query){

$this->result = mysql_query($query,$this->link);

return $this->result;

}


Este metodo si es publico, puede ejecutar cualquier query que me mandes, insert, update o select.

//===================================================================
public function fetchArray($query){

$fetchArray = null;          
        $this->result = $this->query($query);
        while($array = mysql_fetch_array($this->result)){              
        $fetchArray[] = $array;
        }
       
         $this->disconnect();
        return $fetchArray;

}


Este metodo tambien es publico y si lo observas tiene un while en donde llena un array para poderlo regresar, el array que regresa lo puedes recorrer en un foreach.


//====================================================================
private function disconnect(){

mysql_close($this->link);

}

//====================================================================
private function freeResult(){

mysql_free_result($this->result);

}

} //end class
Estos son los respectivos metodos para liberar y cerra la conexion que tambien son privados




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

SELECT UPDATE crear un update con un select que regrese mas de un registro en mysql

Posted: viernes, 28 de enero de 2011 by Skuarch in Etiquetas: , , ,
0




El update por si mismo solo actualiza un registro, pero con esta consulta puedes actualizar varios registros utilizando un select anidado

si la tabla que se desea actulizar no tiene un campo que se llame igual a la tabla del select anidado se puede utilizar AS para ponerle el mismo nombre


(SELECT campo1 AS campoConLosDatosQueNecesito, id2 AS id FROM otraTable) AS selectAnidado


Al SELECT tambien se le debe de poner un nombre.

Para utilizar USING se debe de poner el campo con el mismo nombre en las dos tablas y obviamente deben de tener los mismos datos (el id puede ser de ayuda)

­

UPDATE mi_tabla
LEFT JOIN
(SELECT campo1 AS campoConLosDatosQueNecesito, idTabla AS id FROM otraTabla) AS selectAnidado
USING (id)
SET campo = selectAnidado.campoConLosDatosQueNecesito
WHERE id = "cualquierCosa";



la palabra reservada USING debe de tener como parametro el campo que coinside en las dos tablas

Todo lo demas es igual que en cualquier update

INSTALAR APACHE PHP Y MYSQL EN UBUNTU CON APT-GET

Posted: domingo, 7 de febrero de 2010 by Skuarch in Etiquetas: , , , , ,
1

Estos son los comandos para instalar un servidor web con mysql, apache y php5

$ sudo apt-get install apache2
$ sudo apt-get install mysql-server-5.5
$ sudo apt-get install php5
$ sudo apt-get install libapache2-mod-php5
$ sudo apt-get install php5-gd
$ sudo apt-get install php5-mysql

$ sudo apt-get install php5-curl

si quieres todo en una sola linea
$ sudo apt-get install apache2 mysql-server-5.5 php5 libapache2-mod-php5 php5-gd php5-mysql php5-curl -y -f

reinicias apache
$ sudo service apache2 restart

listo con eso tenemos el servidor listo para trabajar, si el comando te manda algun error solo checa las versiones ese podria ser el error.

NUMERAR LOS REGISTROS DE UNA CONSULTA

Posted: viernes, 10 de julio de 2009 by Skuarch in Etiquetas: , ,
0

Con este pequeño ejemplo que me encontre en internet se puede agregar una columna mas con los numeros de la consulta


SELECT @rownum:=@rownum+1 AS rownum, nombre_tabla.* FROM (SELECT @rownum:=0) r, nombre_tabla;


eso es todo !!!

fuente

http://cambrico.net/mysql/equivalente-del-rownum-de-oracle-en-mysql

TRIGGER SENCILLO EN MYSQL

Posted: sábado, 31 de enero de 2009 by Skuarch in Etiquetas: , , ,
0

Los trigger en mysql esta disponibles desde la version 5.0.2 y superiores, los triggers son objetos de la base de datos el cual esta ligado a una tabla y este se ejecuta cuando pasa alguna accion (INSERT,UPDATE,DELETE) en el ejemplo siguiente se muestra un ejemplo.

DELIMITER |

CREATE TRIGGER nombreTrigger BEFORE INSERT ON nombreTabla
FOR EACH ROW
BEGIN

INSERT INTO nombreTabla SET campo1 = NEW.nuevoCampo1; //tienes que tener cuidado aqui
DELETE FROM nombreTabla WHERE campo3 = NEW.campo1;
UPDATE nombreTabla SET cmpo4 = b4 + 1 WHERE campo4 = NEW.campo1;

END
|

DELIMITER ;


Lo que podemos observar de este sencillo codigo es que se necesita de un delimitador " | "
con la sentencia " CREATE TRIGGER " seguido del nombre se crea el trigger, " BEFORE o AFTER " esto se coloca cuando se quiere que se ejecute una funcion, antes o despues de alguna accion (INSERT,UPDATE,DELETE) despues se coloca " ON " y el nombre de la tabla con la que se quieres que se dispare el trigger, " FOR EACH ROW " para cada fila, despues vemos que se realizan un insert, un update y un delete, pero lo que se resalta de esto es " NEW.campo1 ", se pueden utilizar dos palabras " NEW u OLD" si el trigger esta definido para que se ejecute con BEFORE se utilizara NEW, si es AFTER se utilizara OLD, esto lo que quiere decir es que, si se usa NEW el campo todavia no se a insertado y lo contrario con OLD, dicho con otras palabras se tomaria el campo antes o despues de la accion, " DELIMITER ;" debe de llevar un espacion antes del " ; ".

Espero que te sirva, si no buscale por otro lado.

4




Este es un pequeño ejemplo de como crear un Stored Procedure en mysql que no regrese nada.

Paso 1:
Como es comun en la programacion se tienen muchos errores y para crear un sp (Stored Procedure) se realiza a base de prueba/error, para eso ponemos en la primer linea esto:

DROP PROCEDURE IF EXISTS mysp;


el nombre del stored procedure es mysp

Paso 2:
se tiene que utilizar un delimitador, yo utilizo //
DELIMITER //

este delimitidor mas adelante se debe de cerrar.
con la sentencia
CREATE PROCEDURE mysp ()

indicamos la creacion del sp, el sp debe de tener un cuerpo y un final para eso usamos las etiquetas BEGIN y END

Entonces ya temenos esta parte de codigo

DELIMITER //
CREATE PROCEDURE mysp ()

BEGIN

END

//
DELIMITER ;#aqui es donde se cierra el delimitador


La instruccion DELIMITER ; esta ultima instruccion debe de tener un espacio antes del ";"

Paso 3:
Declaracion y asignacion de variables, la declaracion de variables dentro de un sp es de la siguiente forma.

DECLARE var1 INT DEFAULT 0; #variables enteras
DECLARE var2 VARCHAR(15); #variables varchar tambien le podemos decir strings


La asignacion se realiza de esta manera:

SET vat1 = "hola";


Tambien existe otra forma de aisgnarles valores que se ve mas adelante.

Paso 4: (opcional)
Podemos tener un ciclo dentro del sp de la siguiente forma.

WHILE v1 <= 10 DO
SET v1 = v1 +1;
END WHILE;


Llenar variables con resultados de un select

SELECT campo INTO variable FROM tabla LIMIT 1;


Para llenar las variables de este tipo el resultado del select solo tienes que regresar un registro, de lo contrario tendriamos un error, podemos llenar varias variables dentro del mismo select

SELECT campo1,campo2,campo3 INTO variable1,variable2,variable3 FROM tabla LIMIT 1;


Nuestro codigo hasta el paso 4 se veria asi:

DROP PROCEDURE IF EXISTS mysp;

DELIMITER //
  CREATE PROCEDURE mysp ()

   BEGIN
    DECLARE var1 INT DEFAULT 0;
    DECLARE var2 VARCHAR(15);

    WHILE var1 <= 10 DO

     SELECT campo INTO var2 FROM tabla LIMIT 1;
     SET var1 = var1 + 1; #var1 +=

    END WHILE;

   END

//
DELIMITER ;


para llamar al procedure se utiliza:

call mysp();


Eso es todo para un ejemplo sencillo !!!!