Informatica/Servicios/mysql

De 33system wiki
Saltar a: navegación, buscar

<< Informatica

MySQL

Teoría

Practica

Acceso por red

# editamos el archivo de condfiguración
vim /etc/mysql/my.conf
# cambiamos el valor de la variable bind-address
## cambiamos 
=======================================
bind-address            = 127.0.0.1
=======================================
## por
=======================================
bind-address            = 0.0.0.0
=======================================
# reiniciamos el servicio de mysql
/etc/init.d/mysql restart

# asignamos los permisos al usuario en la base de datos
mysql -u root -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.101.101' IDENTIFIED BY 'root';"
## esto soluciona el problema
=======================================
Host 192.168.101.101 is not allowed to connect to this MySql Server
=======================================

# probamos la conexion desde otro equipo
mysql -h 192.168.100.100 -uroot -proot

Acceso automatizado

# creamos el archivo de configuración
vim ~/.my.cnf
# rellenamos el archivo con los parámetros
==========================
[client]
user=root
password=root
host=127.0.0.1
==========================
# cambiamos los permisos
chmod 600 ~/.my.cnf
# probamos la ejecucion
mysql

Crear un usuario

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']

Crear usuarios

Eliminar un usuario

DROP USER 'jeffrey'@'localhost';

Eliminar usuarios

Cambiar la contraseña de un usuario

SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');

Cambiar contraseña

Otorgar privilegios a un usuario

mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'
    -> IDENTIFIED BY 'goodsecret' REQUIRE SSL;

grant-mysql

Upgrade de las tablas

mysql_upgrade -u root -h localhost -p --verbose --force

how-to-fix-error-1577-hy000-at-line-1-cannot-proceed-because-system-tables-used-by-event-scheduler-were-found-damaged-at-server-start

Hacer copias de seguridad

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
# Ejemplo
mysqldump basededatos -u root -p > /root/basededatos-20120428.sql

mysqldump

Restaurar copia de seguridad

# restablecer un backup de una base de datos
mysql -u root -p  nombre_base_de_datos < backup.sql

Cambiar nombre de una tabla

# cambiamos el nombre de la tabla de tabla1 a tabla2
RENAME TABLE tabla1 TO tabla2;

Cambiar nombre de una columna

# cambiamos el nombre de una columna
ALTER TABLE tabla1 CHANGE viejacolumna nuevacolumna varchar(100) not null;

Actualizar una cadena de texto en una columna

UPDATE table SET column = REPLACE (column, 'oldstring', 'newstring');

Quitar espacios en blanco &nbsp

UPDATE data SET description = REPLACE (description, CHAR(160), '') where id=452;

Borrar todas las tablas de una base de datos

Manual
mysql -u root -p
DROP DATABASE dbname;
CREATE DATABASE dbname;
exit
Script
#!/bin/bash
MUSER="$1"
MPASS="$2"
MDB="$3"
 
# Detect paths
MYSQL=$(which mysql)
AWK=$(which awk)
GREP=$(which grep)
 
if [ $# -ne 3 ]
then
	echo "Usage: $0 {MySQL-User-Name} {MySQL-User-Password} {MySQL-Database-Name}"
	echo "Drops all tables from a MySQL"
	exit 1
fi
 
TABLES=$($MYSQL -u $MUSER -p$MPASS $MDB -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )
 
for t in $TABLES
do
	echo "Deleting $t table from $MDB database..."
	$MYSQL -u $MUSER -p$MPASS $MDB -e "drop table $t"
done

Master > Slave mySQL database

Resetear clave de root

# paramos el servicio de mysql
/etc/init.d/mysql stop
# si no se parara ejecutar
ps -aux | grep mysql
# y matar todos los procesos
kill -kill x x x
# ahora arrancamos una sesion de mysql evitando la autenticacion
/usr/bin/mysqld_safe --user=mysql --skip-grant-tables
# en otra consola ejecutamos 
mysql

# Dentro de MySQL nos colocamos en la base de dato mysql
use mysql;
# actualizamos la contraseña de root 
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
# refrescamos los cambios
flush privileges;
# salimos
exit
# paramos el servicio
/etc/init.d/mysql stop
# arrancamos el servico
/etc/init.d/mysql start
# probamos la nueva contraseña
mysql -u root -p

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

# lo que hay que hacer es resetar la password igual que se hace en el paso anterior con la de root
# la diferencia es que la clave ya esta establecida
# solo tenemos que entrar al archivo indicado y leerla para reestablecerla
cat /etc/mysql/debian.cnf
# copiamos la clave y hacemos los pasos anteriores iguales 
# cambiando solo la sentencia del update
UPDATE user SET Password=PASSWORD('Contraseña-encontrada') WHERE user='debian-sys-maint';

Incorrect key file for table '/tmp/#sql_4091_0.MYI';

  • El problema se encuentra en que no hay espacio suficiente en el disco duro.

Se ha solucionado moviendo el directorio /tmp a una particion nueva. Esta particion se ha montado con mount --bind en /tmp



Documentacion