Le langage PHP (Hypertext Preprocessor) est devenu
en quelques années d'existence, le langage de programmation de sites
web dynamiques le plus populaire à coté de Java
Associé à MySQL, le langage PHP permet de développer des applications web puissantes reliées à des bases de données.
Sur System i, les pages PHP accèdent généralement
à des données DB2, mais cela implique, si vous souhaitez utilisez
des produits Open Source utilisant MYSQL, une réécriture partielle
du code
Depuis la version 5.1 de MYSQL, MYSQL
propose une "passerelle", nommée MYSQL DB2 Storage Engine,
pemettant à une
base MYSQL
de stocker ses données sous DB2
Installation :
Ce produit installe en fait un serveur Apache
sous Pase qui tourne sur un autre port (8000, modifiable) , il faut alors utiliser
une directive PROXY pour rerouter les requêtes vers cet autre serveur
(depuis le serveur Apache "natif" de I5/OS).
L'interet du serveur Apache2 sous Pase (c'est véritablement celui
d'UNIX) pour Zend, c'est de réutilsier les routines existantes, particulièrement
celles permettant de lancer PHP en mode module, ce qui offre les meilleures
performances et le debug avec ZendStudio.
1/ vérifiez que vous avez les logiciels sous licence suivants :
Code (option) | Produit |
5722SS1 (33) | PASE |
5722SS1 (30) | Qshell |
5722SS1 (13) | System Openness Includes |
5722SS1 (34) | Digital Certificate Manager |
5733SC1(*base) | IBM Portable Utilities For I5/OS |
5733SC1 (1) | OpenSSH ,OpenSST,Zlib |
Le répertoire /usr/local doit exister (créez le, s'il le faut, par MKDIR) et ne doit pas être un lien symbolique
2/ Téléchargez
le fichier zippé sur le site de ZEND, dézippez et transférez
(en binaire) via FTP le SAVF ZCOREPROD
dans QGPL
3/ Passez ensuite la commande RSTLICPGM
LICPGM(1ZCORE5) DEV(*SAVF) SAVF(QGPL/ZCOREPROD)
Ce produit propose une installation conjointe de MYSQL, mais version 5.0 et qui ne contient pas le DB2 storage Engine.
Objet Type Attribut Texte
INSMYSQL *PGM CLP Install MySQL
UPGMYSQL *PGM CLP Upgrade MySQL
SCRIPT *FILE SAVF
TARF *FILE SAVF
INSMYSQL *CMD Install MySQL
UPGMYSQL *CMD Upgrade MySQL
et lancez le CL INSMYSQL après avoir passé votre job en CCSID(37)
Attention, plusieurs remarques : - si vous aviez déja une version de MYSQL, sauvegardez vos données avant.
Détruisez ensuite my.cnf dans /etc. - vous ne pourrez pas faire un Upgrade de mysql 5.0 vers 5.1 avec UPGMYSQL
ce script ne gère que les mises à jour mineures (5.0.47 à 5.0.48, par ex) - ce CL installe un script install.sh dans /tmp et l'exécute
- vous devez passer votre job en CCSID(37) à cause d'un fichier temporaire nommé @longlink et le script gère mal le @ avec un code page latin (297 par exemple) - nous avons utilisé comme paramètres :
DIR('/usr/local/') DATADIR(/usr/local/mysqldata') USRPRF(MYSQL) cela va restaurer le répertoire /usr/local/mysql-5.1.37-i5os-power-64bits et crééer un lien symbolique nommé /usr/local/mysql IBM propose par défaut /QOpenSys/usr/local/mysql pour être insensible à la casse, mais /usr/local est plus standard
et mysql détecte bien si le système de fichier est sensible à la casse ou pas. les données seront stockées dans mysqldata (répertoire indépendant, plus simple pour changer de version) le profil MYSQL doit exister.
- il y a une documentation officielle fournie par MYSQL.
Avec Zend Server (hiver 2010), ce dernier propose une installation intégrée (comme Zend Core) de MYSQL mais version 5.1.50, qui contient déjà le moteur en question.
Enfin désormais vous pouvez télécharger MYSQL ou MAriaDB depuis ce site
http://www.zend.com/en/solutions/modernize-ibm-i/ibm-i-product/dbi
Transférez le SAVF contenu dans le fichier zip puis installez parRSTLICPGM LICPGM(1ZENDDB) DEV(*SAVF) SAVF(QGPL/ZDBISAVF10)
![]()
Dans tous les cas, lancez MYSQL par : Installation manuelle : /usr/local/mysql/bin/mysqld_safe --usermysql & (sous QSH)
(le & demande à ce que MYSQL soit lancée en tâche de fond indépendante) ou, suite à Installation de MariaDB :
démarrez le sous-système ZENDDBI10 ce qui lancera -> CALL ZMARIADB/ZMYSQLSTRT
- ensuite assignez à root un mot de passe (ce n'est pas obligatoire, mais c'est plus prudent) par mysqladmin -u root password "nouveau_pwd"
Attention, pour utiliser ensuite mysqladmin ou mysql en mode commande, il faudra ajouter -pnouveau_pwd
Pour ajouter d'autres utilisateurs :
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'passw0rd' WITH GRANT OPTION;
->vous pouvez indiquez à droite du @ un host ou une adresse IP, la connexion n'est autorisée que de ce poste
ensuite, vérifiez le fonctionnement par :
cd /usr/local/mysql |
Avec MariaDB utilisez le menu ZDBMENU ou la commande STRZDBI
Option 21
![]()
Sinon, Exemple de commandes de démarrage et d'arrêt
CMD PROMPT('Démarrage MYSQL')
PGM SBMJOB CMD(CALL PGM(STRMYSQLB)) + JOB(MYSQLD) JOBQ(ZENDCORE/ZCOREJOBQ) ENDPGM STRMYSQLB(CLP) PGM DCL VAR(&CMD) TYPE(*CHAR) LEN(50) DCL VAR(&PARM) TYPE(*CHAR) LEN(15) DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') |
ENDMYSQL(CMD)CMD PROMPT('ARRÊT MYSQL') PARM KWD(FORCE) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*NO) VALUES(*YES *NO) PROMPT('Forcer + arrêt')
/*****************************************************************/ /* ATTENTION , REMPLACER -pXXXXX PAR -p<le mot de passe de root> */ /*****************************************************************/ PGM PARM(&FORCE) DCL &FORCE *CHAR 4 DCL VAR(&CMD) TYPE(*CHAR) LEN(50) DCL VAR(&PARM1) TYPE(*CHAR) LEN(10) DCL VAR(&PARM2) TYPE(*CHAR) LEN(10) DCL VAR(&PARM3) TYPE(*CHAR) LEN(10) DCL VAR(&PARM4) TYPE(*CHAR) LEN(20) DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') IF (&FORCE = *YES) THEN(DO) ENDALLJOB JOB(MYSQLD) ENDDO ELSE DO CHGVAR VAR(&CMD) + VALUE('/Usr/local/mysql/bin/mysqladmin' + *TCAT &NULL) CHGVAR VAR(&PARM1) VALUE('-u' *CAT &NULL) CHGVAR VAR(&PARM2) VALUE('root' *CAT &NULL) CHGVAR VAR(&PARM3) VALUE('shutdown' *CAT &NULL) CHGVAR VAR(&PARM4) VALUE('-pXXXXX' *CAT &NULL) SBMJOB CMD(CALL PGM(QP2SHELL2) PARM(&CMD &PARM1 + &PARM2 &PARM3 &PARM4)) JOB(ENDMYSQLD) + JOBQ(ZENDCORE/ZCOREJOBQ) ENDDO SNDPGMMSG MSG('Arrêt demandé') MSGTYPE(*COMP)ENDPGM |
- pour utiliser MYSQL en mode commande (toujours sous QSH) :
cd /usr/local/mysql |
la documentation : http://dev.mysql.com/doc/refman/5.0/fr/index.html
il s'agit de proposer un nouveau moteur de stockage à MYSQL.
Celui-ci en possède naturellement plusieurs
et donc le petit nouveau IBMDB2I permettant le stockage des data dans une blbliothèque DB2, donc ensuite accessible par un programme I5/OS.
pour l'activer, sous MYSQL (donc QSH)
cd /usr/local/mysql |
vous devez le voir, ensuite par show engines
show engines; |
Attention, il faut être à jour au niveau des PTF, particluièrement le groupe base de données et en V5R40, il faut
SI37763 (si vous avez 5722SS1 , option 13),
SI35184 ,
SI36388 et
SI36391
Ensuite lors d'un CREATE TABLE , ajoutez engine=ibmdb2i
ou bien positionnez cette valeur
par défaut.
Attention, sur les dernières versions de ZendDBi, le fichier se trouve dans /usr/local/mysql/bin et
il ne doit pas avoir les droits *RWX pour *Public (informaitons complètes http://wsip-174-79-32-155.ph.ph.cox.net/wiki/index.php/MySql/DB2StorageEngineDocument ) |
vous pouvez aussi passer la commande suivante sur une table existante
ALTER TABLE producteurs ENGINE=IBMDB2I;
la bibliothèque porte le nom de la base et n'est créé qu'à la première table
CREATE DATABASE vins, ne créé rien
CREATE TABLES vins.producteurs, créé :
NB : "vins" en minuscules, il faut donc mettre le nom entre guillemets pour pouvoir l'utiliser (par exemple ADDLIBLE "vins")
- la table "producteurs", nommée "prod0001" pour I5/OS
par contre, DROP TABLE supprime la table, mais seul DROP DATABASE va supprimer la bibliothèque.
les ordres DDL (Data Definition language) comme CREATE TABLE, CREATE INDEX, sont transformés en leur équivalent SQL/400
les ordres DML (Data Manipulation
language) comme SELECT, UPDATE sont réalisés par des entrées/sorties
natives, l'optimisation étant à la charge de MYSQL
Extrait des options disponibles (à placer dans /etc/my.cnf)
Vous pouvez aussi modifier ces paramètres en direct par set global paramètre=valeur.
Pour tester, nous avons installé SugarCRM après avoir défini ibmdb2i comme moteur par défaut.
tout c'est bien passé, voici ce que nous
affiche phpMYadmin :
iSeries Navigator
et PDM
Depuis la version 5.1.50, les noms de tables sont automatiquement convertis en Majuscules.
-> pour plus de détails techniques,
voyez le redbook SG247705
Réglage des performances
1/ Soyez à jour avec les PTF concernant PASE
2/ Voyez les paramètres IBM i suivants :
3/ Voyez les paramètres de bufferisation suivants dans /etc/my.cnf
Pour chaque élément, il existe des variables de "status", renseignées par le moteur, permettant de voir les valeurs en cours avant d'ajuster les paramètres.
Elles peuvent être visualisées en mode commande par SHOW STATUS LIKE 'thread%' ou par MySQL Administrator.
> show status like 'thread%'; |
ici, un affichage concernant les threads, proposé par MySQL Administrator.