Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/07/2011, 19h05   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
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
tsndcb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 19h53   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 21h02   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
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 ?
tsndcb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 22h50   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Dans la documentation, on peut lire ceci :
Citation:
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 07h06   #5
Invité de passage
 
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
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.
tsndcb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 12h58   #6
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 14h14   #7
Membre éclairé
 
Inscription : avril 2009
Messages : 331
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2009
Messages : 331
Points : 397
Points : 397
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).
mydb_server est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 14h22   #8
Membre éclairé
 
Inscription : avril 2009
Messages : 331
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2009
Messages : 331
Points : 397
Points : 397
Maljuna Kris, Ced

Un petit exemple vaut mieux qu'un long discours :

Code :
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
mydb_server est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/07/2011, 16h24   #9
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Effectivement... La traduction de la documentation en français est pour le moins ambiguë sur ce point.

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

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h34   #10
Invité de passage
 
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
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.
tsndcb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 09h58   #11
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Problème ?
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 19h02   #12
Invité de passage
 
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
Citation:
Envoyé par ced Voir le message
Problème ?
Oops, oui désolé ced, on peut considérer que c'est résolu.
tsndcb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h22.


 
 
 
 
Partenaires

Hébergement Web