Mysql
Mysql Administración
Usuarios y permisos
- CREATE DATABASE prueba_db
- CREATE USER 'user_test'@'localhost' IDENTIFIED BY 'PASSWORD'; Únicamente desde lcoalhost
- CREATE USER 'user_test'@'%' IDENTIFIED BY='password'; Desde todas las redes
- GRANT ALL ON prueb_db.* TO 'user_test'@'localhost';
- FLUSH PRIVILEGES
Comandos externos para mantenimiento
mysqladmin -u root -p processlist mysqladmin -u root -p status mysqladmin -u root -p extended-status mysqladmin -u root -p variables
Comandos internos mantenimiento
show full processlist show databases; use database; show full tables from database;
Slave
show slave status
Estados correctos
Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes Slave_SQL_Running: Yes Exec_Master_Log_Pos: número tiene que aumentar Relay_Log_Space: número tiene que aumentar
Copia de tablas
Después de copiar o traspasar las tablas hacia otro servidor debemos entrar dentro del mysql y realizar el siguiente comando con tal de que los datos estén actualizados
flush tables;
Consulta sobre Tablas
select table_schema, table_name, engine from information_schema.tables;
Inserts de Usuarios
insert into user values '85.116.115.22','cactiuser',password('password'),"Y","N","N","N","N","N","N","N","N","N","N","N","N","N","N","Y","N","N","N","N","Y,"N","N","N","N","N","N","N","N","Y","","","","","0","0","0","0","","","N","N","","0.000000");
- Tipo1
insert into user values("10.13.120.248","cactiuser",password('password'),"Y","N","N","N","N","N","N","N","N","N","N","N","N","N","N","Y","N","N","N","N","Y","N","N","N","N","N","","","","","0","0","0","0");
- Tipo2
insert into user values("10.13.120.248","cactiuser",password('password'),"Y","N","N","N","N","N","N","N","N","N","N","N","N","N","N","Y","N","N","N","N","Y","N","N","N","N","N","N","N","","","","","0","0","0","0");
- Tipo3
insert into user values("10.13.120.248","cactiuser",password('password'),"Y","N","N","N","N","N","N","N","N","N","N","N","N","N","N","Y","N","N","N","N","Y","N","N","N","N","N","N","N","N","","","","","0","0","0","0","","","N");
Mysql Galera
Introducción
Actualmente estamos configurando varios servidores con el servicio de Galera Cluster en entornos con MariaDB (MySQL también admite la configuración con Galera Cluster, pero no hemos hecho la prueba). A continuación detallaremos los pasos a seguir para la configuración y uso.
Beneficios
- True Multi-master, Active-Active Cluster Read and write to any node at any time.
- Synchronous Replication No slave lag, no data is lost at node crash.
- Tightly Coupled All nodes hold the same state. No diverged data between nodes allowed.
- Multi-threaded Slave For better performance. For any workload.
- No Master-Slave Failover Operations or Use of VIP.
- Hot Standby No downtime during failover (since there is no failover).
- Automatic Node Provisioning No need to manually back up the database and copy it to the new node.
- Supports InnoDB.
- Transparent to Applications Required no (or minimal changes) to the application.
- No Read and Write Splitting Needed.
- Easy to Use and Deploy.
Instalación MariaDB
Para la instalación de MariaDB, simplemente necesitamos realizar la descarga de los ficheros de binarios y descomprimirlos.
Nos descargamos el tar de ficheros binarios de MariaDB del siguiente enlace:
http://tedeco.fi.upm.es/mirror/mariadb//mariadb-<version>/bintar-linux-systemd-x86_64/mariadb-<version>-linux-systemd-x86_64.tar.gz
Ya solo nos falta descomprimir el fichero y crear un enlace para un carpeta genérica:
cd /usr/local tar -zxf /install/mariadb-10.3.11-linux-systemd-x86_64.tar.gz ln -s mariadb-10.3.11-linux-systemd-x86_64 mysql
Configuración MariaDB
Para configurar correctamente el servicio de MariaDB, la primera vez hace falta realizar una serie de tareas como configurar el usuario o crear la estructura inicial de las Bases de datos.
Las tareas a realizar son las siguientes:
Creamos el usuario # groupadd mysql # useradd -r -g mysql -s /bin/false mysql
Creamos el directorio # cd /var/lib/ # mkdir mysql # chown mysql:mysql mysql # chmod 750 mysql Creamos la estructura inicial # /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql
Securizamos la instalación (es necesario que el servicio mysql esté levantado) # /usr/local/mysql/bin/mysqld –user=mysql # /usr/local/mysql/bin/mysql_secure_installation Añadimos los scripts de arranque según si es para SysV o Systemd SysV # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server Systemd # cp /usr/local/mysql/support-files/systemd/mariadb.service
/usr/lib/systemd/system/mariadb.service Nota: Modificar los límites en el fichero de servicio: LimitNOFILE=infinity LimitMEMLOCK=infinity
Una vez realizada la configuración inicial, hace falta crear el fichero de configuración en /etc/my.cnf. Este fichero debe de tener, como mínimo, los siguientes parámetros:
/etc/my.cnf
[mysqld] max_connections=20000 datadir=/var/lib/mysql log_error=/var/log/mysql/mariadb.log
Instalación de Galera Cluster
Una vez esté funcionando el servicio de MySQL/MariaDB, simplemente necesitamos instalar el paquete de Galera desde el repositorio (yum). Este paquete, lo que hace es instalar la librería (conector) de Galera Cluster.
Instalamos la librería desde el repositorio:
# yum install galera
Configuración de Galera Cluster
Una vez instalada la librería, simplemente hace falta añadir la configuración de Galera Cluster en el fichero de configuración de MySQL/MariaDB.
Añadimos la configuración al fichero en /etc/my.cnf. El fichero debe de tener, como mínimo, los siguientes parametros: /etc/my.cnf
[galera] wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://<ipsServidoresDelCluster>" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 wsrep_cluster_name="<nombreCluster>" bind-address=0.0.0.0 wsrep_node_address="<ipServer>" wsrep_node_name="<nombreServer>" wsrep_sst_method=rsync
NOTA: las IP’s del parámetro “wsrep_cluster_address” han de ir separadas por comas.
Hay que tener en cuenta que, para que puedan conectarse entre sí, los nodos deben poder verse a través de los siguientes puertos:
3306 - MySQL 4567 - Galera communication and replication 4568 - Galera IST 4444 - Galera SST
Inicialización de Galera Cluster
Para la inicialización del cluster, es necesario que haya un nodo que arranque el cluster y luego los demás nodos se van añadiendo. Este paso se realiza cuando se crea el cluster o cada vez que lo reiniciamos parando todos los nodos.
Arranque del Primer Nodo
Segun el tipo de arranque que usemos, será necesario ejecutar un comando u otro (estos comandos internamente ejecutan mysqld –wsrep-new-cluster, asi que tambien lo podríamos levantar de esta manera): SysV # service mysql bootstrap
Systemd # galera_new_cluster
Hay que tener en cuenta que el primer nodo siempre tiene que ser el último que haya parado (en el caso de que sea un reinicio), ya que este será el que tenga los datos más actuales.
Arranque del resto de Nodos
En el caso del resto de nodos, simplemente debemos levantar el servicio de MySQL/MariaDB de la manera habitual. Lo único que hay que tener en cuenta es que tiene que haber la configuración de Galera en el fichero de configuración (/etc/my.cnf): SysV # service mysql start
Systemd # systemctl start mysql
Reinicio de Galera Cluster
Para el reinicio de un cluster de galera hay que tener en cuenta una serie de consideraciones. Tal y como comentamos en el punto anterior, si se paran todos los nodos del cluster, el cluster de Galera deja de existir, y es necesario volver a inicializarlo. Esto no significa que se pierdan los datos, simplemente dejan de estar en cluster.
Para poder levantar el cluster de nuevo, lo primero es determinar cual es el nodo mas actualizado (el que tiene los datos más nuevos) para inicializar el cluster desde este.
Determinar el nodo más actualizado
Para determinar el cluster más actualizado simplemente es necesario ir al directorio de los datos de MySQL (en nuestro caso, /var/lib/mysql) y revisar el fichero grastate.dat. En este fichero aparecen varios parámetros:
GALERA saved state version: 2.1 uuid: e41cf009-2a0a-11e9-9fbd-cb9759847aa4 seqno: 598 safe_to_bootstrap: 0
El parámetro que nos interesa es seqno. El nodo que deberemos arrancar primero será el que tenga el seqno más alto. Si algún nodo ha crasheado el seqno será -1, y en este caso deberemos realizar un recover.
Galera Recovery
Este caso solo será necesario en el caso en que el seqno sea -1 y no podamos averiguar cual es el nodo más actualizado.
Para saber el valor del seqno será necesario levantar el mysql con la opción –wsrep_recover.
SysV # mysqld –wsrep_recover
Systemd # galera_recovery
Lo que hará este parámetro es levantar el mysql, mirar donde se había quedado y volver a parar. El seqno aparecerá en los logs de mysql de la siguiente manera:
[Note] Starting crash recovery... [Note] Crash recovery finished. [Note] Server socket created on IP: '::'. [Note] WSREP: Recovered position: e41cf009-2a0a-11e9-9fbd-cb9759847aa4:598
La información que aparece es “WSREP: Recovered position: <uuid>:<seqno>”
Añadir / Eleminar nodo del Galera Cluster
Tal y como hemos comentado en los anteriores puntos, una vez creado el cluster los demas nodos se pueden agregar o quitar simplemente levantando y parando el servicio de MySQL/MariaDB. Lo único a tener en cuenta es que la configuración de galera esté presente en el fichero de configuración de MySQL (/etc/my.cnf).