IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

sauvegarder tables en mémoire à l'arrêt de mysql ?


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut sauvegarder tables en mémoire à l'arrêt de mysql ?
    Bonsoir,

    Je suis nouveau parmi vous et également avec mysql.
    Je suis sous debian squeeze avec mysql 5.1.49, j'utilise une base de données avec deux tables en mémoire (pour des raisons de performance io disk).

    Cependant, j'ai un gros problème lors de l'arrêt de mysql, car comme vous vous en doutez, les données présentes dans ces deux tables sont perdues.

    Ma question est donc : est-il possible de sauvegarder ces données de ces deux tables dans la base lors de l'arrêt de mysql et dans ce cas-là comment le faire ?

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Que je sache, ces tables sont supprimées par MySQL, non pas à l'arrêt du serveur, mais à la fin d'une session de connexion.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut
    Je pensais pourtant que c'était à l'arrêt, pour être plus excat, c'est un usage pour cacti, ces deux tables sont "vidées" dans la base toutes les heures, cependant si après ce "vidage" en base, j'attends un peu moins d'une heure, je perds toutes les données en arrêtant mysql, il en est de même bien sûr si j'attends moins longtemps.

    Une solution à laquelle j'avais pensé et bien sûr un dump dans la procédure d'arrêt, puis une restauration au redémarrage, mais il y a probablement plus simple et moins lourd, peut être un changement de type de ces deux tables en innodb par exemple avant l'arrêt de mysql, puis un rechangement de type en memory après le redémarrage.

    Qu'en pensez-vous ?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Dans la documentation, on peut lire ceci :
    Les tables MEMORY ne peuvent pas être converties en tables disques.
    Donc, il n'est apparemment pas possible de les transformer en table InnoDB.

    Peut-être en passant par des solutions de réplication... Mais là, je ne connais pas assez MySQL...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut
    Si, il est tout à fait possible de convertir ces deux tables en innodb, cependant, comme je l'ai indiqué, pour des raisons de performances, le fonctionnement de ces deux tables en mémoire est préférable.

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par tsndcb Voir le message
    Une solution à laquelle j'avais pensé et bien sûr un dump dans la procédure d'arrêt, puis une restauration au redémarrage, mais il y a probablement plus simple et moins lourd, peut être un changement de type de ces deux tables en innodb par exemple avant l'arrêt de mysql, puis un rechangement de type en memory après le redémarrage.

    Qu'en pensez-vous ?
    Comme te l'a dit Ced, le changement de type par ALTER TABLE vers un autre moteur est impossible.
    Par contre tu peux avoir une table de dump InnoDB qui serait chargée par INSERT avant l'arrêt du serveur des lignes de la table MEMORY, puis au redémarrage du serveur, après création de la table MEMORY, il faudrait la charger par INSERT à partir de la table InnoDB, laquelle serait ensuite vidée par TRUNCATE.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Pour sauvegarder tes données, je te conseille de modifier ton script d'arrêt (ou d'en développer un) pour décharger tes tables MEMORY dans un fichier.

    Pour recharger tes données, c'est plus simple, tu n'as qu'à renseigner la variable init_file dans ton fichier de paramètres my.cnf (.ini).

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Maljuna Kris, Ced

    Un petit exemple vaut mieux qu'un long discours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    mysql:root:b1> create table t_mem engine=MEMORY as select table_name, table_rows from information_schema.tables;
    Query OK, 119 rows affected (0.80 sec)
    Records: 119  Duplicates: 0  Warnings: 0
    
    mysql:root:b1>
    mysql:root:b1> show create table t_mem;
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t_mem | CREATE TABLE `t_mem` (
      `table_name` varchar(64) NOT NULL DEFAULT '',
      `table_rows` bigint(21) unsigned DEFAULT NULL
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8 |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.01 sec)
    
    mysql:root:b1> select count(*) from t_mem;
    +----------+
    | count(*) |
    +----------+
    |      119 |
    +----------+
    1 row in set (0.00 sec)
    
    mysql:root:b1> alter table t_mem engine=INNODB;
    Query OK, 119 rows affected (0.61 sec)
    Records: 119  Duplicates: 0  Warnings: 0
    
    mysql:root:b1> show create table t_mem;
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t_mem | CREATE TABLE `t_mem` (
      `table_name` varchar(64) NOT NULL DEFAULT '',
      `table_rows` bigint(21) unsigned DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql:root:b1> select count(*) from t_mem;
    +----------+
    | count(*) |
    +----------+
    |      119 |
    +----------+
    1 row in set (0.01 sec)
    
    mysql:root:b1> alter table t_mem engine=MEMORY;
    Query OK, 119 rows affected (0.34 sec)
    Records: 119  Duplicates: 0  Warnings: 0
    
    mysql:root:b1>
    mysql:root:b1> select count(*) from t_mem;
    +----------+
    | count(*) |
    +----------+
    |      119 |
    +----------+
    1 row in set (0.01 sec)
    
    
    mysql:root:b1> show create table t_mem;
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t_mem | CREATE TABLE `t_mem` (
      `table_name` varchar(64) NOT NULL DEFAULT '',
      `table_rows` bigint(21) unsigned DEFAULT NULL
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8 |
    +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql:root:b1>
    Rachid

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Effectivement... La traduction de la documentation en français est pour le moins ambiguë sur ce point.

    Merci
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut
    Bonjour,

    Merci pour vos réponses, je viens de tester en modifiant mon script stop/start pour y inclure un "simple" ALTER TABLE et cela à l'air de fonctionner.

    Merci beaucoup à vous tous.

  11. #11
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Problème ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut
    Citation Envoyé par ced Voir le message
    Problème ?
    Oops, oui désolé ced, on peut considérer que c'est résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/01/2007, 14h07
  2. Table en mémoire
    Par apad dans le forum Delphi
    Réponses: 3
    Dernier message: 05/10/2006, 12h04
  3. Lister les tables d'une base de données MySQL
    Par Legenyes dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 05/07/2006, 18h43
  4. Réponses: 3
    Dernier message: 30/05/2006, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo