Mysql protocol : Stable Release
Reb-Kodeur19-Jun-2006/12:18:47+2:00
Repris depuis The Rebol Week http://rebolweek.blogspot.com/

The week ending 18th June 2006

Mysql v.1.0.6

Dockimbel has finally decided, after 4 years of beta-testing, to release a version 1 of his long standing and useful mysql driver!

I've just run a big stress test with 40'000+ requests generating around 2Gb of traffic without any trouble ! No bad handshakes anymore if you're using v5+ tables and new passwords.
- Nenad
Goldevil19-Jun-2006/13:47:12+2:00
La news est aussi passée dans la mailing list.
Je l'ai testé depuis quelques jours et tout semble fonctionner impeccablement.
Quand la version 1.0.2 est sortie, j'étais déjà très heureux de voir la compatibilité avec MysQL 4 mais, d'après cette news, il semble que le driver est comptabible MySQL 5. Génial

Ce driver mérite d'être intégré dans Rebol/Command sachant que ce dernier ne supporte que Mysql 3.

Félicitation DocKimbel.

Félicitation
Didec19-Jun-2006/15:02:57+2:00
Il faut bien dire que ce driver est une "pièce d'art" Rebolienne !

Excellente nouvelle.
DocKimbel19-Jun-2006/23:09:37+2:00
Salut,

Merci pour les compliments!

Je serais intéressé par des benchs comparatifs entre mon driver et celui de /Command, des preneurs ??

--
DocKimbel
Goldevil20-Jun-2006/8:30:29+2:00
OK. Je peux faire cela.

Je développe une application de gestion de contacts qui tourne avec MySQL (ton driver) et SQL Server (le driver odbc de /command).
Je vais l'adapter pour qu'elle passe via le driver MySQL de /command et faire quelques tests comparatifs.

Je ne peux pas donner de délais car je suis un peu pressé par le temps et bientôt en vacances.
Reb-Kodeur20-Jun-2006/10:10:54+2:00
Petite question : est-il possible, par quelques simples changements de code, de rendre asynchrone le protocole mysql, afin par exemple de faire un open/async mysql://etc... :handler
DocKimbel21-Jun-2006/0:19:40+2:00
Je crains qu'il ne faille plus que quelques simples changement pour en faire un protocole asynchrone en utilisant l'API de REBOL...mais la question tombe à point nommé car je suis justement en train de travailler sur une version asynchrone du driver MySQL, basée sur le framework Uniserve (evidemment!)

Le nouveau driver aura les caractéristiques suivantes :

- communication 100% asynchrone avec le serveur.
- routine de decodage/encodage bas niveau optimisées.
- support complet du nouveau protocole (v4.1 et supérieur).
- utilisation de la technique de "stream parsing" (comme dans le driver postgresql).

Je devrais avoir une première version alpha la semaine prochaine.

En gros, le driver devrait être beaucoup plus rapide que la version actuelle et offrir de nouvelles fonctionnalités... que demander de plus ?

--
DocKimbel
Goldevil21-Jun-2006/14:41:19+2:00
Je viens de faire une petit test avec MySQL 5.0.21 et mysql-protocol 1.0.6 mais je tombe sur une erreur.

1ere METHODE

dbport: open mysql://loginname:mypassword@localhost/eee_dev
insert dbport "select * from internaute"

Objet erreur :

make object! [
code: 800
type: 'user
id: 'message
arg1: "Connection lost - Port closed!"
arg2: none
arg3: none
near: [insert dbport "select * from internaute"
print copy
]
where: none
]


2eme METHODE

print read join mysql://dba:easybar@localhost/eee_dev? "select * from internaute"

make object! [
code: 800
type: 'user
id: 'message
arg1: "ERROR 1043 : Bad handshake"
arg2: none
arg3: none
near: [print read join mysql://dba:loginname:mypassword/eee_dev? "select * from internaute"]
where: none
]


Une idée ?

Pour info, j'utilise XAMPP.
DocKimbel21-Jun-2006/21:04:05+2:00
Peux-tu activer le mode débuggage : trace/net on afin de voir les traces en détail ?

1) Est-ce que ton serveur MySQL est configuré pour autoriser les connexions via TCP/IP ?

2) Comment tes users sont-ils créés ?

3) Utilises-tu le mode OLD_PASSWORD ? (non recommandé avec le nouveau driver, mais peut-etre nécessaire à PHP ?)

--
DocKimbel
Reb-Kodeur22-Jun-2006/9:07:27+2:00
Moi aussi j'ai le même problème : "ERROR 1043 : Bad handshake"

9:03:24.585 {SELECT * from rdvbd where etat = 1 AND date = '2003-07-01'}9:03:24.585 Net-log:
9:03:24.585 "sending ping..."9:03:24.615 Net-log:
9:03:24.615 "low level read of 4 bytes"9:03:24.625 Net-log:
9:03:24.625 "low level read of 16 bytes"
9:03:24.625 make object! [
code: 800
type: 'user
id: 'message
arg1: "ERROR 1043 : Bad handshake"
arg2: none
arg3: none
near: [insert db request1
a: copy
]
where: none
]


l'ouverture du serveur se fait correctement :

9:03:20.509 URL Parse: xxxxx password mysql7.blabla.ch none none fadfd 9:03:20.509 Net-log:
9:03:20.509 ["Opening" "tcp" "for" "MySQL"]9:03:20.559 Net-log:
9:03:20.559 "low level read of 4 bytes"9:03:20.559 Net-log:
9:03:20.559 "low level read of 52 bytes"9:03:20.559 Net-log:
9:03:20.559 {
----- Server ------
Version: 4.1.20
Protocol version: 10
Thread ID: 2676428
Crypt Seed: o54545458-w5<p@-
Capabilities: [
long-flag
connect-with-db
compress
protocol-41
transactions
secure-connection
]
-------------------}9:03:20.579 Net-log:
9:03:20.579 "low level read of 4 bytes"9:03:20.579 Net-log:
9:03:20.579 "low level read of 1 bytes"9:03:20.579 Net-log:
9:03:20.579 "Connected to server. Handshake OK"

L'erreur ne se fait avec l'utilisation de l'ancienne version du protocole
Reb-Kodeur22-Jun-2006/9:10:05+2:00
L'erreur ne se fait PAS avec l'utilisation de l'ancienne version du protocole

Pour répondre à tes questions :

1) l'ancienne version fonctionnait donc je pense que oui. il peut travailler avec des connexions TCP/IP

2) les users sont créées à la main depuis phpmyadmin

3) je ne sais pas.
Reb-Kodeur22-Jun-2006/9:36:54+2:00
Est-il possible d'avoir avec les améliorations prévues :

1 ) la possibilité d'envoyer plusieurs requêtes à la fois
2 ) des informations en retour lors de l'envoi d'une requête. par. ex. : insert into etc... --> sans faire de select ensuite avoir une confirmation que la ligne est correctement insérée.
DocKimbel22-Jun-2006/23:48:47+2:00
Pour info, PHP ne supporte pas bien le nouveau mode d'authentification de MySQL (4.1+) :

MySQL 5.0 has a new password system, and PHP cannot connect to it because it cannot send a correct password. You must use the MySQL command OLD_PASSWORD() when adding a user to the database, or PHP cannot connect as of the library that comes with PHP 5.0Beta3

ou encore :
In older versions of PHP, the mysql extension does not support the authentication protocol in MySQL 4.1.1 and higher. This is true regardless of the PHP version being used. If you wish to use the mysql extension with MySQL 4.1 or newer, you may need to follow one of the options discussed above for configuring MySQL to work with old clients. The mysqli extension (stands for
MySQL, Improved"; added in PHP 5) is compatible with the improved password hashing employed in MySQL 4.1 and higher, and no special configuration of MySQL need be done to use this MySQL client library. For more information about the mysqli extension, see http://php.net/mysqli."

Je vais regarder s'il est possible d'adapter mon driver pour détecter le cas ou on utilise une version MySQL >= 4.1 et le mode OLD_PASSWORD.

Sinon, pour répondre à tes 2 questions :

1) Tu peux le faire en ouvrant plusieurs ports simultanément, si c'est vraiment nécessaire.

2) Ca existe déjà : propriété "matched-rows" décrite dans la doc : http://softinnov.org/rebol/mysql-usage.html#sect10.

--
DocKimbel
DocKimbel24-Jun-2006/18:38:03+2:00
Salut,

Pour ceux qui ont eu quelques problèmes avec la dernière version 1.0.6 et une configuration MySQL+phpMyAdmin (genre XAMPP), voici une version 1.0.7 qui devrait fonctionner dans ce genre de configuration:

http://softinnov.org/tmp/mysql-protocol.r

Merci de m'indiquer si ça passe correctement maintenant et le cas échéant, de me fournir les logs en mode "trace/net on".

--
DocKimbel
Reb-Kodeur25-Jun-2006/9:03:37+2:00
Avec la nouvelle version du protocole les choses sont OK maintenant. Chez mon hébergeur, je ne sais quelle version de LAMP ils utilisent..
DocKimbel2-Jul-2006/16:32:57+2:00
J'ai mis à jour le driver avec le dernier patch. Tout ceux qui ont eux des problèmes récemment pour utiliser la version 1.0.6 avec leur configuration devrait passer sur la version 1.0.7.

Merci pour vos retours (positifs ou négatifs). Je suis toujours preneur de benchmarks comparatifs! (MySQL protocol vs Command/MySQL, MySQL protocol vs PHP/MySql, etc...)

--
DocKimbel
yalep11-Sep-2006/17:26:19+2:00
Pour info : le package Uniserve mentionné sur le dernier Rebolweek (http://softinnov.org/tmp/UniServe0919.zip)contient des bugs fixes mais aussi un protocol mysql.r , un FastCGI ...
DocKimbel12-Sep-2006/8:22:37+2:00
En effet, les deux protocoles MySQL.r et FastCGI.r sont des versions alpha de ces protocoles en mode asynchrone.

Le protocole MySQL a été entièrement réécrit avec un architecture optimisée pour la vitesse. Il implémente la toute dernière version du protocole utilisés par les serveurs v5.x.

Le protocole FastCGI est une version "cliente" permettant de se connecter à un serveur FastCGI (Au contraire du protocole fourni par REBOL/Command qui est une version serveur). Le principal usage est le support FastCGI par le serveur web Cheyenne (non encore disponible), afin de s'interfacer avec PHP, par exemple.

Le noyau UniServe a été amélioré et de nombreux bugs corrigés dans cette version. C'est la principale raison de cette release.

--
DocKimbel

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2