1 Le serveur de communication IceWarp Stockage des données en bases MySQL Version 11 Novembre 2015 Icewarp France / DARNIS Informatique
2 Serveur de communication IceWarp : Stockage en base de données MySQL Sommaire Introduction... 3 Téléchargement de MySQL... 3 Configuration existante du serveur IceWarp... 3 Préparatifs... 4 Configuration MySQL... 4 Installation... 4 Configuration... 4 Intégration dans le serveur IceWarp... 5 Migration des données dans les nouvelles bases MySQL... 5 Comptes... 5 AntiSpam... 6 GroupWare... 6 En cas d'erreur lors de la migration... 6 Vérifications... 7 Sauvegardes... 7 Sauvegarde des bases... 7 Restauration d une base... 9 Sauvegarde de la configuration de IceWarp... 11 Planification... 12
Serveur de communication IceWarp : Stockage en base de données MySQL 3 Introduction Ce document décrit les différentes étapes pour gérer les données (Comptes, GroupWare et AntiSpam) dans des bases MySQL. On peut aussi vouloir gérer par MySQL les bases Cache Répertoire, WebClient, Active Sync, Rapports pour des questions de performance. Dans ces cas, la est similaire à la migration de la base AntiSpam par exemple. Ce document concerne uniquement les installations d IceWarp sur Windows et les versions 10 et 11 du serveur IceWarp. La FAQ suivante donne des indications pour optimiser les performances du système : http://support.icewarp.fr/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=339 Téléchargement de MySQL La dernière version MySQL (5.7 en octobre 2015) : http://dev.mysql.com/downloads/mysql/ La machine MySQL peut être différente de celle sur laquelle tourne le serveur IceWarp. Il est possible d utiliser MySQL en version 64-bits mais, dans tous les cas, vous aurez besoin de la librairie MySQL en 32-bits, il faut donc télécharger les deux librairies si MySQL est en 64-bits. Configuration existante du serveur IceWarp On suppose ici que le serveur IceWarp est déjà installé sur la machine. Lancer la console d'administration pour vérifier le paramétrage des différentes bases de données : Les comptes : l'information se trouve dans l'onglet Système -> Stockage -> onglet Comptes. Si la gestion des comptes n'a jamais été faite dans une base de données, le bouton radio sera positionné sur 'Système de fichiers'. Il est possible aussi que la base de données existe déjà, le bouton radio sera positionné sur Base de données' et la base peut être une base SQLite. Dans ce cas, la procédure décrite plus loin ne s applique pas et il faut passer par une migration des bases de données comme pour l AntiSpam. La base AntiSpam : l'information se trouve dans le menu Anti-Spam -> Général ->onglet Général -> bouton Paramètres BD et si la base n a pas été modifiée, la base est SQLite (Syntaxe et Pilote : SQLite et, par défaut, le fichier se trouve dans le répertoire \icewarp\spam). La base GroupWare : l'information se trouve dans le menu GroupWare -> onglet Général -> bouton Paramètres BD et si la base n a pas été modifiée, la base est SQLite (Syntaxe et Pilote: SQLite et, par défaut, le fichier se trouve dans le répertoire \ icewarp \calendar).
4 Serveur de communication IceWarp : Stockage en base de données MySQL Préparatifs Avant de changer la configuration vers MySQL, A partir de la console d'administration, faire une sauvegarde de la configuration existante avec le menu Fichier -> Sauvegarder la configuration. Cette action génère un fichier.zip qui contient toutes les informations concernant les domaines et comptes. Faire une copie de la base existante d'antispam et du GroupWare. Ce n'est pas utile, si elles sont à leur emplacement par défaut, car elles sont déjà dans le.zip Configuration MySQL Installation Installer MySQL en exécutant le setup.exe du zip. Installation typique. Noter le mot de passe du compte principal (root). Configuration 1/ Création bases et affectation des droits : - On peut utiliser un outil comme PhpMyAdmin ou HeidiSQL pour la création des bases. Créer trois bases de données (Vérifier que le jeu de caractères est positionné à UTF-8 Unicode (utf8) et que la base est de type innodb), par exemple : iwcomptes iwgw iwspam Créer un compte "icewarp" qui n'a pas tous les privilèges de "root" et qui sera utilisé dans IceWarp. Il doit avoir tous les privilèges sur les 3 bases créées et éventuellement une restriction sur l IP. - On peut également créer des bases en ligne de commandes sans passer par PhpMyAdmin ou une autre interface graphique. Les commandes pour ces opérations sont les suivantes : mysql -u root -p Enter password: ******** mysql> create database iwcomptes default character set utf8 collate utf8_general_ci; mysql> create user icewarp@localhost identified by 'xxxxxxxxx'; Query OK, 0 rows affected (0.00 sec)
Serveur de communication IceWarp : Stockage en base de données MySQL 5 mysql> grant all privileges on iwcomptes.* to icewarp@localhost ientified by ' xxxxxxxxx'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges ; Query OK, 0 rows affected (0.00 sec) 2/ Si le serveur MySQL est différent du serveur IceWarp, ouvrir le port 3306 en entrant sur le serveur MySQL. 3/ Sur le serveur IceWarp, vérifier qu'il n'y a pas de librairie libmysql.dll dans C:\Windows\System32 4/ Si la version d'icewarp est en 32-bits, alors, sur le serveur IceWarp, copier la librairie libmysql.dll 32-bits dans C:\Windows\ OU 4/ Si la version d'icewarp est en 64-bits, alors, sur le serveur IceWarp Copier la librairie libmysql.dll 32-bits dans C:\Windows\SysWOW64\ ET Copier la librairie libmysql.dll 64-bits dans C:\Windows\ 5/ Si vous avez prévu de passer la base cache WebClient ou Activesync en MySQL, il faut sur le serveur IceWarp: - Modifier.../php/php.ini pour décommenter la ligne : extension=php_pdo_mysql.dll - Créer.../php/php.user.ini avec la ligne : extension=php_pdo_mysql.dll - Redémarrer le service Web/Control Intégration dans le serveur IceWarp Migration des données dans les nouvelles bases MySQL Lancer la console d'administration IceWarp Comptes Aller dans le menu Système -> Stockage Activer le bouton 'Base de données' et cliquer sur 'Paramètres BD' et renseigner les champs suivants: - BdD: iwcomptes - Serveur: 127.0.0.1 - Utilisateur: icewarp - Mot de Passe: < >
6 Serveur de communication IceWarp : Stockage en base de données MySQL - Syntaxe: MySQL - Pilote: MySQL Cliquer sur 'Créer Tables'. Cliquer sur 'Valider' Répondre Oui à la question 'voulez-vous convertir les données en BD' AntiSpam Aller dans Système -> Outil -> Migration base de données et renseigner les champs suivants Base de données : Anti-Spam Cliquer sur DSN source : le système a déjà renseigné les paramètres de la base source Cliquer sur DSN destination - BdD: iwspam - Serveur: 127.0.0.1 - Utilisateur: icewarp - Mot de Passe: < > - Syntaxe: MySQL - Pilote: MySQL Cliquer sur 'Démarrer la migration'. Le temps de migration dépend de la taille de la base source. A la fin de la migration, une nouvelle fenêtre qui récapitule le nombre d'enregistrements migrés s'affiche. Vérifier qu'il n'y a pas d'erreur dans ce journal. GroupWare Aller dans Système -> Outil -> Migration base de données et renseigner les champs suivants Base de données : GroupWare Cliquer sur DSN source : le système a déjà renseigné les paramètres de la base source Cliquer sur DSN destination - BdD: iwgw - Serveur: 127.0.0.1 - Utilisateur: icewarp - Mot de Passe: < > - Syntaxe: MySQL - Pilote: MySQL Cliquer sur 'Démarrer la migration'. Le temps de migration dépend de la taille de la base source. A la fin de la migration, une nouvelle fenêtre qui récapitule le nombre d'enregistrements migrés s'affiche. Vérifier qu'il n'y a pas d'erreur dans ce journal. Si vous souhaitez que les bases Cache Répertoire, WebClient, Active Sync et Rapports passent aussi en MySQL, suivre le même mode d'emploi que pour la base AntiSpam. Il vaut mieux faire ces opérations pendant une période où le serveur est peu chargé. En cas d'erreur lors de la migration Si une erreur de ce type apparaît pendant la migration de SQLite vers MySQL : "SQL logic error or missing database..." Vous pouvez essayer l'opération suivante qui permet de réparer les index de la base SQLite. Allez dans Système -> Outils -> Gestionnaire SQL
Serveur de communication IceWarp : Stockage en base de données MySQL 7 Sélectionnez la base de données par le sélecteur situé à gauche du bouton «Bases de données...» Dans la fenêtre supérieure entrez la commande : pragma integrity_check; On doit normalement obtenir quelque chose comme : Si une erreur apparaît (par exemple "rowid... missing from index push_index wrong # of entries in index push_index"), exécutez la commande suivante : reindex; Vous pouvez ensuite recontrôler la base et lancer la migration si l erreur a disparu. Vérifications Se connecter à l interface ClientWeb - http://<serveur icewarp>:<port>/webmail/ Et vérifier le contenu des mails, des contacts, des agendas des listes noire et blanche pour au moins un compte. Sauvegardes Si vous avez déjà mis en place un système de sauvegarde pour les données contenues dans les bases MySql, vérifiez simplement que vous pouvez restaurer les bases utilisées par le serveur IceWarp. Nous vous proposons ci-dessous : - un script vous permettant de sauvegarder l ensemble des bases de votre serveur MySql local - un script permettant de restaurer une base MySql Sauvegarde des bases La commande suivante permet de sauvegarder l ensemble des bases MySql locales :
8 Serveur de communication IceWarp : Stockage en base de données MySQL Pour cela, cmd /c C:\sbin\mysql\mydump.bat - il faut télécharger le programme 7za.exe - il faut que dans le dossier C:\sbin\mysql, vous ayez créé les scripts mydump.bat et jour.vbs dont voici le code source : @echo off rem ************************************* mydump.bat rem rem Auteur : Philippe Darnis rem Date : 24/01/2008 rem Copyright IceWarp France / Darnis Informatique rem rem liste les tables de chaque base mysql et les sauvegarde dans un dossier (variable backuppath) rem le dossier des binaires de mysql doit figurer dans la variable path du système rem rem time /t setlocal enabledelayedexpansion for %%i in ("%~dp0") do set SCRIPTPATH=%%~si rem ------------------------------------------------ set backuppath=s:\mysql set user=root set password=xxxxxxxxx rem ------------------------------------------------ pushd!backuppath! set _bases=0 set _tables=0 for /F "tokens=1-3 delims=/" %%i in ("!date: =0!") do set prefixe=%%k.%%j.%%i set errorcode=!errorlevel! if not!errorcode! == 0 goto end for /F "usebackq tokens=1" %%b in (`mysql -s -e "SHOW DATABASES;" -u!user! -p!password!`) do ( rem echo base %%b if not %%b == mysql ( set /A _bases+=1 for /F "usebackq tokens=1" %%t in (`mysql -s -e "SHOW TABLES FROM %%b;" -u!user! -p!password!`) do ( rem echo!backuppath!\!prefixe!.%%b.%%t.sql rem echo %%b %%t mysqldump -u root -p!password! --default-character-set=utf8 %%b %%t >!backuppath!\!prefixe!.%%b.%%t.sql set errorcode=!errorlevel! if not!errorcode! == 0 goto end set /A _tables+=1 ) ) ) rem echo SAUVEGARDE MYSQL rem echo bases :!_bases! rem echo tables :!_tables!!scriptpath!\7za.exe a -tzip!prefixe!.sql.zip!prefixe!*.sql set errorcode=!errorlevel! if!errorcode! == 0 ( del /Q!prefixe!.*.sql rem Suppression des anciennes sauvegardes rem conservation : noatk=14 fichiers les plus récents set noatk=14
Serveur de communication IceWarp : Stockage en base de données MySQL 9 type NUL > arclist.dat for /F "tokens=1,2 delims=[] " %%i in ('dir /B *.sql.zip ^ find /N ".sql.zip"') do echo %%i = %%j >> arclist.dat rem count total number of files for /F "tokens=1 delims=" %%i in ('type arclist.dat ^ find /C ".sql.zip"') do set tnof=%%i rem setup for and create the deletion list set /a negtk=!noatk!*-1 set /a tntd=!tnof! -!noatk! type NUL>dellist.dat for /L %%i in (!negtk!,1,!tntd!) do find " %%i = " arclist.dat >> dellist.dat rem del the old files for /F "tokens=3 delims= " %%i in ('find ".sql.zip" dellist.dat') do del /Q %%i rem remove temp files del /Q arclist.dat del /Q dellist.dat popd ) :end popd exit /B!errorCode! ' ********* jour.vbs AujourdHui = Date() mois=month(aujourdhui) if mois < 10 Then mois="0"&mois an=year(aujourdhui) jour=datepart("d", AujourdHui) if jour < 10 Then jour="0"&jour wscript.echo an & "." & mois & "." & jour Au début du script, remplacez les valeurs des variables : - backuppath : par le chemin du dossier qui contiendra les sauvegardes - user : par le nom de l utilisateur qui se connectera au sgbd pour effectuer les sauvegardes (éventuellement root) - password : par le mot de passe du compte user Cette procédure sauvegarde toutes les bases de MySQL y compris la base de configuration de PhpMyAdmin et de MySql. Il n'est pas forcément nécessaire de restaurer ces derniers. Il faut que la variable système Path soit correctement positionné vers le répertoire MySQL. Restauration d une base Si vous voulez effectuer un test de restauration, nous vous conseillons d utiliser une machine de test afin de valider vos sauvegardes sans perturber l environnement en production. Pour restaurer les bases IceWarp sauvegardées à la date du 14.02.2008 dans le dossier F:\backup\mysql, lancez les commande : cmd /c C:\sbin\mysql\myimport.bat 2008 02 14 iwcomptes cmd /c C:\sbin\mysql\myimport.bat 2008 02 14 iwgw cmd /c C:\sbin\mysql\myimport.bat 2008 02 14 iwspam Pour cela, il faut que dans le dossier C:\sbin\mysql, vous ayez créé le script myimport.bat dont voici le code source :
10 Serveur de communication IceWarp : Stockage en base de données MySQL @echo off rem ************************************* myimport.bat rem rem Auteur : Philippe Darnis rem Date : 24/01/2008 rem Copyright IceWarp France / Darnis Informatique rem rem restaure une base dont le backup est dans le dossier (variable backuppath) rem setlocal enabledelayedexpansion for %%i in ("%~dp0") do set SCRIPTPATH=%%~si rem time /t rem ------------------------------------------------ set backuppath=f:\backup\mysql set user=root set password=xxxxxxxxxx rem ------------------------------------------------ pushd!backuppath! IF "%1"=="" GOTO syntaxe set an=%1 IF "%2"=="" GOTO syntaxe set mois=%2 IF "%3"=="" GOTO syntaxe set jour=%3 IF "%4"=="" GOTO syntaxe set base=%4 set prefixe=!an!.!mois!.!jour!!scriptpath!\7za.exe x -tzip!prefixe!.sql.zip set errorcode=!errorlevel! if!errorcode! == 0 ( set _tables=0 for %%t in (!backuppath!\!prefixe!.!base!.*.sql) do ( echo %%t mysql -u!user! -p!password!!base! <%%t set /A _tables+=1 ) del /Q!prefixe!.*.sql echo RESTAURATION MYSQL echo base :!base! echo tables :!_tables! ) goto end :syntaxe echo RESTAURATION EN ERREUR echo syntaxe : myimport.bat an mois jour base echo exemple : myimport.bat 2008 01 24 calendar :end popd rem time /t
Serveur de communication IceWarp : Stockage en base de données MySQL 11 Sauvegarde de la configuration de IceWarp Le menu Sauvegarde système permet de sauvegarder les informations importantes : Il permet de sauvegarder les 4 bases de données Comptes, Anti-Spam, GrouWare et CacheRepertoire sur une autre base du même serveur ou sur un autre serveur. Ceci permet une restauration rapide en cas de problème sur la base nominale mais ne permet pas d archiver plusiers sauvegardes. Il faut donc compléter ce mécanisme avec une sauvegarde par exemple quotidienne dans un format type SQL. Ces sauvegardes peuvent être planifiées : Ainsi, tous les soirs, à 23H15, un fichier zip de sauvegarde sera créé les 6 dernières versions seront en ligne.
12 Serveur de communication IceWarp : Stockage en base de données MySQL La restauration pourra être faite à la console : En sélectionnant le fichier.zip souhaité. Planification Les sauvegardes peuvent être lancées par IceWarp, par Windows ou par un autre outil (exemple nncron Lite (http://www.nncron.ru/). La planification des sauvegardes MysQL et des données de configuration de IceWarp génère des fichiers. Ces sauvegardes doivent donc être synchronisées avec la sauvegarde de vos systèmes de fichiers. Par exemple : Exportation des tables des bases Mysql à 23H00 (se termine avant 01H00) Sauvegarde de la configuration d'icewarp à 23H15 (se termine avant 01H00) Sauvegarde des fichiers sur bande à 01H00 Exemple de contenu du fichier nncron.tab avec nncronlite : # Minutes Hours Days Months WeekDays Years Command 00 23 * * * * cmd /c C:\sbin\mysql\mydump.bat