Instalar MySQL manualmente en Windows sin usar el instalador de MySQL

Un breve recorrido por la instalación manual de MySQL en Windows

Imagen 1

Introducción

Oracle publica un instalador independiente de MySQL diseñado para facilitar la instalación y configuración de productos MySQL que se ejecutan en Microsoft Windows. Aquí está el enlace para el instalador:

Dado que hay un instalador similar a un asistente, ¿por qué hacer esto manualmente?

  • Puede instalar varias instancias de la misma versión de MySQL
  • Mayor comprensión y conocimiento de cómo funciona la configuración de MySQL.
  • Mejor control y más flexibilidad en la configuración de MySQL

Guía oficial de instalación de MySQL: https://dev.mysql.com/doc/refman/8.0/en/installing.html

Aquí hay unos pasos de instalación resumidos de manera simplificada:

  1. Descarga Microsoft Visual C++ 2019 Redistributable Runtime.
  2. Descarga los binarios de MySQL.
  3. El archivo comprimido típicamente se llama mysql-x.x.x-winx64.zip, donde ‘x.x.x‘ representa el número de versión. Por ejemplo, mysql-8.0.35-winx64.zip es la última versión al momento de escribir esto.
  4. URL de descarga oficial (para la versión comunitaria): https://dev.mysql.com/downloads/mysql/
  5. Extrae el archivo comprimido en una carpeta, esta será la carpeta raíz para ejecutar el servidor MySQL.
  6. Crea un archivo de opciones (my.ini) en la carpeta raíz.
  7. Inicializa el directorio “Datos”.
  8. Instala el servicio de Windows para el servidor MySQL.
  9. Inicia/Detiene el servicio del servidor MySQL.
  10. Establece/Cambia la contraseña del usuario “root”.

¡Comencemos!

MySQL Server para Windows requiere Microsoft Visual C++ 2019 Runtime. Puedes descargar “Visual C++ Redistributable para Visual Studio 2015-2022” en el siguiente enlace:

https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

Supongamos que extraes el archivo comprimido en la siguiente carpeta (puede ser en cualquier ubicación):

C:\mysql

La carpeta raíz tendrá el siguiente contenido extraído:

C:\mysql\bin\C:\mysql\docs\C:\mysql\include\C:\mysql\lib\C:\mysql\share\C:\mysql\LICENSEC:\mysql\README

Crea un archivo de opciones en la carpeta raíz y nómbralo my.ini. Sin embargo, no es necesario crear un archivo de opciones si planeas utilizar todos los parámetros predeterminados.

Ubicación del archivo de opciones:

// ubicación predeterminada<carpeta raíz>\my.ini// ejemploC:\mysql\my.ini

Puedes encontrar documentación sobre la ubicación predeterminada y los detalles de un archivo de opciones aquí:

Un archivo de opciones ajusta el comportamiento de un servidor MySQL, como cambiar su límite de acceso a la memoria, rendimiento y las diversas formas en que maneja acciones específicas. .

A continuación se muestra un ejemplo del archivo de opciones que utilicé en uno de los servidores MySQL:

[mysqld]max_allowed_packet=1Ginnodb_buffer_pool_size=500Msql-mode="STRICT_TRANS_TABLES"authentication_policy=mysql_native_password

Las opciones que no se especifican en el archivo de opciones aplicarán valores predeterminados. Algunas de las opciones predeterminadas notables son:

[client]port=3306[mysqld]# carpeta raíz: <root>basedir=C:/mysqlorbasedir=C:\\mysql# carpeta de datos: <root>/datadatadir=C:/mysql/dataordatadir=C:\\mysql\\dataport=3306# Codificación de caracteres predeterminada# predeterminados en MySQL 8character_ser_server=utf8mb4collation_server=utf8mb4_0900_ai_ci# predeterminados en MySQL 5.7 y anteriorescharacter_ser_server=latin1collation_server=latin1_swedish_ci# https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html# https://dev.mysql.com/doc/refman/8.0/en/storage-engines.htmldefault_storage_engine=InnoDB# https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size# predeterminado: 130 MB# para almacenar en caché las tablas InnoDB y los datos de índice en memoria para mejorar el rendimientoinnodb_buffer_pool_size=134217728# longitud máxima de una única consulta# predeterminado: 64 MBmax_allowed_packet=67108864# define qué sintaxis SQL debe admitir MySQL y# qué tipo de validación de datos debe realizar# https://dev.mysql.com/doc/refman/8.0/en/sql-mode.htmlsql-mode="ONLY_FULL_GROUP_BY,           STRICT_TRANS_TABLES,          NO_ZERO_IN_DATE,          NO_ZERO_DATE,          ERROR_FOR_DIVISION_BY_ZERO,          NO_ENGINE_SUBSTITUTION"# utilizando la contraseña de usuario heredada de MySQL que es compatible con versiones antiguas de MySQL 5authentication_policy=mysql_native_password# esta es la opción predeterminada en MySQL 8, que proporciona una seguridad más sólidaauthentication_policy=caching_sha2_password

Aquí me gustaría tomar un tiempo para agregar algunas explicaciones sobre los valores predeterminados de “sql-mode”.

ONLY_FULL_GROUP_BY - cuando está habilitado=================================-- esto provocará un errorselect id, groupid, groupname from sales group by groupid;-- la cláusula group by debe incluir el resto de las columnasselect id, groupid, groupname from sales group by groupid, id, groupname;STRICT_TRANS_TABLES - cuando está habilitado=================================-- adherirse estrictamente a los tipos de datos y valores definidos en el esquema de la tabla,-- cualquier dato incorrecto ingresado dará como resultado un error-- ejemplo:CREATE TABLE test (    id INT NOT NULL AUTO_INCREMENT,    total INT NOT NULL,    PRIMARY KEY (id));-- Esto provocará un error, `total` no permite valores nulosINSERT INTO test (total) VALUES (NULL);NO_ZERO_IN_DATE, NO_ZERO_DATE - cuando está habilitado=================================-- no se permiten los siguientes valores de fecha cero:0000-00-000000-00-00 00:00:002023-00-00ERROR_FOR_DIVISION_BY_ZERO=================================-- no se puede dividir nada entre cero- cuando está habilitado1000 / 0 = error- cuando está deshabilitado1000 / 0 = nuloNO_ENGINE_SUBSTITUTION=================================-- impide que la base de datos reemplace automáticamente un-- motor de almacenamiento no disponible con el motor predeterminado, asegurando que las tablas-- solo se creen con el motor especificado.- cuando está habilitadoCREATE TABLE example_table (    id INT,    data VARCHAR(100)) ENGINE=MERGE; -- Esto fallará si el motor MERGE no está disponible. - cuando está deshabilitado-- el ENGINE=MERGE se convertirá en Innodb

Supongamos que tenemos otra instancia de MySQL que necesita ejecutarse de una manera específica y poco común. El archivo de opciones podría verse así:

[client]port = 4001[mysqld]port = 4001basedir = D:/database/engine/mysql/v8.0.25/datadir = E:/database/data/mysql/4001/max_allowed_packet = 1Ginnodb_buffer_pool_size = 1G# Ejecutar esta instancia de MySQL como replicación# Opciones especiales para la configuración de replicaciónserver-id = 2master-host = 192.168.0.254master-user = replication_usermaster-password = replication_passwordmaster-port = 3306read-only = 1

Si te preguntas qué es una configuración de replicación en el contexto de MySQL, es una configuración donde los datos de un servidor MySQL (el maestro) se copian automáticamente y se mantienen actualizados en otro servidor (el replicado o esclavo).

*Nota lateral para la configuración de replicación: Se debe crear un usuario dedicado en el servidor MySQL “Master”. Aquí tienes un ejemplo rápido de las declaraciones SQL para crear el usuario:

-- crear el usuarioCREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';-- otorgar los permisos para realizar tareas de replicaciónGRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';-- asegurarse de que los cambios surtan efectoFLUSH PRIVILEGES;

Siguiente paso: inicializar el directorio “Data”

Ejecuta “CMD” (o Command Prompt) como administrador.

Ve al directorio BIN y ejecuta uno de los siguientes comandos. En el Command Prompt, se verá algo como esto:

[CMD]// ir al discoC:// ir al directorio BINCD C:\mysql\bin

Inicializa el directorio “data” con el siguiente comando:

[CMD]// Método 1:// asignar una contraseña en blanco para el usuario rootmysqld --initialize-insecure// Método 2:// asignar una contraseña aleatoria para el usuario root, obtener la contraseña en el archivo de registro de erroresmysqld --initialize// Definir manualmente la ubicación del archivo de opciones si no se encuentra en la ruta predeterminadamysqld --initialize-insecure --defaults-file=C:\other\folder\my.inimysqld --initialize --defaults-file=C:\other\folder\my.ini

Como se mencionó anteriormente, la ubicación predeterminada del archivo de opciones es relativa a mysqld.exe.

// ubicación de mysqld.exe:<ruta>/bin/mysqld.exe// se espera que el archivo de opciones se encuentre en:<ruta>/my.iniEjemplo de la ruta de mysqld.exe:C:\database\mysql\v8.0.35\bin\mysqld.exeRuta esperada por defecto para el archivo de opciones:C:\database\mysql\v8.0.35\my.ini

Esto creará un directorio data en el <directorio raíz>. Ejemplo:

C:\database\mysql\v8.0.35\data// De acuerdo con el ejemplo proporcionado en el bloque de código anterior

Si inicializas el directorio “data” usando el comando “mysqld –initialize”, puedes obtener la contraseña en el archivo de registro de errores, que es el nombre del archivo de registro: <nombre de tu computadora>.err. Siguiendo el ejemplo anterior, sería algo como

C:\database\mysql\v8.0.35\data\mypcname.err

Si algo sale mal, puedes encontrar pistas sobre la causa de los errores en el archivo de registro de errores. Si la inicialización tiene éxito, el archivo de registro de errores se verá algo como esto:

(Supongamos que ejecutas la inicialización con: mysqld --initialize)

2023-11-17T13:12:22.493220Z 1 [System] [MY-013576] [InnoDB] Iniciando la inicialización de InnoDB.2023-11-17T13:12:23.244460Z 1 [System] [MY-013577] [InnoDB]La inicialización de InnoDB ha finalizado.2023-11-17T13:12:25.271888Z 6 [Note] [MY-010454] [Server]Se ha generado una contraseña temporal para root@localhost: cQ<l/vxC0;P!

Inicia el servidor MySQL manualmente:

// cuando el archivo de opciones se encuentra en la ubicación predeterminadamysqldor// cuando el archivo de opciones se encuentra en otro lugarmysqld --defaults-file=C:\dbconfig\my\heavy-ram.ini

Instalar un servicio de Windows para el servidor MySQL

Hay 2 formas de instalar un servicio de Windows para ejecutar el servidor MySQL.

(Instalar servicio) Método 1: Usando el comando de Windows CMD “sc”.

Nota: El servicio se ejecutará con el privilegio de “LocalSystem”, lo cual es bueno para el servidor MySQL.

Sintaxis básica:

[CMD]sc create <nombre_del_servicio> binPath= "<ruta_de_mysqld> <ruta_del_archivo_de_opciones> <nombre_del_servicio>"start= <boot|system|auto|demand|disabled|delayed-auto>

Ejemplos:

[CMD]Ejemplo 1:sc create MySQL8.0.35 binPath= "C:\mysql\bin\mysqld.exe MySQL8.0.35" start= autoEjemplo 2:sc create MySQL8 binPath= "C:\mysql\bin\mysqld.exe MySQL8" start= autoEjemplo 3:sc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe \"MySQL 8\"" start= auto

Incluye la ruta del archivo de opciones (my.ini) en binPath.

[CMD]// ejecutar en una sola líneaEjemplo 1:sc create MySQL8 binPath= "C:\mysql\bin\mysqld --defaults-file=C:\mysql\my.ini MySQL8" start= autoEjemplo 2:sc create "MySQL 8" binPath= "\"C:\mysql 8\bin\mysqld\" --defaults-file=\"C:\mysql 8\my.ini\" \"MySQL 8\"" start= auto

Nota: La siguiente sintaxis es incorrecta:

[CMD]// demostración incorrecta:// debe haber un espacio después del signo igual '='.sc create "MySQL8" binPath="C:\mysql\bin\mysqld.exe MySQL8" start=auto// el nombre del servicio debe incluirse al final de binPathsc create "MySQL8" binPath= "C:\mysql\bin\mysqld.exe" start= auto// el nombre del servicio con un espacio en blanco no está envuelto entre comillas dobles en binPathsc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe MySQL 8" start= auto

Si el archivo de opciones no se encuentra en las ubicaciones predeterminadas, puedes especificar manualmente la ruta como argumento (o parámetro) junto con binPath. Aquí tienes un ejemplo:

// ejecuta lo siguiente en una sola líneasc create MySQL8binPath= "\"C:\mysql\bin\mysqld.exe\" --defaults-file=\"C:\dbconfig\my-heavy-ram.ini\" MySQL8"start= auto

Inicia manualmente el servicio por primera vez:

[CMD]net start MySQL8.0.35ornet start MySQL8ornet start "MySQL 8"

Para detener el servicio:

[CMD]net stop MySQL8.0.35ornet stop MySQL8ornet stop "MySQL 8"

Para eliminar el servicio:

[CMD]sc delete MySQL8.0.35orsc delete MySQL8orsc delete "MySQL 8"

Para editar el servicio:

[CMD]// para cambiar binPathsc config MySQL8 binPath= "C:\db-engine\mysql\v8\bin\mysqld MySQL8"// para cambiar el tipo de inicio de servicosc config "MySQL 8" start= auto

(Instalar Servicio) Método 2: Usando la función de instalación interna mysqld de MySQL:

[CMD]// instalar el serviciomysqld --install "MySQL8"// especificar la ruta del archivo de opcionesmysqld --install "MySQL8" --defaults-file="C:\mysql\my.ini"

Cambia el modo de inicio del servicio de “demanda/manual” a “auto”, luego inicia el servicio:

// cambia el modo de inicio de "manual" a "auto"sc config "MySQL8" start= auto// inicia manualmente el servicio por primera vezenet start "MySQL8"// detiene el servicienet stop "MySQL8"

Detén manualmente el servidor de MySQL sin usar el Servicio de Windows:

[CMD]mysqladmin -u root -p -h localhost --port 3306 shutdown

Establecer / Cambiar la contraseña del usuario “root”.

En CMD, aún en la carpeta “BIN”, usa el programa “mysql” para ingresar al servidor:

[CMD]// usando el puerto predeterminado 3306mysql -u root -p -h localhost// si el servidor se ejecuta en un puerto diferente, como 4001mysql -u root -p -h localhost --port 4001
  • u : nombre de usuario
  • -p : solicitar contraseña
  • -h : ubicación del servidor
  • --port : número de puerto del servidor MySQL

Siguiente, MySQL solicitará una contraseña. Si inicializas los datos con mysqld --initialize-insecure, la contraseña estará en blanco. Para la inicialización con mysqld --initialize, se genera una contraseña temporal de root; consulta el archivo de registro de errores para buscar la contraseña.

Para establecer o cambiar la contraseña:

[CMD/MySQL]alter user 'root'@'localhost' identified by 'aquí tu contraseña';

Listo. El servidor de MySQL está ahora preparado para su uso. ¡Feliz bases de datos!


Leave a Reply

Your email address will not be published. Required fields are marked *