El escenario que vamos a utilizar para instalar MySql Server es un Ubuntu 18.04 con 1 VCores, 2 GB de ram y 10 GB SSD.
Instalación de MySql
La instalación del servidor de base de datos es muy sencilla y rápida ejecutando la siguiente instrucción desde el terminal de Linux
apt install mysql-server.
Si queremos podemos buscar antes en el repositorio para saber que versiones hay disponibles con la siguiente instrucciónapt-cache search mysql-server
Y nos dará un resultado como el de la Imágen.
La versión 5.7 es la que viene por defecto con Ubuntu 18.04 y es la que instalamos.
Crear usuarios en MySql
Una vez instalado nos conectaremos al servidor ejecutando el comando MySql en el terminal y este nos da acceso a la consola de MySql, como podemos ver nos deja entrar sin password y con el usuario root.
Podemos comprobar con qué usuarios estamos con la siguiente instrucción
select current_user();
Lo primero que tenemos que hacer es cambiar el password de root para que no sea blanco y que cualquiera pueda entrar. Ejecutaremos desde el terminal las siguientes instrucciones para cambiar el password de root
# Cambiamos a la base de datos de msyql
use mysql
# Actualizamos el sistema de autentificación del usuario root a mysql_native_password
update user set plugin='mysql_native_password' where user='root';
# Actualizamos el passowrd
update user set authentication_string=PASSWORD("mysql") where User='root';
flush privileges;

NOTA: en la versión 8 probablemente esta instrucción update user set authentication_string=PASSWORD("mysql") where User='root'; no os funcione y tengais que utilizar los siguiente:
update user set authentication_string="" where User='root';
flush privileges;
Salir de la consola de mysql y ejecutar desde consola el comando
mysqladmin -u root -p password mysql
mysql es el nuevo password.Ahora cada vez que nos conectemos lo haremos con usuario y password con esta instrucción
mysql -u root -p
y nos pedirá el password.Actualizado el usuario root para que cualquiera no pueda entrar vamos a crear un usuario para conectarnos y no tener que utilizar el usuario root
Desde el terminal de MySql creamos un nuevo usuario, userdev escribiendo las siguientes instrucciones
# seleccionamos la base de datos del sistema
use mysql;
# creamos un usuario llamado userdev con el password mysql
CREATE USER 'userdev'@'localhost' IDENTIFIED BY 'mysql';
# Al usuario recién creado le damos permisos a todas las bases de datos (*.*)
GRANT ALL PRIVILEGES ON *.* TO 'userdev'@'localhost' with grant option;
#Actualizamos
flush privileges;

Ahora ya podemos salir y entrar con el nuevo usuario
mysql -u userdev -p
y el password que le hemos dado (mysql)Este usuario solo puede conectarse desde el propio servidor. Con 'userdev'@'localhost' le estamos diciendo que solo se conecte desde localhost (más adelante crearemos un usuario para conectarnos remotamente).
Configuración de MySql
Los ficheros de configuración se encuentran en la ruta /etc/mysql y el principal fichero es /etc/mysql/mysql.conf.d/mysqld.cnf, si lo abrís con un editor de texto como nano o el vim veréis que tiene una serie de parámetros de configuración. Importantes:
- port = 3306, el puerto donde escucha el servidor de MySql.
- datadir = /var/lib/mysql, la ruta donde están las bases de datos. Podemos cambiar la ruta y mover el directorio mysql a otro disco y hasta cambiarle el nombre si después en datadir ponemos la ruta completa.
- bind-address = 127.0.0.1, IP por la que escucha el MySql, en este caso solo admite conexiones desde la propia máquina y no nos podremos conectar desde el exterior.
Para conectarnos remotamente tendremos que comentar esta linea o poner la IP 0.0.0.0 - log_error = /var/log/mysql/error.log, donde se guardan los errores
En el directorio de configuración también encontrareis el fichero debian.cnf que tiene una información similar a esta
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = OZuehVfccwZKGm7e
socket = /var/run/mysqld/mysqld.sock

Conectarse a MySql
Hasta ahora nos conectamos al MySql desde el servidor pero también podemos conectarnos remotamente o a través de un interface web con phpMyAdmin.
Para conectarse remotamente tenemos que realizar varias acciones:
- Instalar el cliente de MySql en local, en nuestro ordenador con la siguiente instrucción en Linux
sudo apt install mysql-client
Y una vez instalado el cliente nos conectamos al servidor poniendo la ip del servidormysql -u userdev -p -h 18.23.15.12
También podemos instalar el cliente de MySql para Windows, mysql-workbench. - Ahora tenemos que comentar en el fichero de configuración la línea bind-address = 127.0.0.1, cada vez que hagamos cambios en el fichero de configuración tenemos que reiniciar el servicio
service mysql restart
- En el siguiente paso creamos un nuevo usuario que nos permita acceder desde fuera del servidor y lo haremos con las siguientes instrucciones
CREATE USER 'userdev'@'%' IDENTIFIED BY 'mysql'; GRANT ALL PRIVILEGES ON *.* TO 'userdev'@'%' with grant option; FLUSH PRIVILEGES;
- Por último falta abrir el puerto del MySql desde el panel de clouding.io, vamos a la opción Mis Firewalls
Y pulsamos el signo + para añadir una nueva regla al firewall.
Seleccionamos la plantilla que queremos utilizar, en nuestro caso “Permitir MySql” y pulsamos el signo + para que nos muestre los datos de la plantilla.
Lo dejamos todo por defecto y pulsamos enviar para crear la regla. Si la buscáis en el listado os tiene que salir algo como la imágen
Ahora vamos a instalar phpMyAdmin para no tener que ir abriendo puertos y poder tener el MySql limitado solo a la ip de nuestro servidor. Necesitaremos instalar en el servidor Apache2 y php y lo haremos desde el terminal con la siguiente instrucción
apt install apache2 php php-mysql
Nos bajamos la última versión de phpMyAdmin al servidor y lo instalamos en /var/www/html, así que desde esta ruta ejecutamos el siguiente comando para bajarnos el phpMyAdminwget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
Lo descomprimimosunzip phpMyAdmin-5.0.2-all-languages.zip
Si no tenemos el unzip lo instalamosapt install unzip
Le cambiamos el nombre al directorio resultante para que nos sea más fácil utilizarlomv phpMyAdmin-5.0.2-all-languages phpmyadmin
Ahora en el navegador escribimos la ruta del administrador, si no os acordáis de la IP en el panel de control de clouding.io la podéis encontrar o ejecutando el comando ifconfig desde el terminal. Sabiendo la IP creamos la url de nuestro phpmyadmin ( 1.1.1.1 es un ejemplo).http://1.1.1.1/phpmyadmin/
Con el usuario que hemos creado anteriormente userdev podremos acceder al entorno del MySql.Copias de seguridad y restaurar copias
Supongamos que tenemos una base de datos llamada pruebas y queremos realizar copias de seguridad cada día, podemos crear un cron que ejecute un script que vaya realizando dichas copias.
Las copias de seguridad en MySql las realizamos con la siguiente instrucción desde el terminal
mysqldump -u userdev -p pruebas > pruebas.sql
Donde:- -u userdev es el usuario que hemos creado antes.
- -p para que nos pida el password.
- pruebas es la base de datos que queremos copiar.
- Con el signo de mayor le decimos que el resultado lo vuelque a un fichero llamado pruebas.sql.
Creamos un script llamando backups_mysql.sh y dentro escribimos los siguiente código
date=`date +%Y-%m-%d_%Hh`
mysqldump -u userdev -pmysql pruebas > /root/${date}_pruebas.sql
chmod 700 backups_mysql.sh
Ahora lo ponemos para que se ejecute cada dia a las 00:30 de la noche. Para esto abrimos el crontab desde el terminal ejecutandocrontab -e
Y ponemos la siguiente línea30 0 * * * sh /root/backups/backup_mysql.sh > /tmp/backup_mysql.log
Vamos a crear un segundo script para ir eliminado backups cada x dias porque sino acabaremos llenado el disco. Creamos un script llamado delete_backups.sh y ponemos esto dentrofind /root/backups/ -mindepth 1 -mtime +6 -delete
Este comando eliminará todos los ficheros del directorio backups que sea más antiguo a 6 días.El cron quedaría de la siguiente forma

Para restaurar un backup de los que hemos creado podemos hacerlo con la siguiente instrucción
mysql -u userdev -p pruebas01 < pruebas.sql
pruebas01 es una nueva base de datos que hemos creado con el administrador de MySql phpMyAdmin.Por último quiero comentaros una opción muy interesante que he visto en clouding.io y es la posibilidad de crear redes privadas siempre que tengamos dos o más servidores y con ello poder securizar el servidor de MySql en un red privada.
Esta opción hay que habilitar desde el panel de control

y nos asignan una IP privada del tipo 10.x.x.x

Esta IP la podemos usar para acceder al MySql y así poder separar el MySql de servidor web en dos servidores. Y hasta aquí la instalación, configuración y puesta en marcha del servidor MySql en Ubuntu Server. Espero que os haya gustado y sobre todo servido de ayuda y no dejéis de probar los servidores clouding.io donde he realizado estas pruebas.
Y esto es todo, y feliz programming
Saludos
Alex.