PDA

Ver la Versión Completa : Comprobar si está instalado MYSQL


fmatias
26-03-2008, 14:19:32
Buenas tardes,

Estoy preparando mi asistente para la instalación de un programa bajo delphi 7 con bases de datos mysql.

Quisiera saber cómo comprobar si mysql está instalado en windows para no volver a instalarlo.

Gracias.

Fco. Matías.

cHackAll
26-03-2008, 15:07:21
if not LongBool(LoadLibrary('libmysql.dll')) then
ShowMessage('ERROR');

LoadLibrary busca en el path la librería necesaria para comunicarce con el servidor de BDs, si no puedes cargar dicha librería significa que puede no estar instalado el MySQL.

Saludos

AzidRain
26-03-2008, 17:21:55
Pero la inexistencia de la biblioteca de enlace dinámico,la cual por cierto varía de acuerdo al componente que ocupamos, no indica per se que MySQL esté o no instalado. Y aún así, podría estar instalado pero no cargado o iniciado el servicio.

cHackAll
26-03-2008, 17:49:30
Pero la inexistencia de la biblioteca de enlace dinámico,la cual por cierto varía de acuerdo al componente que ocupamos, no indica per se que MySQL esté o no instalado. Y aún así, podría estar instalado pero no cargado o iniciado el servicio.

Muy cierto amigo Azid... pero el servicio del MySQL puede tener el nombre que el usuario elija o puede depender del instalador (Ej. Wamp, xamp, AppServ, localhost [dec], etc) entonces no podemos buscar un nombre o un patron en el nombre de un servicio. Tampoco podemos buscar una ruta específica por el mismo motivo... problema que afecta hasta la busqueda en el registro.

Cual es el factor común de todos estos? la disponibilidad de la LIBRERIA (no componente), que permite la comunicación con el Servidor. Claro; ésta, mi humilde impresión y cualquier otro método (efectivo), sera doblemente bienvenido.

Saludos

keyboy
26-03-2008, 17:59:15
Pero están hablando de dos cosas distintas. Por un lado está el servidor y por otro lado el cliente (libmysql.dll) y pueden estar instalados uno u otro, ambos o ninguno. De hecho, creo que el compañero fmatias debería especificar qué entiende por tener MySQL instalado; si se refiere al servidor, o se refiere a la biblioteca libmysql.dll.

Bye

AzidRain
26-03-2008, 18:40:47
Olvidamos que el servidor podría estar instalado y ejecutándose en otro equipo por lo que nuevamente, el que no exista la dll en el equipo local no es señal de que no esté instalado el servidor.

Por otro lado....MySQL NO PUEDE DISTRIBUIRSE COMO PARTE DE UN PRODUCTO ADICIONAL a menos que cuentes con la licencia comercial del mismo.

Tu instalador por lo tanto NO DEBE instalar MySQL. Si revisas la gran cantidad de productos que hay que usan tablas MySQL, ninguno lo instala. De hecho tanto WAMP como XAMPP lo instalan pero como programa independiente y no como parte del producto, aunque de hecho ni uno ni otro son productos sino meras recopilaciones.

Lo recomendable es que instales MySQL por serparado y tu instalador, eso sí, solicite datos del servidor con el que va a trabajar (dirección, usuario, etc.) y a partir de ahi crear las bases de datos y tablas necesarias, pero te repito, esto lo debe hacer de manera separada e independiente de MySQL.

keyboy
26-03-2008, 18:53:07
Olvidamos que el servidor podría estar instalado y ejecutándose en otro equipo por lo que nuevamente, el que no exista la dll en el equipo local no es señal de que no esté instalado el servidor.


Yo no lo olvidé y por ello es el comentario que hice.

Bye

cHackAll
26-03-2008, 21:01:38
Olvidamos que el servidor podría estar instalado y ejecutándose en otro equipo por lo que nuevamente, el que no exista la dll en el equipo local no es señal de que no esté instalado el servidor.Yo no lo olvidé y por ello es el comentario que hice.

Bye

La forma de comprobar si existe el MySQL (demonio), es mediante el cliente (APIs definidas en libmysql.dll o myodbcX.dll); pues como ya he expuesto comprobar las variaciones de nombre de servicio, ubicación/nombre del archivo(servicio), registro, o puerto de escucha es más complicado que la línea que he puesto en mi primer post.

keyboy
26-03-2008, 21:14:14
No es correcto. Puedes no tener el servidor en marcha, o incluso no tenerlo instalado en absoluto, y tener esa librería. El código que pones la cargará sin problema y no marcará el error. Como ya se ha mencionado, el servidor puede residir en otra máquina.

Por eso digo, si por tener instalado MySQL se entiende tener esa librería entonces tu código la detectará. Pero eso es distinto de tener el demonio activo o siquiera instalado.

Lo recíproco también es cierto. Es decir, puedes tener el servidor instalado pero no tener esa librería. Incluso hay componentes como MyDac que pueden acceder a un servidor MySQL sin la librería.

Bye

cHackAll
26-03-2008, 21:24:11
Tienes toda la razon, con tal idea dime; cómo vas a verificar si el demonio está corriendo en localhost o en cualquier otro equipo remoto? :rolleyes:

keyboy
26-03-2008, 21:34:59
Es una buena pregunta, a la que áun hay que contestar :)

Posiblemente usaría libmysql, pero no sólo cargándola, sino tratando de establecer una conexión con el servidor. O quizá con telnet, a ver si responde el puerto 3306 o donde se supone que esté instalado.

Bye

cHackAll
26-03-2008, 21:46:57
Incluso hay componentes como MyDac que pueden acceder a un servidor MySQL sin la librería.

What software should be installed on a client computer for MyDAC-based applications to work?

Usually, you do not need any additional files. The only exceptions to this rule are listed below:

If you are using MySQL Embedded server (if you are using TMyConnection with TMyConnection.Options.Embedded = True or TMyEmbConnection), you need the server itself (libmysqld.dll) and the service files for it, for example errmsg.sys.
If you are connecting in Client mode, (TMyConnection.Options.Direct = False), you need libmysql.dll.
If you are using SSL (TMyConnection.Options.Protocol = mpSSL), you need the OpenSSL library files - ssleay32.dll and libeay32.dll.O quizá con telnet, a ver si responde el puerto 3306 o donde se supone que esté instalado.

...
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
...

Efectivamente la conexion se la debe realizar, mediante alguna libreria.

PD: habra que mover el hilo a la sección de debates :rolleyes:

Saludos

keyboy
26-03-2008, 22:07:06
No entiendo la referencia a la documentación de MyDac. De hecho confirma lo que dije a ese respecto: si se usa la opción (por defecto) TMyConnection.Options.Direct = true, no es necesaria ninguna librería.

Y el INI, ¿qué con eso? Si el instalador lo que está verificando es la instalación del demonio, pues algo debe saber de antemano, como es el puerto que esté escuchando. De lo contrario estamos hablando aún más en el aire, y la pregunta original debiera ser: ¿cómo saber si [el servidor de] MySQL está instalado en tal puerto?

No sé bien porqué deba ser un debate. ¿Piensas aún que LoadLibrary es suficiente para determinar si MySQL está instalado? ;)

Yo más bien pienso que hay que seguir buscando opciones de cómo determinarlo. Pero, sobre todo, que el compañero aclare qué es exactamente a lo que se refiere.

Bye

cHackAll
26-03-2008, 22:33:07
No sé bien porqué deba ser un debate.

Cierto; esta bien donde está!

port=3666

MyDAC; Can't connect to MySQL server on '???'...

telnet y "otros" tampoco retornan una respuesta satisfactoria ante tal eventualidad; ahora estamos hablando (como tu ya dijiste), de una pregunta genérica a la cual he respondido de la forma más objetiva posible, y como ya le dije al compañero AzidRain;

...ésta, mi humilde impresión y cualquier otro método (efectivo), sera doblemente bienvenido.

keyboy
27-03-2008, 01:47:37
A ver, creo que empiezo a ver por donde vas. Pero es que eres un poco escueto (no lo digo en mal plan) y si me pones un fragmento de un INI y un extracto de un DOC sin más explicación, pues bueno, yo al menos no soy tan clarividoso.

Es cierto, telnet tampoco va a ser infalible. De hecho no lo dije con mucho convencimiento


O quizá con telnet, a ver si responde el puerto 3306 o donde se supone que esté instalado


Yo a lo que voy es a que ninguno de los métodos expuestos es fiable. Pero, insisto, el método del LoadLibrary únicamente determina una cosa: hay o no una librería libmysql.dll en el path de Windows. Nada más. La existencia o no de dicha librería tiene poco que ver con la disponibilidad del servidor (demonio), como ya he expuesto.

Bye

AzidRain
27-03-2008, 04:34:55
Pero seguimos cayendo en lo mismo, supongamos el siguiente pseudocódigo para el hipotético instalador:


Si Existe la dll
Si puedo conectarme a MySQL en el puerto 3306 en localhost
Creo las bases de datos y las tablas y procedo a la instalación.
de lo contrario
Error: No es posible conectarme al servidor en localhost
de lo contrario
No está instalado (!!) MySQL



Por definición un instalador de cualquiera que sea el programa no tiene por que leches presuponer que ya se encuentra instalado el servidor fulano, mengano o perengano. El servidor de bases de datos es un programa INDEPENDIENTE de la aplicación en cuestión por lo que lo más que puede hacer el instalador es preguntar en donde se supone que está instalado y actuar en consecuencia:



Desempaqueta la DLL que usa el componente mediante el cual te conectas a MySQL
(Zeos, MyDac, "MyAbuela") en la carpeta del instalador.
Escribe "Te advierto que para instalar este programa es necesario que previamente esté
instalado MySQL y que hayas dado de alta un usuario válido con privilegios en la base de datos "xxxx".
Pregunta "Dame la dirección del servidor MySQL?"
Pregunta "Con qué usuario voy a entrar a MySQL?"
Pregunta "Con qué password?"

Si puedo conectarme al servidor con los datos indicados
voilá...procede a crear la base de datos y crear las tablas.
continúa la instalación.
de lo contrario
Error: No fue posible conectarse al servidor indicado con los datos proporcionados.

Por mera seguridad hay que dar de alta el usuario de MySQL y crear la base de datos a la cual tendrá acceso. No quiero ni pensar en que se les ocurra darle el root como usuario para que haga lo que se le pegue la gana con las bases de datos.

Mis chavos, no se confundan, MySQL, FireBird, Posgress y SQL Server son todas aplicaciones INDEPENDIENTES de su software y por mucho que quieran automatizar las tareas NUNCA deben instalarse al mismo tiempo. No por nada en muchos proyectos de desarrollo se asigna un DBA para que se haga cargo de pelearse con el motor de su elección a condición de que podamos hacer lo que necesitamos con las tablas.

Como ya mencioné y al parecer nadie leyó, si mi aplicación necesita MySQL debo indicarlo en la documentación y al principio de la instalación. El usuario "es responsable" de tener instalado MySQL y con el ususario que se le pide para poder continuar.

Pero en fin, si queremos seguir haciendo chapuzas pues hagámoslas que caray.

keyboy
27-03-2008, 06:14:05
Desconozco en qué parte he mencionado algo en favor o en contra de instalar MySQL junto con nuestra aplicación. Yo me he limitado a argumentar porqué tales o cuales métodos me parecen insuficientes para determinar la existencia del servidor, y a señalar que no es lo mismo determinar si está instalado el servidor o el cliente.

De hecho yo tampoco instalaría el servidor junto con mi aplicación por el mero hecho de que muy posiblemente el servidor residirá en otra máquina. Asímismo, tampoco crearía usuarios, y, por cierto, tampoco crearía ni bases ni tablas, que lo haga el DBA.

Pero hay de casos a casos, y quizá se trate de una aplicación local donde no hay DBA ni nada que se le parezca. No veo ningún problema entonces en que el instalador cree usuarios, bases y tablas. ¿Chapucero? Pues si lo quieres calificar así. Para mi sería un ahorro de trabajo.

Claro que todo esto es debatible, y quizá a eso se refiere el compañero cHackAll con lo de trasladar este hilo a debates.

Bye

fmatias
27-03-2008, 13:40:42
Pero están hablando de dos cosas distintas. Por un lado está el servidor y por otro lado el cliente (libmysql.dll) y pueden estar instalados uno u otro, ambos o ninguno. De hecho, creo que el compañero fmatias debería especificar qué entiende por tener MySQL instalado; si se refiere al servidor, o se refiere a la biblioteca libmysql.dll.

Bye

Acabo de conectar al foro para ver si alguien había contestado a mi duda sin pensar en que esta pregunta iba a generar tanto debate ...

Cuando digo de comprobar si está instalado, me refiero del lado del servidor.
Si está instalado simplemente pedir los parámetros de configuración.

Si no existe MySql instalado en el servidor, mostrar un mensaje para que se instale el motor de base de datos antes de seguir con la instalación de mi aplicación.

Del lado cliente no me preocupa mucho, porque basta con copiar el fichero libmysql.dll en la misma carpeta donde se guarda el ejecutable.

Saludos.

AzidRain
27-03-2008, 16:51:28
Pues ahi tienes ya tu solución, de hecho basta con que pidas los parámetros para conectarse y con ello intentar hacerlo, si no se puede pues posiblemente no está instalado.

vinicc
28-03-2008, 17:35:24
He leído todo el debate sobre la pregenta del amigo fmatias y solo quiero comentar sobre lo que hago al respecto de la instalación de mis aplicaciones.

Antes quiero aclarar que soy nuevo en el desarrollo de aplicaciones

1o. Instalo MySQL en el servidor de datos
en las terminales
2o. Instalo MySQL Connector 3.1.0
3o. Establezco una conexión DSN
4o. Instalo mi aplicación

Seguramente no es lo mejor pero me funciona y los usuarios de mis aplicaciones no tienen objeción alguna, lo que si es cierto es que hay cierta dependencia para con ellos.