La documentation à ce sujet sur le site MySQL est terriblement obsolète et truffée d'erreurs (comme interactive_timeout). L'émission de FLUSH TABLES WITH READ LOCK dans le cadre de votre exportation du master n'a généralement de sens que lorsqu'elle est coordonnée avec un snapshot du système de stockage/de fichiers tel que LVM ou zfs.
Si vous utilisez mysqldump, vous devriez plutôt compter sur l'option --master-data pour vous prémunir contre les erreurs humaines et libérer les verrous sur le master aussi rapidement que possible.
Supposons que le maître soit 192.168.100.50 et l'esclave 192.168.100.51, que chaque serveur ait un server-id distinct configuré, que le maître ait une connexion binaire et l'esclave une lecture seule = 1 dans my.cnf.
Pour que l'esclave puisse démarrer la réplication juste après avoir importé le dump, lancez une commande CHANGE MASTER mais omettez le nom et la position du fichier journal :
slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1';
Émettez le GRANT sur le maître pour que l'esclave l'utilise :
masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1';
Exporter le master (en écran) en utilisant la compression et en capturant automatiquement les coordonnées binaires correctes du journal :
mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz
Copiez le fichier replication.sql.gz sur l'esclave, puis importez-le avec zcat sur l'instance de MySQL exécutée sur l'esclave :
zcat replication.sql.gz | mysql
Démarrez la réplication en envoyant la commande à l'esclave :
slaveserver> START SLAVE;
En option, mettez à jour le fichier /Root/.my.cnf sur l'esclave afin de stocker le même mot de passe Root que le maître.
Si vous êtes sur 5.1+, il est préférable de définir d'abord le binlog_format du maître sur MIXED ou ROW. Attention, les événements enregistrés par rangée sont lents pour les tables qui n'ont pas de clé primaire. Cette configuration est généralement meilleure que la configuration alternative (et par défaut) de binlog_format=statement (sur le maître), car elle est moins susceptible de produire des données erronées sur l'esclave.
Si vous devez (mais ne devriez probablement pas) filtrer la réplication, faites-le avec les options esclaves replicate-wild-do-table=dbname.% ou replicate-wild-ignore-table=badDB.% et utilisez seulement binlog_format=row
Ce processus détiendra un verrou global sur le maître pour la durée de la commande mysqldump mais n'aura pas d'autre impact sur le maître.
Si vous êtes tenté d'utiliser mysqldump --master-data --all-databases --single-transaction (parce que vous n'utilisez que des tables InnoDB), vous avez peut-être intérêt à utiliser MySQL Enterprise Backup ou l'implémentation open source appelée xtrabackup (avec l'aimable autorisation de Percona).