Je souhaite copier une base de données de production en direct dans ma base de données de développement locale. Existe-t-il un moyen de le faire sans verrouiller la base de données de production?
J'utilise actuellement:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Mais il verrouille chaque table pendant son exécution.
Réponses:
L'
--lock-tables=false
option fonctionne-t-elle?Selon la page de manuel , si vous videz des tables InnoDB, vous pouvez utiliser l'
--single-transaction
option:Pour innodb DB :
la source
C'est trop tard, mais bon pour tous ceux qui recherchent le sujet. Si vous n'êtes pas innoDB et que vous ne vous inquiétez pas du verrouillage pendant le vidage, utilisez simplement l'option:
la source
--single-transaction
.FLUSH TABLES WITH READ LOCK
choses.La réponse varie en fonction du moteur de stockage que vous utilisez. Le scénario idéal est si vous utilisez InnoDB. Dans ce cas, vous pouvez utiliser l'
--single-transaction
indicateur, qui vous donnera un instantané cohérent de la base de données au moment où le vidage commence.la source
--skip-add-locks
aidé pour moila source
--skip-add-locks
rendraient simplement la restauration du vidage plus rapide. Ce n'est pas une bonne réponse.Pour vider de grandes tables, vous devez combiner l'option --single-transaction avec --quick.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
la source
Pour les tables InnoDB, utilisez l'indicateur
--single-transaction
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
la source
--skip-lock-tables
.Honnêtement, je configurerais la réplication pour cela, car si vous ne verrouillez pas les tables, vous obtiendrez des données incohérentes du vidage.
Si le vidage prend plus de temps, les tables qui ont déjà été vidées peuvent avoir changé avec une table qui n'est que sur le point d'être vidée.
Donc, verrouillez les tables ou utilisez la réplication.
la source
C'est à peu près aussi tard par rapport au gars qui a dit qu'il était en retard qu'à la réponse d'origine, mais dans mon cas (MySQL via WAMP sur Windows 7), j'ai dû utiliser:
la source
la source
Lorsque vous utilisez MySQL Workbench, lors de l'exportation de données, cliquez sur Options avancées et décochez les options "tables de verrouillage".
la source
Comme aucune de ces approches n'a fonctionné pour moi, j'ai simplement fait:
Il exclura les commandes
LOCK TABLE <x>
etUNLOCK TABLES
.Remarque: Espérons que vos données ne contiennent pas cette chaîne!
la source
En raison de https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
la source
Une autre réponse tardive:
Si vous essayez de faire une copie chaude de la base de données de serveur (dans un environnement Linux) et le moteur de base de données de toutes les tables est MyISAM , vous devez utiliser
mysqlhotcopy
.Selon la documentation:
Le
LOCK TABLES
temps dépend du temps que le serveur peut copier les fichiers MySQL (il ne fait pas de vidage).la source
Aujourd'hui, même j'ai rencontré le même problème mais je n'avais pas accès à la ligne de commande. J'ai donc ouvert le fichier sql dans l'éditeur du bloc-notes et supprimé la ligne ci-dessous des tableaux
puis j'ai importé dans mon environnement de développement .Fonctionne bien. j'espère qu'il aide quelqu'un
la source