Pour gérer un grand nombre de tests interagissant avec la base de données, je veux faire deux choses: p>
Je voudrais copier le schéma d'une base de données sans copier ses données. Je peux le faire avec un script qui saisit les instructions de création de table de chaque tableau de la base de données. P> li>
Lors de la création de cette base de données, je voudrais le forcer à être 100% en mémoire. P> li> ol>
Je suis coincé sur la façon de faire la partie 2 - Y a-t-il un moyen plus facile de le faire autre que de spécifier le moteur de chaque table? En quelque sorte cela semble être une mauvaise façon de le faire. P>
4 Réponses :
SET storage_engine=MEMORY; This is going to set the default storage engine for the current session.
Il y a une limite Quelle est la taille d'une table de mémoire. Il est douteux (mais possible) que toutes les tables d'un DB seront capables d'être des tables de mémoire
Les tables de mémoire ont toujours leurs métadonnées stockées sur le disque et elles ne se comportent pas les mêmes que les autres moteurs.
Développement ultérieur @MarkR Commentaire: MyISAM CODE> et INNODB CODE> sont déjà très différents et peuvent conduire à des comportements différents, entraînant des bogues qui n'arrivent qu'à un seul moteur. Ainsi, je recommande de ne pas modifier votre moteur de base de données vers Mémoire CODE>, car il va probablement introduire des bogues spécifiques à un moteur.
Créer la base de données dans / dev / shm code> (Ubuntu | Debian) et ce sera en RAM. Il peut atteindre 0,5 de mémoire disponible. P>
Cela semble bon, mais y a-t-il une solution similaire pour Centos?
Vérifiez si vous l'avez: $ Mount | grep shm. Sinon, vous pouvez créer un système de fichiers sur l'un des / dev / bélier * et le monter quelque part.
Centos 5.0+ a toujours / dev / shm monté. Cependant, vous pouvez monter une TMPF partout où vous le souhaitez. TMPFS est disponible pendant un certain temps.
Les gars, ne savons pas si c'est correct, juste essayé: MV / USR / local / mysql / Data / bla / SHM .... LN -S / Dev / SHM / BLAH -> Données / bla .... redémarrage de MySQL ... c'est volant
comme dtmilano em> dit, vous pouvez le mettre sur un système de fichiers monté TMPFS. Il n'est pas nécessaire que ce soit / dev / shm, mais c'est un endroit où TMPFS est généralement monté. Vous pouvez créer un nouveau n'importe où, bien que: p> Si cela remplit tout votre RAM disponible, il utilisera Swap comme sauvegarde. P> Mettez-le dans / etc / fstab à re-monter au démarrage. N'oubliez pas que c'est un disque RAM, de sorte qu'il commence vide à chaque fois que vous redémarrez. Voir: http://www.howtoforge.com/storing-files -Directories-in-Memory-with-tmpfs P> alternativement, comme suggéré par Yuxhuang em> Vous pouvez créer une table de type mémoire code>. Il se vide également sur le redémarrage, bien que la définition de la table reste. Le type de table code> de mémoire code> a quelques restrictions, cependant. Il utilise des lignes de taille fixe, par exemple, donc texte code> et blob code> ne sont pas autorisés, et varchar code> n'est pas une longueur variable. Voir: http://dev.mysql.com/doc /refman/5.0/fr/Memory-Storage-Engine.html P> P>
Si vous utilisez Windows, dans votre script de création de base de données, vous pouvez créer les tables ajoutant le paramètre de mémoire comme ceci:
CREATE TABLE IF NOT EXISTS `user` ( `id` varchar(23) NOT NULL, `username` varchar(250) NOT NULL, ... ) ENGINE=MEMORY DEFAULT CHARSET=utf8;