GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo instalar MySQL 8 en Debian 10

MySQL es un sistema de base de datos relacional de código abierto que funciona en muchos sistemas operativos, incluidos Windows, Linux, macOS y FreeBSD. Es probablemente el RDBMS de código abierto más popular y un componente central de las pilas LAMP y LEMP. Muchas aplicaciones dependen de MySQL como WordPress, Joomla, TYPO3, phpBB y muchas más.

Se han agregado varias funciones nuevas a MySQL 8, que incluyen compatibilidad con JSON, diccionario de datos transaccionales, configuración de tiempo de ejecución persistente, almacén de documentos, sugerencias de optimización, funciones de SQL, CTE, funciones de ventana, índices invisibles y muchas más.

¿Qué aprenderás?

En este tutorial, aprenderá algunas cosas relacionadas con el servidor MySQL y, a continuación, encontrará detalles sobre:

  • Instalar MySQL Server 8 en Debian Buster 10
  • Configurar contraseña raíz de MySQL
  • Implementación segura del servidor MySQL (cambio de dirección de enlace, puerto, etc.)
  • Configurar SSL y habilitar la conexión remota para el servidor MySQL
  • Instalar y configurar phpMyAdmin
  • Consulta MySQL básica para crear usuarios, bases de datos, etc.
  • Configure copias de seguridad automáticas de bases de datos MySQL

Requisitos previos

Instalaremos MySQL Server 8.04 en el último Debian Buster 10 con 2 GB de RAM y 4 CPU para esta guía. Además, necesitamos el privilegio de root para instalar paquetes y editar configuraciones del sistema.

Paso 1:agregar repositorio MySQL

Para este tutorial, instalaremos MySQL Server 8 desde el repositorio oficial de MySQL. Para hacerlo, debemos agregar el repositorio oficial de MySQL a nuestro servidor Debian.

Antes de agregar el repositorio MySQL, instale el paquete 'GnuPG' usando el comando apt a continuación.

sudo apt install gnupg -y

Una vez completada toda la instalación, descargue el repositorio MySQL APT y agréguelo a su sistema.

wget -q http://repo.mysql.com/mysql-apt-config_0.8.15-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb

Deje el repositorio como predeterminado y seleccione 'OK '.

Y se ha agregado el repositorio oficial de MySQL.

Luego, actualice todos los repositorios disponibles en el sistema Debian usando el siguiente comando.

sudo apt update

Y obtendrá el repositorio oficial de MySQL en la lista a continuación.

Como puede verse, se agregó el repositorio oficial de MySQL y estamos listos para instalar MySQL Server 8.0 en Debian Buster 10.

Paso 2:instalar el servidor MySQL

Para instalar MySQL Server 8.0 en el sistema Debian, ejecute el siguiente comando apt.

sudo apt install mysql-server

Ahora escriba la contraseña de root para su instalación de MySQL y elija 'OK '.

Repita la contraseña para su usuario root de MySQL.

Después de eso, se le pedirá que configure el complemento de autenticación predeterminado de MySQL. Seleccione 'Cifrado de contraseña fuerte ' como se recomienda y elija 'OK '.

Y la instalación de MySQL Server 8.0 está finalizada.

Ahora verifique el servicio MySQL usando el siguiente comando.

systemctl is-enabled mysql
systemctl status mysql

A continuación se muestra el resultado que obtendrá.

Como resultado, el servicio MySQL está activo y funcionando en el servidor Debian. El servicio se ejecutará automáticamente en cada arranque del sistema.

Paso 3:Implementación segura de MySQL usando mysql_secure_password

En este paso, mejoraremos la seguridad de la instalación del servidor MySQL usando 'mysql_secure_installation ' herramienta de línea de comandos.

La 'instalación_segura_mysql ' lo ayudará a mejorar su implementación de MySQL desde diferentes aspectos, como configurar la seguridad de la contraseña, deshabilitar el acceso remoto y eliminar las bases de datos de usuario anónimo y de prueba predeterminadas.

Ahora ejecute 'mysql_secure_installation ' comando en su shell.

mysql_secure_installation

Al comienzo de la instalación de MySQL, ya configuró la contraseña de root para MySQL. Ahora escriba la contraseña para continuar con el proceso.

Enter the password for user root: TYPE YOUR MYSQL ROOT PASSWORD

Después de eso, escriba 'Y ' para configurar el 'VALIDAR CONTRASEÑA ' componente.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of the password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

Ahora elija el nivel de política de validación de contraseña para todos los usuarios. Escriba '2 ' para configurar el 'STRONG ' política de nivel de contraseña.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters, and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.

Ahora el comando 'mysql_secure_installation' verificará la seguridad de su contraseña actual. Como puede verse, la fortaleza de nuestra contraseña actual es '50 '. Ahora escriba 'Y ' para cambiar la contraseña actual por una nueva más segura.

Estimated strength of the password: 50 
Change the password for root? ((Press y|Y for Yes, any other key for No) : Y

Ahora escriba su contraseña segura y asegúrese de tener la puntuación 100 , luego escriba 'Y ' para continuar con la nueva contraseña.

New password: 

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided? (Press y|Y for Yes, any other key for No) : Y

Como resultado, el componente de MySQL 'VALIDAR CONTRASEÑA' se configuró con una política de contraseña segura y se creó la nueva contraseña de MySQL.

A continuación, se le pedirá que elimine el usuario anónimo predeterminado. Escriba 'Y ' para eliminar el usuario anónimo predeterminado para su instalación.

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without creating a user account. This is intended only for testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

A continuación, escriba 'Y ' nuevamente para deshabilitar el inicio de sesión remoto de MySQL y si desea que el servidor MySQL sea accesible solo localmente.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y

Después de eso, elimine la 'prueba' de la base de datos predeterminada de su servidor MySQL. Escriba 'Y ' y presione Entrar para continuar.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

A continuación, escriba 'Y' de nuevo para recargar las tablas de privilegios. En efecto, se han aplicado nuevos cambios de configuración de MySQL.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Como resultado, se completó la implementación segura del servidor MySQL utilizando el script 'mysql_secure_installation'. Y en esta etapa, ha habilitado el componente 'VALIDAR CONTRASEÑA' con la política de contraseña segura de nivel '2', también se ha configurado la nueva contraseña raíz segura para MySQL.

Paso 4:proteger el servidor MySQL con una configuración adicional

Para este tutorial, agregaremos una configuración adicional para mejorar la implementación del servidor MySQL. Especificaremos la dirección de enlace del servidor MySQL, cambiaremos el puerto predeterminado, deshabilitaremos la carga del archivo de datos y configuraremos una política de caducidad de contraseña para todos los usuarios de MySQL.

Ahora vaya al directorio '/etc/mysql/conf.d/' y cree una nueva configuración 'mysqld.cnf' usando el editor vim.

cd /etc/mysql/conf.d/
vim mysqld.cnf

Pegue la siguiente configuración en él.

[mysqld]

# MySQL running on 127.0.0.1 with port 8320
bind-address=127.0.0.1
port=8320

# Disable LOAD DATA LOCA
local-infile=0

# Password Expiration to 60 Days
default_password_lifetime=60

# MySQLX Plugin running on 127.0.0.1 with port 8321
mysqlx_bind_address=127.0.0.1
mysqlx_port=8321

Guardar y cerrar.

Luego, reinicie el servicio MySQL y verifique los puertos abiertos en el sistema usando el siguiente comando.

systemctl restart mysql
ss -plnt

A continuación se muestra el resultado que obtendrá.

Como puede verse, el servidor MySQL está funcionando en la dirección IP local '127.0.0.1' en el puerto TCP no predeterminado '8320'.

A continuación, para iniciar sesión en el shell de MySQL con el puerto personalizado, puede usar el comando 'mysql' con la opción '-P port' como se muestra a continuación.

mysql -u root -P 8320 -p

Escriba la contraseña raíz para el servidor MySQL.

Una vez que haya iniciado sesión, ejecute la siguiente consulta para comprobar la configuración del puerto del servidor MySQL.

show variables like 'port';

Y obtendrá que el servidor MySQL se está ejecutando en el puerto personalizado '8320' como se muestra a continuación.

Como resultado, configuró el servidor MySQL para que se ejecute en la dirección IP local '127.0.0.1' con el puerto TCP personalizado '8320'.

Paso 5:proteger y habilitar la conexión remota de MySQL mediante SSL

Suponga que desea implementar MySQL Server en la red interna y permitir que otros hosts en la misma red accedan a bases de datos en MySQL Server. En ese caso, se recomienda habilitar SSL para la implementación de su servidor MySQL.

En este paso, aprenderá cómo configurar y habilitar SSL y el acceso remoto en el servidor MySQL.

Generar certificados SSL

De forma predeterminada, MySQL Server 8.0 genera certificados SSL automáticamente durante la instalación. Todos los certificados SSL predeterminados están disponibles en el directorio '/var/lib/mysql'.

Para este paso, generaremos un nuevo certificado SSL para el servidor MySQL usando 'mysql_ssl_rsa_setup ' herramienta de línea de comandos.

Ahora cree un nuevo directorio SSL '/etc/mysql/certs' y cambie la propiedad de ese directorio al usuario 'mysql'.

mkdir -p /etc/mysql/certs/
sudo chown -R mysql:mysql /etc/mysql/certs

Luego, genere nuevos certificados SSL para el servidor MySQL usando el siguiente comando. Y asegúrese de cambiar el '--suffix=STRING ' con su nombre común.

sudo mysql_ssl_rsa_setup --suffix=HakasMySQLSrv --uid=mysql --datadir=/etc/mysql/certs/

Una vez que se completó, se generaron nuevos certificados SSL para el servidor MySQL en el directorio '/etc/mysql/certs'.

Verifique sus certificados SSL usando el siguiente comando.

ls -lah /etc/mysql/certs/
openssl verify -CAfile /etc/mysql/certs/ca.pem /etc/mysql/certs/server-cert.pem /etc/mysql/certs/client-cert.pem

A continuación se muestra el resultado que obtendrá.

Los nuevos certificados SSL para MySQL Server se generaron en el directorio '/etc/mysql/certs/'.

Habilitar SSL y servidor MySQL de acceso remoto

Para habilitar SSL y el acceso remoto en el servidor MySQL, deberá cambiar la opción 'bind-address' con la dirección IP de su red interna y agregar la configuración SSL para MySQL.

Ahora vaya al directorio '/etc/mysql/conf.d/' y edite la configuración que hemos creado en la parte superior 'mysqld.cnf' usando el editor vim.

cd /etc/mysql/conf.d/
vim mysqld.cnf

Cambie la 'dirección de enlace' con su dirección IP interna como se muestra a continuación.

bind-address=172.16.0.3

A continuación, agregue la configuración SSL para el servidor MySQL a continuación y cambie la ruta SSL por la suya.

ssl-ca=/etc/mysql/certs/ca.pem
ssl-cert=/etc/mysql/certs/server-cert.pem
ssl-key=/etc/mysql/certs/server-key.pem

Además, puede especificar la versión TLS de todos sus clientes y forzarlos a usar solo la conexión segura SSL usando la siguiente configuración.

#require_secure_transport=ON
tls_version=TLSv1.1,TLSv1.2

Guardar y cerrar.

Luego, reinicie el servicio MySQL para aplicar la nueva configuración y verifique la dirección IP del servidor MySQL usando el siguiente comando.

systemctl restart mysql
ss -plnt

Y obtendrá el servidor MySQL funcionando en la dirección IP de la red interna con SSL habilitado.

Configurar cliente y probar conexión SSL

Para conectarse al servidor MySQL desde otro host/cliente, debe crear un nuevo usuario de MySQL, copiar los certificados del cliente y agregar la configuración de MySQL para el cliente.

Inicie sesión en el shell de MySQL usando el siguiente comando.

mysql -u root -P 8320 -p

Ahora cree un nuevo usuario de MySQL para la conexión remota usando la siguiente consulta.

CREATE USER 'remoteuser'@'%' IDENTIFIED WITH mysql_native_password BY 'MyRemoteUserPasswordMySQL39==' REQUIRE SSL;
GRANT ALL PRIVILEGES ON *.* TO 'remoteuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Escriba 'salir ' para cerrar sesión en el shell de MySQL.

A continuación, debe copiar la CA y el certificado y la clave del cliente en la máquina del cliente utilizando el comando SCP como se muestra a continuación.

scp /etc/mysql/certs/ca.pem [email protected]:/certificates/directory/
scp /etc/mysql/certs/client-cert.pem [email protected]:/certificates/directory/
scp /etc/mysql/certs/client-key.pem [email protected]:/certificates/directory/

Después de eso, conéctese a su máquina cliente y cree una nueva configuración usando el editor vim.

vim ~/.my.cnf

Pegue la configuración del cliente MySQL como se muestra a continuación y cambie la ruta del certificado SSL del cliente por la suya.

[client]
ssl-ca=/home/gpk/certs/ca.pem
ssl-cert=/home/gpk/certs/client-cert.pem
ssl-key=/home/gpk/certs/client-key.pem

Guardar y cerrar.

Para conectarse al servidor MySQL remoto con un puerto personalizado, ejecute el siguiente comando 'mysql'.

mysql -u remoteuser -h 172.16.0.3 -P 8320 -p

Una vez que haya iniciado sesión, verifique el estado de su conexión usando la siguiente consulta.

STATUS
SELECT * FROM performance_schema.session_status
       WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');

A continuación se muestra el resultado que obtendrá.

Como puede verse, ha iniciado sesión con conexión segura SSL TLSv1.2 al servidor MySQL.

Como resultado, se ha habilitado el acceso remoto con una conexión segura SSL para MySQL Server.

Paso 6:instalar y configurar phpMyAdmin

En este paso, aprenderá cómo instalar la última versión de phpMyAdmin con el servidor web Apache. También aprenderá cómo conectarse al servidor MySQL en el host remoto con un puerto personalizado y también cómo conectarse de forma segura a través de SSL desde phpMyAdmin.

Antes de continuar, instale algunas dependencias de paquetes usando el comando apt a continuación.

sudo apt install apache2 libapache2-mod-php php-imagick php-phpseclib php-php-gettext php-common php-mysql php-gd php-imap php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-gmp unzip

A continuación, vaya al directorio '/var/www/html' y descargue el último código fuente de phpMyAdmin.

cd /var/www/html/
wget -q https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

Ahora extraiga el código fuente de phpMyAdmin y cambie el nombre al nuevo directorio llamado 'phpMyAdmin'.

tar -xf phpMyAdmin-latest-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages phpMyAdmin

A continuación, vaya al directorio '/var/www/phpMyAdmin' y copie el archivo de configuración predeterminado en 'config.inc.php'.

cd /var/www/html/phpMyAdmin/
cp config.sample.inc.php config.inc.php

Edite el archivo de configuración 'config.inc.php' usando el editor vim.

vim config.inc.php

Genere el código secreto de pez globo usando este enlace y péguelo en la línea 'blowfish_secret' como se muestra a continuación.

$cfg['blowfish_secret'] = '6}2]RFleN-JT=/vXD}L/0j0v.YALV/e3'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

A continuación, escriba los detalles de su servidor MySQL en la línea 'Configuración del servidor' como se muestra a continuación.

/**
 * Servers configuration
 */
$i = 0;

.....
/* Custom MySQL Server Configuration */
$cfg['Servers'][$i]['host'] = '172.16.0.3';
$cfg['Servers'][$i]['port'] = '8320';
.....

Después de eso, pegue la siguiente configuración para habilitar la comunicación SSL desde phpMyAdmin al servidor MySQL. Y asegúrese de cambiar la ruta de los certificados de cliente y CA por la suya y asegúrese de que el usuario 'www-data' pueda acceder a los certificados de cliente y CA.

/* SSL Configuration */
$cfg['Servers'][$i]['ssl'] = true;
$cfg['Servers'][$i]['ssl_key'] = '/opt/mysql/certs/client-key.pem';
$cfg['Servers'][$i]['ssl_cert'] = '/opt/mysql/certs/client-cert.pem';
$cfg['Servers'][$i]['ssl_ca'] = '/opt/mysql/certs/ca.pem';

/* Disable SSL Verification for Self-signed certificates */
/* The Good: Connection between phpMyAdmin and MySQL Server are Encrypted */
/* But you're still vulnerable with the MiTM */
$cfg['Servers'][$i]['ssl_verify'] = false;

/* Hide Some Databases */
$cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|sys|mysql)';

Guardar y cerrar.

Ahora cambie la propiedad del directorio 'phpMyAdmin' al usuario 'www-data'.

sudo chown -R www-data:www-data /var/www/html/phpMyAdmin

Y la instalación de phpMyAdmin y la configuración de phpMyAdmin se han completado.

Ahora inicie sesión en el servidor MySQL, verifique el estado SSL de MySQL, cree una nueva base de datos y un usuario para phpMyAdmin.

Inicie sesión en el servidor MySQL usando el siguiente comando.

mysql -u root -P 8329 -p

Ahora verifique el estado de SSL usando las siguientes consultas.

SHOW VARIABLES LIKE '%ssl%';
STATUS

A continuación se muestra el resultado que obtendrá.

Como se puede ver, el servidor MySQL está funcionando con SSL habilitado y está usando certificados SSL que hemos generado. También estamos conectados al servidor MySQL a través de la conexión segura SSL usando el archivo de configuración '~/.my.cnf'.

Luego, cree una nueva base de datos y un usuario llamado 'phpmyadmin' usando la siguiente consulta.

CREATE DATABASE phpmyadmin;
CREATE USER 'phpmyadmin'@'%' IDENTIFIED WITH mysql_native_password BY 'phpMyAdminAdmn352#$';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Escriba 'salir ' para cerrar la sesión de MySQL Shell.

Ahora abra su navegador web y escriba la dirección IP del servidor con la ruta de 'phpMyAdmin' en la barra de direcciones.

http://ip-del-servidor/phpMyAdmin/

En la página de inicio de sesión de phpMyAdmin, escriba el usuario 'phpmyadmin' con la contraseña que hemos creado en la parte superior y haga clic en el botón 'IR'.

Y obtendrá el panel de phpMyAdmin como se muestra a continuación.

Como resultado, se completó la instalación y configuración de phpMyAdmin.

Paso 7:Crear usuario y base de datos MySQL

Para este paso, aprenderá el uso principal de las consultas de MySQL para administrar usuarios, bases de datos y el comando básico mysqldump para la copia de seguridad de la base de datos.

Conectarse al servidor MySQL y comprobar el estado de la conexión

Para conectarse al servidor MySQL, puede usar la línea de comando 'mysql'. Y de forma predeterminada, todas las conexiones desde el servidor MySQL local utilizarán el socket de Unix, que la conexión SSL no hace que las conexiones sean más seguras.

Conéctese al servidor MySQL con la configuración predeterminada usando el siguiente comando.

mysql -u username -p

Si su servidor MySQL se ejecuta en el puerto personalizado, use la opción '-P puerto' a continuación.

mysql -u root -P 8320 -p

Si su servidor MySQL se ejecuta en la red local con el puerto personalizado, use las opciones 'h host/IP Address' y '-P port' a continuación.

mysql -u root -h 172.16.0.3 -P 8320 -p

Una vez que se haya conectado a su servidor MySQL, ejecute la siguiente consulta para verificar el estado de la conexión.

STATUS

Y obtendrá el siguiente resultado.

Y estás conectado con éxito al servidor MySQL.

Crear y mostrar base de datos

Después de conectarse al shell MySQL, aprenderá cómo crear la base de datos MySQL, seleccionar la base de datos, crear tablas e insertar datos.

Para crear una nueva base de datos MySQL, utilice la siguiente consulta.

CREATE DATABASE hakase_db;
CREATE DATABASE yume_db;
CREATE DATABASE juice_db;

Ahora verifique todas las bases de datos de listas en su servidor MySQL usando la siguiente consulta.

SHOW DATABASES;
SHOW DATABASES LIKE "%db%";

A continuación, puede cambiar y seleccionar la base de datos utilizando la siguiente consulta.

USE hakase_db;

A continuación, puede crear una nueva tabla en su base de datos usando la consulta 'CREATE TABLE' como se muestra a continuación.

CREATE TABLE users (first VARCHAR(20), last VARCHAR(20),
        email VARCHAR(20), birth DATE, country VARCHAR(20));

Ahora puede usar 'DESCRIBE table-name' para verificar todos los campos en su base de datos.

DESCRIBE users;

Y obtendrá todos los campos de detalles en la tabla 'usuarios'.

A continuación, puede insertar datos manualmente en su tabla utilizando la consulta 'INSERTAR' como se muestra a continuación.

INSERT INTO users
       VALUES ('Mark','Mine','[email protected]','1999-03-20','Canada');

Ahora ha insertado con éxito datos en la base de datos MySQL. Luego, verifique todos los datos en la tabla usando la consulta 'SELECCIONAR' como se muestra a continuación.

SELECT * FROM users;
SELECT email, birth, country FROM users;

Y obtendrá todos los datos de su tabla.

Crear usuario de MySQL

Después de crear la base de datos, aprenderá cómo crear un usuario en el servidor MySQL y otorgar privilegios de usuario a las bases de datos.

La consulta básica de MySQL para crear un usuario es mediante la consulta 'CREATE USER'. Luego puede otorgar privilegios de la base de datos a su usuario usando el comando 'GRANT' seguido de sus opciones. Y por último deberás recargar las tablas de permisos para aplicar los nuevos cambios.

  • Lo básico

Cree un nuevo usuario llamado '[email protected]' con la contraseña 'MyHakasePasswordMySQL39==' y conceda todos los privilegios de 'hakase_db' al usuario utilizando la siguiente consulta.

CREATE USER 'hakase'@'localhost' IDENTIFIED BY 'MyHakasePasswordMySQL39==';
GRANT ALL PRIVILEGES ON hakase_db.* TO 'hakase'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Información adicional, el nombre de host '[email protected]' es parte del nombre de la cuenta. El '@localhost' solo permite que el usuario se conecte desde el servidor local. Si no se proporciona, el valor predeterminado es '%', lo que permite a los usuarios de todas partes.

  • Crear usuario para acceso remoto con complemento de autenticación específico

Crearemos un nuevo usuario que solo puede iniciar sesión desde la dirección IP específica del host y usar el complemento de autenticación particular.

Crearemos un nuevo usuario llamado 'yume' que se conecta a través de la IP del cliente '172.16.0.4' con el complemento de autenticación 'mysql_native_password', y el usuario solo podrá acceder a la base de datos 'yume_db'.

CREATE USER 'yume'@'172.16.0.4' IDENTIFIED WITH mysql_native_password BY 'MyYumePasswordMySQL39==';
GRANT ALL PRIVILEGES ON yume_db.* TO 'yume'@'172.16.0.4' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Como resultado, el usuario 'yume' solo se conectará al servidor MySQL con la dirección IP '172.16.0.4'. De lo contrario, MySQL Server denegará la autenticación del usuario.

  • Crear usuario y forzar el uso de una conexión SSL cifrada

Para obligar al usuario a utilizar la conexión segura SSL, puede utilizar la opción 'REQUERIR SSL'. Si falla la conexión segura, no podrá conectarse al servidor MySQL (no podrá establecer las conexiones).

Para un escenario más seguro, puede usar la consulta 'REQUIRE X509', lo que significa que la conexión al servidor MySQL solo se estableció cuando el usuario/máquina cliente proporcionó los certificados de cliente y CA.

Cree un nuevo usuario llamado 'jugo' con el nombre de host '%'. Esta opción de nombre de host '%' permite que el usuario 'juice' se conecte desde cualquier dirección IP, pero la conexión se establecerá cuando la máquina cliente proporcione los certificados de CA y de cliente.

CREATE USER 'juice'@'%' IDENTIFIED WITH mysql_native_password BY 'MyJuicePasswordMySQL39==' REQUIRE X509;
GRANT ALL PRIVILEGES ON juice_db.* TO 'juice'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Como resultado, el usuario 'jugo' puede conectarse al servidor MySQL cuando la máquina proporciona certificados de CA y de cliente.

Mostrar todos los usuarios y subvenciones disponibles

Después de crear todos los usuarios, compruebe todos los usuarios mediante las siguientes consultas.

SELECT User, Host FROM mysql.user;
SELECT User, Host, plugin FROM mysql.user;

Ahora obtendrá los detalles del usuario, el host y los complementos de autenticación que utilizan los usuarios.

A continuación, verifique todos los privilegios de los usuarios utilizando la consulta 'MOSTRAR CONCESIONES' como se muestra a continuación.

SHOW GRANTS FOR 'hakase'@'localhost';
SHOW GRANTS FOR 'yume'@'172.16.0.3';
SHOW GRANTS FOR 'juice'@'%';

Ahora obtendrá privilegios detallados de sus usuarios.

Como resultado, ha aprendido el uso principal de MySQL Server, incluida la creación de una base de datos, la creación de una tabla, la inserción de datos en la tabla, la creación y visualización de usuarios y la visualización de los privilegios de cada usuario.

Paso 8 - Adicional:Crear base de datos MySQL de copia de seguridad incremental

Para este paso, aprenderá el uso principal del comando 'mysqldump' para realizar copias de seguridad de todas las bases de datos MySQL. La línea de comandos 'mysqldump' le permite respaldar todas las bases de datos, bases de datos específicas o múltiples, y tablas de respaldo.

Antes de continuar, cree el directorio de copia de seguridad y acceda a él.

mkdir -p ~/backup; cd ~/backup

Y ya está listo para crear copias de seguridad de bases de datos MySQL usando la utilidad 'mysqldump'.

Copia de seguridad de todas las bases de datos

Para hacer una copia de seguridad de todas las bases de datos en el servidor MySQL, use el comando mysqldump con la opción '--add-databases' a continuación.

mysqldump -u root -P 8320 --all-databases -p > alldbs.sql

Ahora obtendrá todas las copias de seguridad de sus bases de datos en un solo archivo SQL llamado 'alldbs.sql'.

Copia de seguridad de base de datos específica

Para hacer una copia de seguridad de la base de datos MySQL específica, incluya el nombre de su base de datos en el siguiente comando mysqldump.

mysqldump -u root -P 8320 -p hakase_db > backup_hakase_db.sql

Como resultado, obtendrá el archivo de copia de seguridad SQL de la base de datos 'hakase_db' llamada 'backup_hakase_db.sql' en el directorio de copia de seguridad.

Copia de seguridad de múltiples bases de datos

Si desea crear una copia de seguridad de varias bases de datos (no todas las bases de datos en el servidor MySQL), use la opción '--bases de datos' a continuación.

mysqldump -u root -P 8320 -p --databases yume_db juice_db > multi-db-once.sql

Como resultado, se ha creado el archivo de respaldo para sus dos bases de datos 'yume_db' y 'juice_db', llamado archivo 'multi-db-once.sql'.

Copia de seguridad automática de la base de datos MySQL

Para configurar una copia de seguridad automática para MySQL, usaremos el 'cron' de Linux. Crearemos un nuevo script bash para bases de datos MySQL y lo ejecutaremos automáticamente en un momento específico usando Linux Cron.

Antes de continuar, inicie sesión en el shell de MySQL con el siguiente comando.

mysql -u root -P 8320 -p

Cree un nuevo usuario de respaldo con algunos privilegios usando la siguiente consulta.

CREATE USER 'backup'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyBackupPasswordMySQL39==';
GRANT PROCESS, SELECT, LOCK TABLES, SHOW VIEW, EVENT ON *.* TO 'backup'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ahora escriba 'salir' para cerrar sesión en el shell de MySQL.

A continuación, cree un nuevo directorio de copia de seguridad '/opt/backup/mysql' para almacenar todos los archivos de copia de seguridad de su base de datos.

mkdir -p /opt/backup/mysql

Después de eso, vaya al directorio '/usr/local/sbin' y cree un nuevo archivo bash 'auto_backup.sh' usando el editor vim.

cd /usr/local/sbin/
vim auto_backup.sh

Cambie los detalles de usuario, contraseña y puerto con los suyos y pegue la configuración en él.

#!/bin/bash

# Basic configuration: datestamp e.g., YYYYMMDD
DATE=$(date +"%Y%m%d")

# Location of your backups (create the directory first!)
BACKUP_DIR="/opt/backup/mysql"

# MySQL login details
MYSQL_USER="backup"
MYSQL_PASSWORD="MyBackupPasswordMySQL39=="

# MySQL executable locations (no need to change this)
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# MySQL databases you wish to skip
SKIPDATABASES="Database|information_schema|performance_schema|mysql"

# Number of days to keep the directories (older than X days will be removed)
RETENTION=14

# ---- DO NOT CHANGE BELOW THIS LINE ------------------------------------------
#
# Create a new directory into the backup directory location for this date
mkdir -p $BACKUP_DIR/$DATE

# Retrieve a list of all databases
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Dumb the databases in seperate names and gzip the .sql file
for db in $databases; do
echo $db
$MYSQLDUMP --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Remove files older than X days
find $BACKUP_DIR/* -mtime +$RETENTION -delete

Guardar y cerrar.

Now make the 'auto_backup.sh' script executable and run the script for testing purposes.

chmod +x auto_backup.sh
./auto_backup.sh

As a result, you will get your database backup files on the '/opt/mysql/backup-current-date' directory. Check using the following command.

ls -lah /opt/backup/mysql/
ls -lah /opt/backup/mysql/datedir/

A continuación se muestra el resultado que obtendrá.

As a result, you will get compressed files of your database backup, which means the script is working.

Next, create a new cronjob that will be running the MySQL auto backup script 'auto_backup.sh' every day at the time '00:00'.

Set the default editor to 'vim' and create a new cronjob as user root using the following command.

export EDITOR=vim
crontab -u root -e

Now paste the following configuration into it.

0 0 * * * sh /usr/local/sbin/auto_backup.sh

Guardar y cerrar.

The new cronjob for user root has been created. Check all cronjob list for the root user using the following command.

crontab -u root -l

And you will get details cron configuration for the user root.

As a result, you've successfully set up the automatic MySQL database backup using the bash script and Linux Cron.

Finally, you've learned how to install and secure the MySQL Database Server on the Debian Buster 10 with phpMyAdmin web-based database management. Also, you've learned the basic MySQL query for managing users, create database and tables, and using the mysqldump utility for backup databases.

Referencias

  • https://dev.mysql.com/doc/refman/en/
  • https://docs.phpmyadmin.net/en/latest/index.html

Debian
  1. Cómo instalar el servidor Redis en Debian 11

  2. Cómo instalar MySQL 8.0/5.7 en Debian 11/Debian 10

  3. Cómo instalar el servidor MySQL en Debian 9

  4. Cómo instalar MySQL Workbench en Debian 10

  5. Cómo instalar MySQL en Debian 11

Cómo instalar Todoman en el servidor Debian 11

Cómo instalar FastPanel en Debian 11

Cómo instalar I2P en el servidor Debian:

Cómo instalar el servidor MySQL 8.0 en Debian 11 Bullseye

Cómo instalar VNC en Debian 10

Cómo instalar el servidor VNC en Debian 11