Comment verrouiller toutes les tables dans une base mysql?
J'écris une sauvegarde script shell pour exécuter la commande mysqldump.
mysqldump -u$BACKUP_USER -p$BACKUP_PASS --flush-logs --lock-tables $DB_NAME > $SQL_FILE
Ma db, MOTEUR de stockage est MyISAM. Donc je ne peux pas utiliser --single-transaction
option.
Le --lock-tables
ne verrouiller une table dans mysqldump progrès.
Il existe de nombreuses bases de données dans mon instance MySQL, je ne veux pas utiliser --lock-all-tables
, il se verrouille toutes les bases de données de serveur.
Donc, Comment faire pour verrouiller toutes les tables dans UNE base de données mysql à sametime donc je peux faire un dump?
--lock-tables
doit verrouiller toutes les tables sous-évaluées avant l'immersion. Ce qui vous fait penser que ce n'est pas de le faire?J'ai test en mysql 5.1, lorsque j'utilise --lock-tables dans le dump, je ne peux toujours insérer les données dans une table de $DB_NAME base de données.
OriginalL'auteur KeepZero | 2012-12-27
Vous devez vous connecter pour publier un commentaire.
Pas la plus jolie de la solution de loin, mais cela fonctionne. J'ai eu le même besoin et voici ma solution, légèrement modifié pour correspondre à vos noms de variable. Je suis en supposant que vous utilisez MySQL sur Linux, comme cela s'appuie assez fortement sur le shell BASH de la sémantique. Si vous êtes sur Windows, ce ne sera probablement pas travailler.
Mise à JOUR: j'ai utilisé "SET SESSION group_concat_max_len=8192;" en face de votre premier ÉCHO parce que c'était ce qui causait le problème en premier lieu! TY pour les frais de script!
Veuillez upvote si vous likey.
Joshua Huber : Si --lock-tables de serrures de toutes les tables dans les bases de données, puis comment il est différent de --verrouillage de toutes les tables de drapeau disponible avec "mysqldump".
OriginalL'auteur Joshua Huber
Vous devriez examiner cette option.
FLUSH TABLES WITH READ LOCK
http://dev.mysql.com/doc/refman/5.0/en/flush.html
FLUSH TABLES WITH READ LOCK
Cette question d'un global verrou en lecture, et pas seulement les tables dans une base de données unique.
OriginalL'auteur frustratedtech
Voici comment je l'ai fait. Il devrait fonctionner dans tous les cas, car il utilise
FLUSH TABLES WITH READ LOCK
.La coquille
sleep
commande est juste pour s'assurer que les tâches d'arrière-plan de l'exécution de l'mysql verrouillage de la commande est exécutée avant la commande mysqldump commence. Vous pourriez réduire à 1 seconde et il devrait toujours être bon. Augmenter de 30 secondes et essayez de l'insérer les valeurs dans une table à partir d'un autre client, au cours de ces 30 secondes, vous verrez qu'il est verrouillé.Il y a 2 avantages dans l'utilisation de ce manuel de l'arrière-plan de verrouillage, au lieu d'utiliser le
mysqldump
options--single-transaction
et--lock-tables
:mysqldump
au cours de la même période de verrouillage. Il est utile, par exemple, lors de la configuration de la réplication sur un nœud maître, parce que vous avez besoin pour obtenir le log binaire position avecSHOW MASTER STATUS;
à l'état exact de la sauvegarde que vous avez créé (avant de déverrouiller la base de données), pour être en mesure de créer un esclave de réplication.OriginalL'auteur Nicomak