Archivo categoría MySQL

Eliminando registros duplicados de una tabla SQL usando DISTINCT ó GROUP BY.

DISTINCT es una palabra clave que usamos e nuestras consultas SQL para eliminar filas duplicadas.

SELECT DISTINCT columna FROM tabla

Ahora bien si queremos eliminar los registros duplicados de una tabla y copiarlos en una nueva podremos hacerlo con la palabra clave DISTICT o la cláusula GROUP BY que suele tener menos BUGS que la primera.

Opción 1:
CREATE TABLE nueva_tabla AS SELECT DISTINCT columna FROM tabla;
Opcion 2:
CREATE TABLE nueva_tabla AS SELECT * FROM tabla GROUP BY (id);

Eliminamos la tabla con los registros duplicados:

DROP TABLE tabla;

Renombramos la nueva tabla por el nombre de la que ya teníamos:

RENAME TABLE tabla_nueva TO tabla;

, , , , , ,

No hay Comentarios

Como recuperar las claves de sus Bases de Datos de Plesk

Tan sencillo como realizar esta consulta a la Base de Datos psa de PLESK. Nos devolverá el dominio, nombre de la base de datos, usuario y clave seleccionada. Esta consulta nos listará todas las bases de datos y sus claves pero si queremos filtrarla para un determinado dominio debemos añadir una cláusula WHERE al final de la consulta; (ejemplo: WHERE domains.name=’dominio.com’).

mysql -u admin -p
password: *******
mysql> use psa
SELECT
data_bases.name AS bd,
db_users.login AS usuario,
accounts.password AS clave,
domains.name AS dominio,
data_bases.type AS tipo
FROM
db_users
INNER JOIN data_bases ON (db_users.db_id = data_bases.id)
INNER JOIN accounts ON (db_users.account_id = accounts.id)
INNER JOIN domains ON (data_bases.dom_id = domains.id)
ORDER BY domains.name ASC

* Probado en Fedora Core 5 Plesk 8.6

, , , ,

No hay Comentarios

Shell Script para hacer copias de seguridad de nuestras bases de datos con ncftpput.

Pues ya estoy aquí de nuevo para escribir un shell script que realiza una copia de seguridad de nuestras Bases de Datos y mediante ncftpput las enviamos a nuestro servidor FTP.

# DATOS
SERVIDOR=GENTOO-VPS
FECHA=$(date +"%m-%d-%Y") # mm-dd-yyyy
EMAIL=su@email
ASUNTO="Backup SQL"
TMP=/home/backup/tmp

# DATOS BD
BD_USUARIO=root
BD_CLAVE=*******

# DATOS FTP
NCFTP="/usr/bin/ncftpput"
FTP=ftp.dominio.com
FTP_USUARIO=user
FTP_CLAVE=******
FTP_DESTINO="./servidores/$SERVIDOR/MySQL/"

for BD in `mysql -u$BD_USUARIO -p$BD_CLAVE -e "show databases" -B -N`
do
    mysqldump -u$BD_USUARIO -p$BD_CLAVE $BD > $TMP/$BD-$FECHA.sql
    $NCFTP -m -u $FTP_USUARIO -p $FTP_CLAVE $FTP $FTP_DESTINO/$BD/ $TMP/$BD-$FECHA.sql
    rm -f $TMP/$BD-$FECHA.sql
done

mail -s "$ASUNTO - $FECHA - $SERVIDOR" $EMAIL

Para optimizar la tarea podemos incluirla en nuestro crontab e incluimos la siguiente linea con la programación de la tarea y donde está ubicado nuestro script. Se ejecutará a las 2 de la madrugada todos los días:

crontab -e
0       2       *       *       *       /home/backup/backup-bd-diaria.sh

, , , , , , ,

No hay Comentarios

Cambiando una clave MySQL desde SHELL.

# Paramos el servicio de MySQL.
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &

# recibimos un mensaje como este:
# mysql # nohup: ignoring input and redirecting stderr to stdout. Starting mysqld daemon with databases from /var/lib/mysql
# Y le indicamos a MySQL que deseamos acceder como usuario root.
mysql -u root

# y recibimos el mensaje de bienvenida a MySQL:
# Welcome to the MySQL monitor.  Commands end with ; or \g.
# Your MySQL connection id is 1
# Server version: 5.0.44-log Gentoo Linux mysql-5.0.44-r2
# Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

# Una vez dentro solo tenemos que indicarle la Base de Datos a usar.
mysql>use mysql;

# y posteriormente realizamos el cambio de clave para el usuario seleccionado.
mysql>update user set password=PASSWORD("nueva-clave") where User='root';
mysql>flush privileges;
mysql>quit

# Paramos el servicio y lo volvemos a iniciar.
/etc/init.d/mysql stop
/etc/init.d/mysql start

# Ahora solo debemos comprobar que accede con la nueva clave.
mysql -u root -p

, , ,

No hay Comentarios

Permitir conexiones remotas a MySQL en Gentoo Linux

Por defecto MySQL solo nos permite realizar conexiones desde nuestro host local, por lo que para permitir conexiones remotas  a nuestro servidor de Base de Datos debemos editar el fichero de configuración de MySQL.

vi /etc/mysql/my.cnf

Una vez ahí debemos comentar la linea skip-networking e incluir la IP de nuestro servidor en bind-address.

#skip-networking
bind-address = xxx.xxx.xxx.xxx

Una vez hecho esto solo hay que dale permisos al usuario en la tabla users de MySQL.

mysql -u root -p
GRANT ALL ON *.* TO usuario@xxx.xxx.xxx.xxx IDENTIFIED BY 'clave';

Reiniciamos MySQL y ya lo tenemos listo.

/etc/init.d/mysql restart

Otra opción es hacerlo directamente desde Webmin haciendo click en servidores -> Servidor de Base de Datos MySQL -> Permisos de Usuario -> Editar el usuario root u otro que deseemos -> y en máquinas cambiar la selección localhost por cualquiera.

, , , , , , ,

No hay Comentarios