mysqli port par défaut

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2013, 23:34

Bonjour à tous,

J'ai mis en place un serveur mysql en mode multi et ça fonctionne bien.
J'ai 3 sites dont mysql est configuré sur les ports 3307, 3308 et 3309.

Je souhaite maintenant activer mysqli.
Actuellement le mysqli fonctionne seulement pour le port 3306 (par défaut).

Si j'accède à mon site qui est sur le port 3307 par exemple, j'ai une erreur disant que mysqli n'est pas disponible.

Dans mon php.ini, j'ai repéré la ligne suivante:
mysqli.default_port = 3306

Si je change la valeur de ce paramètre en 3307, mysqli fonctionne pour le site qui est sur 3307.

Comment puis-je activer mysqli pour plusieurs ports et non pas juste le port par défaut?

En vous remerciant pour vos réponses.

ViPHP
ViPHP | 5924 Messages

19 déc. 2013, 00:18

Bonjour,

Déjà je ne comprends pas trop l'intérêt de faire fonctionner plusieurs instances de mysql sur le même système. A partir du moment où on isole correctement ses utilisateurs et des bases de données, en fournissant à chaque utilisateur des restrictions sur les privilèges, il n'y a aucun problème de sécurité à utiliser la même instance du serveur mysql. Dans ce cas chaque site n'aura accès qu'à sa (ses) base(s). Par ailleurs, plusieurs instances d'un serveur mysql est plus coûteux en termes de ressources qu'une seule instance avec privilèges isolés.

Concernant la question, et si tu persistes à vouloir utiliser ce setup, cela dépend de comment est exécuté PHP (CGI ? FastCGI ? PHP-FPM ? Module Apache filter PHP ? Module Apache PHP ?).
1/ Dans le cas le plus courant (module apache PHP), cela peut se faire dans la configuration Apache via une directive php_value ou php_admin_value pour différencier les directives de configuration passées à chaque site
2/ Cela peut se faire également dans le code du site via un appel à ini_set() ou lors de l'appel à mysqli_connect()
3/ Dans le cas où tu ne veux pas modifier directement le code de l'application, tu peux inclure automatiquement un script PHP lors de l'exécution de chaque site (directive auto_prepend_file) et discriminer dans ce script le port à utiliser pour chaque site:
switch($_SERVER['HTTP_HOST']) {
case 'site1.domain.tld':
case 'site2.domain.tld':
    ini_set('mysqli.port', 3307);
    break;
case 'site3.domain.tld',
    ini_set('mysqli.port', 3308);
    break;
...
default:
    break;
}
Mais comme je le disais au tout début, ce sera beaucoup plus simple de tout faire tourner sur le même serveur avec des privilèges appropriés ! ;)

Cordialement

Invité
Invité n'ayant pas de compte PHPfrance

20 déc. 2013, 22:56

Bonjour,

Merci bcp pour cette réponse claire et détaillée.
Mais du coup, à quoi sert donc mysql multi si c'est mieux d'avoir une seule instance avec les bons privilèges?

ViPHP
ViPHP | 5924 Messages

21 déc. 2013, 04:22

Bonjour,

Merci bcp pour cette réponse claire et détaillée.
Mais du coup, à quoi sert donc mysql multi si c'est mieux d'avoir une seule instance avec les bons privilèges?
Dans le cas de plusieurs serveurs mysql de différentes versions (binaires différents), cela peut être utile pour déployer des instances mysql de versions différentes. C'est expliqué ici: http://dev.mysql.com/doc/refman/5.5/en/ ... rvers.html
Pour le cas d'un setup mysql multi avec un binaire unique (donc la même version de mysql), je ne sais pas trop. une explication rationnelle que je donnerais serait le cas où l'on veut donner un accès root (donc accès illimité au serveur) à certains utilisateurs. Ces accès root sont illimités par rapport à un utilisateur normal et offrent l'avantage de pouvoir créer des bases et utilisateurs sans restriction

Si ce cas d'usage n'est pas à propos ici, je ne vois pas d'autre raison d'utiliser mysql en multiple instances.

Cordialement

ViPHP
ViPHP | 2577 Messages

23 déc. 2013, 11:22

Bonjour,

Il est possible de faire varier le paramétrage de php par site via .htaccess ou mieux dans la configuration du vhost. C'est particulièrement utile pour l'include_path, mais ca peut être utilisé pour ce problème de port.

Comme Sékiltoyai, je ne vois pas trop l'intérêt d'utiliser plusieurs ports pour un serveur. Mais c'est peut être que je n'ai pas été confronté au problème qui implique cette solution.