mercredi 6 juin 2012

Piwik error after update from 1.7.1 to 1.8.2

Erreur après la mise à jour de piwik depuis la version 1.7.1 vers 1.8.2


Une petite erreur rencontrée lors de la mise à jour automatique de piwik après la mise à jour de la base de données :

SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'piwik'@'localhost' to database 'piwik'
 Go to Piwik
 Login
 Backtrace:

 #0 /var/www/piwik-1.5.1/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES pwk...')
 #1 /var/www/piwik-1.5.1/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES pwk...')
 #2 /var/www/piwik-1.5.1/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('pwk_archive_num...', 'pwk_archive_num...')
 #3 /var/www/piwik-1.5.1/core/ArchiveProcessing.php(688): Piwik_LockTables('pwk_archive_num...', 'pwk_archive_num...')
 #4 /var/www/piwik-1.5.1/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive()
 #5 /var/www/piwik-1.5.1/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute()
 #6 /var/www/piwik-1.5.1/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving()
 #7 /var/www/piwik-1.5.1/core/Archive/Array/IndexedBySite.php(192): Piwik_Archive_Single->prepareArchive()
 #8 /var/www/piwik-1.5.1/core/Archive/Array/IndexedBySite.php(131): Piwik_Archive_Array_IndexedBySite->getArchiveIdsAfterLaunching(Array)
 #9 /var/www/piwik-1.5.1/core/Archive/Array/IndexedBySite.php(108): Piwik_Archive_Array_IndexedBySite->loadValuesFromDB(Array)
 #10 /var/www/piwik-1.5.1/core/Archive/Array/IndexedBySite.php(73): Piwik_Archive_Array_IndexedBySite->getValues(Array)
 #11 /var/www/piwik-1.5.1/plugins/MultiSites/API.php(120): Piwik_Archive_Array_IndexedBySite->getDataTableFromNumeric(Array)
 #12 /var/www/piwik-1.5.1/plugins/MultiSites/Controller.php(65): Piwik_MultiSites_API->getAll('day', '2012-06-06', false)
 #13 /var/www/piwik-1.5.1/plugins/MultiSites/Controller.php(37): Piwik_MultiSites_Controller->getSitesInfo(Object(Piwik_View))
 #14 [internal function]: Piwik_MultiSites_Controller->index()
 #15 /var/www/piwik-1.5.1/core/FrontController.php(138): call_user_func_array(Array, Array)
 #16 /var/www/piwik-1.5.1/index.php(53): Piwik_FrontController->dispatch()



La ligne #0 du log indique que l'utilisateur MySQL 'piwik' n'a pas le droit de poser de verrous (privilège '__LOCK TABLES__' ) sur les tables de la base 'piwik'.

Ce qui est normal puisque je ne lui ai pas donné ce droit ;)

Donc, en plus de privilèges existants, à savoir :
* SELECT
* INSERT
* UPDATE
* DELETE
* CREATE
* DROP
* INDEX
* ALTER
* CREATE VIEW
* SHOW VIEW

Il faut ajouter le privilège d'administration  LOCK TABLES  :

REVOKE ALL PRIVILEGES ON `piwik`.* FROM 'piwik'@'localhost';
 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, CREATE VIEW, SHOW VIEW
ON `piwik`.* TO 'piwik'@'localhost';

 
Et on oublie pas de recharger les privilèges, ca ne coute rien !
FLUSH PRIVILEGES ;
 
Et c'est reparti !

En résumé, il s'agit plus d'un problème de droits MySQL (un peu trop stricts) que d'un bug de Piwik. D’ailleurs, la FAQ de Piwik est claire sur ce point :

The Mysql USER should have the permission to SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, LOCK.

Have fun !

mardi 24 avril 2012

Initialiser une base PostgreSQL/PostGIS

 

 

 

 

 

Prérequis

  • Une instance PostGreSQL fonctionnelle
  • Le cartouche PostGIS installé

Préparation de la base

su postgres
createdb mabase
createlang plpgsql mabase
psql -d mabase -f /path/to/postgresql/version/share/contrib/postgis.sql
psql -d mabase -f /path/to/postgresql/version/share/contrib/spatial_ref_sys.sql

Création des tables

psql mabase
CREATE TABLE test (id serial PRIMARY KEY,genre text);

Ajout de la colonne géométrique à la table - AddGeometryColumn()

Pour l'instant notre table est vide, nous allons lui ajouter une troisième colonne où seront stockées nos données géométriques.

Nous aurons recours pour cela à la fonction AddGeometryColumn() de PostGIS dont la synthaxe générale est :

AddGeometryColumn( Table, 
                    Colonne_Geometrique, 
                    SRID, 
                    Type_Geometrie, 
                    Dimension);

  • Table est le nom de la table à laquelle doit être ajoutée la colonne géométrique;
  • Colonne_Geometrique est le nom de la colonne géométrique;
  • Type_Geometrie est le le type de géométrie possible:
  • SRID est l'identifiant spatial de projection selon le système de projection choisi.
    A titre d'exemple pour le Lambert II Carto Etendu, srid=27852;
  • Dimension est la dimension des objets géométriques 2D ou 3D ou 4D;
Dans notre cas, nous saisirons :

SELECT AddGeometryColumn( 'test', 'geom', -1, 'GEOMETRY', 2 );
 
 
Avec cette requête, nous avons ajouté la Colonne géométrique geom à la Table 'test'.

Comme nous n'utilisons ici aucun système de projection référencé, nous restons donc dans le plan 2D orthonormal par défaut, nous précisons juste SRID=-1.

Le type de données géométriques (Type_Geometrie) que nous souhaitons enregistrer peut-être de n'importe quel type. Nous préciserons donc par défaut GEOMETRY.
Enfin, nous sommes en 2 Dimensions.

Note
Il aurait été tout à fait possible de créer la table test en faisant directement

CREATE TABLE test (id serial PRIMARY KEY,genre TEXT,geom GEOMETRY);

Mais il y aurait alors eu un perte concernant les méta-données sur les objets géométriques concernant le type, le srid, la dimension.
Il est donc préférable d'avoir recours à la fonction AddGeometryColumn() pour pouvoir tirer profit de ces métadonnées.

mercredi 16 mars 2011

MySQL - Créer une table de sauvegarde en SQL

Astuce MySQL pour créer rapidement, en SQL, une table de sauvegarde





SET @tableName = concat ('ma_table_bak_',DATE_FORMAT(now(), '%Y_%m_%d_%H_%i'));
SET @sql := CONCAT('CREATE TABLE ', @tableName,' LIKE `ma_table`;');
PREPARE mySt FROM @sql; 
EXECUTE mySt; SET @sql2 := CONCAT('INSERT INTO ', @tableName,' SELECT * FROM `ma_table`'); 
PREPARE mySt2 FROM @sql2;
EXECUTE mySt2;

lundi 20 septembre 2010

Géopipi - Le site qui vous soulage

Vous partez en vacances avec de jeunes enfants, vous visitez une ville en accompagnant une personne handicapée/âgée ou bien tout simplement vous recherchez les wc les plus proches !


 GeoPipi est là pour vous aider et surtout localiser directement et sans attendre les toilettes publiques (gratuites et payantes).

Si ca presse, c'est par là !

jeudi 26 août 2010

Géocodage Automatique d'adresses

Un petit outil sympa, basé sur l'API Google Map©, pour géolocaliser automatiquement une liste d'adresses :
Batch geocodeur

Testé avec un fichier de 3 000 lignes d'adresses environ, l'opération a duré près de 2 heures.
Les points générés sont en degrés décimaux, système de coordonnées WGS84 - EPSG 4326

Taux de réussite :
  • 35,5 % localisé à l'adresse (accuracy = 8)
  • 29% localisé à la rue (accuracy = 6)
  • 35 % localisé à la ville (accuracy = 4)
  • 0,5% non localisé (accuracy = 0)
Intéressant ! Non ?

Merci à mon nouveau collègue pour l'info et les explications.

mardi 20 avril 2010

Débordé



Pas trop le temps de bloguer en ce moment :
  • Formation Techniques de Virtualisation chez Linagora (fin mars)
  • Formation MySQL DBA chez Anaska (début avril - Sympa les grèves à la SNCF)
  • Tests de solutions Haute Disponibilité Linux : Kvm/QEmu,Xen - Ovirt - HeartBeat - DRBD - iScsi
Les autres formations arrivent :
  • Formation LPIC 102 + Certification LPIC 101 +102 chez Linagora (début juin)
  • Formation MySQL HA chez Anaska (en mai)
Fiouuuu !

J'en profite pour saluer mes co-formés et les formateurs !

dimanche 18 avril 2010

Conseil de lectures - Heroic Fantasy

Envie de voyager ?
Plongez dans les mondes merveilleux des meilleurs auteur du genre !

David Eddings

  • La Belgariade
    • Le Pion blanc des présages
    • La Reine des sortilèges
    • Le Gambit du magicien
    • La Tour des maléfices
    • La Fin de partie de l'Enchanteur
  • La Mallorée
    • Les Gardiens du Ponant
    • Le Roi des Murgos
    • Le Démon Majeur de Karanda
    • La Sorcière de Darshiva
    • La Sibylle de Kell
  • Les préquelle
    • Belgarath le sorcier
    • Polgara la sorcière
    • Le Codex de Riva (guide du monde)

La Malerune

  • Les Armes des Garamont (Pierre Grimbert)
  • Le Dire des sylfes (Michel Robert)
  • La Belle Arcane (Michel Robert)

Robin Hobb

Prélude aux cycles de l’Assassin royal et des Aventuriers de la mer

  • Retour au pays

A. Premier cycle de l’Assassin royal

1 - L'Apprenti assassin
2 - L'Assassin du roi
3 - La Nef du crépuscule
4 - Le Poison de la vengeance
5 - La Voie magique
6 - La Reine solitaire

B. Le cycle des Aventuriers de la mer

1 - Le Vaisseau magique
2 - Le Navire aux esclaves
3 - La Conquête de la liberté
4 - Brumes et Tempêtes - Mad Ship
5 - Prisons d’eau et de bois
6 - L’Éveil des eaux dormantes
7 - Le Seigneur des trois règnes
8 - Ombres et Flammes
9 - Les Marches du trône

C. 2nd cycle de l’Assassin royal

9 - Le Prophète blanc
8 - La Secte maudite
9 - Les Secrets de Castelcerf
10 - Serments et Deuils
11 - Le Dragon des glaces
12 - L'Homme noir
13 - Adieux et Retrouvailles

D. Les Cités des anciens 

1 - Dragons et Serpents
2 - Les Eaux acides
3 - La Fureur du fleuve
4 - La Décrue
5 - Les Gardiens des souvenirs
X - A paraitre

Robert Jordan

A. Série La Roue du temps

(Édition 'Rivages et Fleuve noir')

1 - L'Invasion des ténèbres / La Roue du temps
2 - L'Œil du monde
3 - Le Cor de Valère
4 - La Bannière du dragon
5 - Le Dragon réincarné
6 - Le Jeu des ténèbres
7 - La Montée des orages
8 - Tourmentes
9 - Étincelles
10 - Les Feux du ciel
11 - Le Seigneur du chaos
12 - L'Illusion fatale
13 - Une couronne d'épées
14 - Les Lances de feu
15 - Le Sentier des dagues
16 - Alliances
17 - Le Cœur de l'hiver
18 - Perfidie
19 - Le Carrefour des ombre
 20 - Secrets
21 - Le Poignard des rêves
22 - Le Prince des corbeaux
xx - A paraitre