Comandos MYSQL

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 10

-- deinstalar Mariadb

rpm -e `rpm -qa | grep MariaDB` --noscripts


yum remove mariadb-libs
rpm -e mysql --nodeps

-- instalar mysql
rpm -ivh mysql*
rpm -ivh mysql-common
rpm -ivh mysql-libs
rpm -ivh mysql-client
rpm -ivh mysql-server

-- levantar servicio
systemctl start mysqld
systemctl enable mysqld.service

-- version MYSQL
mysql -V

-- levantar servicio
service mysqld start
systemctl start mysqld
systemctl enable mysqld.service

-- obtenre password de root


grep 'temporary password' /var/log/mysqld.log Didrago12345

-- cambiar seguridad para contrase�a


SHOW VARIABLES LIKE 'validate_password%'
SET GLOBAL validate_password_length = 10;
SET GLOBAL validate_password_number_count = 0;
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_mixed_case_count = 0;
SET GLOBAL validate_password_special_char_count = 0;

-- actualizar pass de root


use mysql
update user set password = password('didrago') where user = root;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'didrago';
SET PASSWORD = PASSWORD('didrago');

-- cambiar password root


editar /etc/my.cnf
Add skip-grant-tables under [mysqld]
Restart Mysql
You should be able to login to mysql now using the below command mysql -u root -p
Run mysql> flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Go back to /etc/my.cnf and remove/comment skip-grant-tables
Restart Mysql

-- activar acceso workbench puerto 3306


vi /etc/my.cnf
bind-address = 0.0.0.0
iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

>GRANT ALL PRIVILEGES on *.* TO 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT


OPTION;
>FLUSH PRIVILEGES;

/etc/init.d/mysqld restart

-- seguridad y cambio de password root


mysql_secure_installation

-- comandos mysql
--conectarse
mysql -h localhost -u root -p

-- ruta de instalacion
select @@datadir;

-- version
mysql -V
SELECT VERSION(), CURRENT_DATE;
SHOW VARIABLES LIKE "%version%";

-- instalar mysql en otro directorio


crear particion
montar particion
instalar mysql de manera normal
bajar servicio
copiar directorio mysql a nueva ruta
- cp -R /var/lib/mysql /mysql

renombrar directorio /var/lib


mv /var/lib/mysql /var/lib/mysql-bkp

# edit /etc/my.conf to redirect socket to new path


datadir=
socket=
log=

getenforce
# Concerning my datadir is in /mysql/mysql
semanage fcontext -a -t mysqld_db_t "/mysql/mysql(/.*)?"
restorecon -Rv /mysql/mysql
restorecon reset /mysql/mysql context unconfined_u:object_r:default_t:s0-
>unconfined_u:object_r:mysqld_db_t:s0

--editar /etc/selinux/config
disable selinx
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

-- tama�o base de datos


SELECT
table_schema "Base de Datos",
sum( data_length + index_length ) / 1024 / 1024 "Tama�o en MB"
FROM
information_schema.TABLES GROUP BY table_schema;
-- crear bd
CREATE DATABASE prueba;

-- ver todas las BD


SHOW DATABASES;

- eliminar BD
drop database prueba;

-- dejar por default la BD


USE prueba;

-- configuracion BD
/etc/mysqldump.cnf
/etc/mysql/my.cnf

�Versi�n y estado de MySQL?


mysqladmin -u root -p ping
mysqladmin -u root -p version

-- variables
show variables;
show status;

-- alter users
ALTER USER
'jeffrey'@'localhost' IDENTIFIED BY 'new_password',
'jeanne'@'localhost'
REQUIRE SSL WITH MAX_USER_CONNECTIONS 2;

-- usuarios en la BD

select user,host,grant_priv from mysql.user;


show databases;

-- error de password, realizar lo siguiente


vi /etc/my.cnf
in [mysqld]
validate-password=off

-- salvar y reiniciar servicio mysqld

-- tama�o base de datos

SELECT table_schema "database_name",


sum( data_length + index_length ) / 1024 /1024 "Data Base Size in
MB",sum( data_free )/ 1024 / 1024 "Free Space in MB"
FROM information_schema.TABLES GROUP BY table_schema ;

-- tablas y fecha de creacion


select table_name,table_schema,create_time from INFORMATION_SCHEMA.TABLES where
table_schema='glpi'

-- para ver los procesos que se est�n ejecutando en MySQL ejecutaremos:


show processlist;
-- ver las conexiones activas a la base de datos
Para entender un poco m�s este resultado sabemos que: Threads_cached. Es el n�mero
de procesos cacheados actualmente.
Threads_connected. N�mero de conexiones activas actualmente.
Threads_create. Las conexiones que se han creado hasta el momento.
Threads_running. Las que se est�n ejecutando actualmente

show status like 'Threads%';

-- L�mite de conexiones

versiones 5.5 > 151


menores a 5.5 100

show variables like "max_connections";

-- adecuar parametros de MYSQL


archivo de configuraci�n de MySQL, t�picamente en /etc/my.cnf
max_connections = 300

-- adeucar parametros en linea


SET GLOBAL max_connections = 300;

-- listar usuarios
select User from mysql.user;
select u.User,Db from mysql.user u,mysql.db d where u.User=d.User;

-- una muy b�sica aproximaci�n a la cantidad de memoria RAM requerida para sistemas
transaccionales con la siguiente f�rmula: (SISTEMA OPERATIVO + 32 MB + BUFFERS +
POOLS + CACHES + (CONEXIONES * 1 MB)) * 1,2. Tomando un margen de seguridad del
20%.

-- crear usuario y permisos


CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'tu_contrasena';
GRANT ALL PRIVILEGES ON * . * TO 'nombre_usuario'@'localhost';
GRANT ALL PRIVILEGES ON pruebas.* TO admin@localhost IDENTIFIED BY "didrago";

-- refrescar todos los privilegios.


FLUSH PRIVILEGES;

-- revocar permisos
REVOKE [permiso] ON [nombre de base de datos].[nombre de tabla] FROM �[nombre de
usuario]�@�localhost�;

DROP USER 'usuario_prueba''localhost';

-- Apagar de forma segura el servidor MySQL


shutdown;

/etc/init.d/mysqld stop
/etc/init.d/mysqld start

-- Algunos comandos utiles para refrescar datos en MySQL

flush-hosts: Refresca toda la informacion del cache que hostea MySQL.


flush-tables: Refresca todas las tablas.
flush-threads: Refresca los hilos de ejecucion.
flush-logs: Refresca todos los logs de informacion.
flush-privileges: Recarga las tablas de privilegios (lo mismo que recargar).
flush-status: Limpia el stado de las variables.

-- Algunas variables de las estado del servidor MySQL que ser�a importante tener en
cuenta son las siguientes:

- Handler_read_rnd: indica el n�mero de solicitudes hechas para leer una fila


basado en una posici�n fija. En caso de que tenga un valor alto habr�a que evaluar
consultas que escaneen tablas enteras o joins que no aprovechen correctamente los
�ndices.
- Handler_read_rnd_next: es el n�mero de solicitudes hechas para leer la siguiente
fila en el archivo de datos. Esto indica que se hacen muchos escaneos de tablas.
Habr�a que considerar utilizar �ndices o bien reescribir las consultas para
utilizarlos correctamente.
- Qcache_lowmem_prunes: muestra el n�mero de consultas que han sido removidos del
cache para liberar la memoria para poner nuevas consultas en el cache. Mediante
este n�mero se puede afinar el tama�o de la cach� de consultas.
- Threads_cached: el n�mero de procesos en el cach� de procesos. Un n�mero alto
podr�a requerir de un aumento del thread_cache_size.
- Created_tmp_disk_tables: el n�mero de tablas temporales en el disco que fueron
creados autom�ticamente por el servidor mientras ejecuta los enunciados. Un alto
n�mero en esta variable requerir�a de un aumento de la variable tmp_table_size a
fines de evitar que se deba recurrir al disco para las tablas temporales.
- Key_reads: El n�mero de lecturas f�sicas del key block desde el disco. Si este
n�mero es grande se deber�a aumentar key_buffer_size para as� disminuir la tasa de
fallos de cach� para los �ndices

-- CREAR OBJETOS
-- tabla

CREATE TABLE gente (nombre VARCHAR(40), fecha DATE);

-- ver objetos
SHOW TABLES;
SHOW COLUMNS FROM nombre_de_tabla;;

-- Valores nulos
CREATE TABLE ciudad1 (nombre CHAR(20) NOT NULL, poblacion INT NULL);

-- definir valor a un campo


CREATE TABLE ciudad2 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000);

-- Claves primarias
-- si queremos crear un �ndice en la columna nombre de la tabla de ciudades,
crearemos la tabla as�:
CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY, poblacion INT NULL
DEFAULT 5000);

-- columna autoincremental
crear una columna autoincrementada, aunque esta columna s�lo puede ser de tipo
entero. combinaci�n de clave primaria, que sea entera y autoincrementada es ideal
para usarla como clave primaria artificial

CREATE TABLE ciudad5 (clave INT AUTO_INCREMENT PRIMARY KEY, nombre CHAR(20) NOT
NULL, poblacion INT NULL DEFAULT 5000);

-- Comentarios
al crear la tabla, podemos a�adir un comentario a cada columna. Este comentario
sirve como informaci�n adicional sobre alguna caracter�stica especial de la
columna, y entra en el apartado de documentaci�n de la base de datos

CREATE TABLE ciudad6


(clave INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Clave principal',
nombre CHAR(50) NOT NULL,
poblacion INT NULL DEFAULT 5000);

--- definici�n_columnas
| [CONSTRAINT [s�mbolo]] PRIMARY KEY (index_nombre_col,...)
| KEY [nombre_index] (nombre_col_index,...)
| INDEX [nombre_index] (nombre_col_index,...)
| [CONSTRAINT [s�mbolo]] UNIQUE [INDEX]
[nombre_index] [tipo_index] (nombre_col_index,...)
| [FULLTEXT|SPATIAL] [INDEX] [nombre_index] (nombre_col_index,...)
| [CONSTRAINT [s�mbolo]] FOREIGN KEY
[nombre_index] (nombre_col_index,...) [definici�n_referencia]
| CHECK (expr)

-- primary key
CREATE TABLE ciudad4 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000,
PRIMARY KEY (nombre));
CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL, id2 CHAR(2) NOT NULL, texto CHAR(30),
PRIMARY KEY (id1, id2));

-- �ndices
Para definir estos �ndices se usan indistintamente las opciones KEY o INDEX.

CREATE TABLE mitabla2 (id INT, nombre CHAR(19), INDEX (nombre));


CREATE TABLE mitabla3 (id INT, nombre CHAR(19), KEY (nombre));

-- indice sobre parte de una columna, ejemplo usar� s�lo los cuatro primeros
caracteres de la columna 'nombre' para crear el �ndice

CREATE TABLE mitabla4 (id INT, nombre CHAR(19), INDEX (nombre(4)));

-- Claves �nicas
El tercero permite definir �ndices con claves �nicas, tambi�n sobre una columna,
sobre varias o sobre partes de columnas. Para definir �ndices con claves �nicas se
usa la opci�n UNIQUE.
La diferencia entre un �ndice �nico y uno normal es que en los �nicos no se permite
la inserci�n de filas con claves repetidas. La excepci�n es el valor NULL, que s�
se puede repetir.

CREATE TABLE mitabla5 (id INT, nombre CHAR(19),UNIQUE (nombre));

-- Una clave primaria equivale a un �ndice de clave �nica, en la que el valor de la


clave no puede tomar valores NULL. Tanto los �ndices normales como los de claves
�nicas s� pueden tomar valores NULL.

-- Los �ndices sirven para optimizar las consultas y las b�squedas de datos.
Mediante su uso es mucho m�s r�pido localizar filas con determinados valores de
columnas, o seguir un determinado orden

-- Claves for�neas
CREATE TABLE nombre
definici�n_de_columnas
[CONSTRAINT [s�mbolo]] FOREIGN KEY [nombre_index] (nombre_col_index,...)
[REFERENCES nombre_tabla [(nombre_col,...)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]
[ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]]

CREATE TABLE personas2 ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40),


fecha DATE) ENGINE=InnoDB;

CREATE TABLE telefonos2 ( numero CHAR(12),id INT NOT NULL, KEY (id), FOREIGN KEY
(id) REFERENCES personas2 (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

Existen cinco opciones diferentes. Veamos lo que hace cada una de ellas:
RESTRICT: esta opci�n impide eliminar o modificar filas en la tabla referenciada si
existen filas con el mismo valor de clave for�nea.
CASCADE: borrar o modificar una clave en una fila en la tabla referenciada con un
valor determinado de clave, implica borrar las filas con el mismo valor de clave
for�nea o modificar los valores de esas claves for�neas.
SET NULL: borrar o modificar una clave en una fila en la tabla referenciada con un
valor determinado de clave, implica asignar el valor NULL a las claves for�neas con
el mismo valor.
NO ACTION: las claves for�neas no se modifican, ni se eliminan filas en la tabla
que las contiene.
SET DEFAULT: borrar o modificar una clave en una fila en la tabla referenciada con
un valor determinado implica asignar el valor por defecto a las claves for�neas con
el mismo valor.

La opci�n CHECK no est� implementada en MySQL

-- Motor de almacenamiento
Podemos usar indistintamente ENGINE o TYPE, pero la forma recomendada es ENGINE ya
que la otra desaparecer� en la versi�n 5 de MySQL.
Hay seis motores de almacenamiento disponibles. Algunos de ellos ser�n de uso
obligatorio si queremos tener ciertas opciones disponibles. Por ejemplo, ya hemos
comentado que el soporte para claves for�neas s�lo est� disponible para el motor
InnoDB. Los motores son:
BerkeleyDB o BDB: tablas de transacci�n segura con bloqueo de p�gina.
HEAP o MEMORY: tablas almacenadas en memoria.
ISAM: motor original de MySQL.
InnoDB: tablas de transacci�n segura con bloqueo de fila y claves for�neas.
MERGE o MRG_MyISAM: una colecci�n de tablas MyISAM usadas como una �nica tabla.
MyISAM: el nuevo motor binario de almacenamiento portable que reemplaza a ISAM.
Generalmente usaremos tablas MyISAM o tablas InnoDB.
A veces, cuando se requiera una gran optimizaci�n, creemos tablas temporales en
memoria.

-- Disponemos de varias sentencias para verificar o consultar caracter�sticas de


tablas
SHOW COLUMNS FROM gente;

-- ver la instrucci�n usada para crear una tabla, Usando '\G' en lugar de ';' la
salida se muestra en forma de listado
show create table gente\G

-- Eliminar una tabla


DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...

DROP TABLE ciudad6;


DROP TABLE IF EXISTS ciudad6;

-- Inserci�n de nuevas filas

INSERT INTO gente VALUES ('Fulano','1974-04-12');


INSERT INTO gente VALUES ('Mengano','1978-06-15');
INSERT INTO gente VALUES ('Tulano','2000-12-02'), ('Pegano','1993-02-10');
commit;
SELECT * FROM gente;

-- valor por default


INSERT INTO ciudad2 VALUES ('Perillo', DEFAULT);

INSERT INTO ciudad3 (nombre, poblacion) VALUES ('Madrid', 7000000);


INSERT INTO ciudad3 (nombre, poblacion) VALUES ('Par�s', 9000000), ('Madrid',
7200000)
ON DUPLICATE KEY UPDATE poblacion=VALUES(poblacion);

-- con on duplicate key actualiza el valor del registro.

-- Reemplazar filas
REPLACE, que es una alternativa para INSERT, que s�lo se diferencia en que si
existe alg�n registro anterior con el mismo valor para una clave primaria o �nica,
se elimina el viejo y se inserta el nuevo en su lugar.

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name [(col_name,...)]
VALUES (,...),(...),...

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name
SET col_name=, ...

REPLACE INTO ciudad3 (nombre, poblacion) VALUES


('Madrid', 7200000),
('Par�s', 9200000),
('Berl�n', 6000000);

REPLACE INTO ciudad3 VALUES ('Roma', 9500000);


REPLACE INTO ciudad3 SET nombre='Londres', poblacion=10000000;

-- Eliminar filas

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name


[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

DELETE FROM ciudad3;


DELETE FROM ciudad5 WHERE clave=2;
DELETE FROM ciudad5 ORDER BY poblacion DESC LIMIT 2;

-- Vaciar una tabla

TRUNCATE ciudad5;
SELECT nombre, fecha, DATEDIFF(CURRENT_DATE(),fecha)/365 FROM gente;
SELECT nombre, fecha, DATEDIFF(CURRENT_DATE(),fecha)/365 AS edad FROM gente;
SELECT 2+3 "2+2";

-- agrupar filas
group by

-- having
permite hacer selecciones en situaciones en las que no es posible usar WHERE

CREATE TABLE muestras (


ciudad VARCHAR(40),
fecha DATE,
temperatura TINYINT);

INSERT INTO muestras (ciudad,fecha,temperatura) VALUES


('Madrid', '2005-03-17', 23),
('Par�s', '2005-03-17', 16),
('Berl�n', '2005-03-17', 15),
('Madrid', '2005-03-18', 25),
('Madrid', '2005-03-19', 24),
('Berl�n', '2005-03-19', 18);

--
-- create database testdb;
create user 'testuser'@'localhost' identified by 'testinG,12345';
grant all on testdb.* to 'testuser' identified by 'testinG,12345';

-- Tune MySQL
-- Download MySQL Tuner to your home directory.
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl

-- To run it:
perl ./mysqltuner.pl

You will be asked for the MySQL root user�s name and password. The output will show
two areas of interest: General recommendations and Variables to adjust

-- Recuperar Base de Datos

Column count of mysql.user is wrong. Expected 42, found 44. The table is probably
corrupted

--PERFORMANCE_SCHEMA CORRUPTO, SE ELIMINA LA BASE O ESQUEMA Y EJECUTA

mysql_upgrade --force -uroot -p


reiniciar servicios

-- opcion 2
mysql -u root -p
use mysql;
alter table mysql.user drop column default_role;
alter table mysql.user drop column max_statement_time;
alter table mysql.user drop column password_expired;
quit;

You might also like