Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes | ||
informatique:db:mysql [2012/02/03 14:29] – bn8 | informatique:db:mysql [2016/08/05 08:44] – [Réplication Master-Master] bn8 | ||
---|---|---|---|
Ligne 16: | Ligne 16: | ||
sudo / | sudo / | ||
+ | ===== Dump des privilèges des utilisateurs ===== | ||
+ | |||
+ | mysql -B -N $@ -e " | ||
+ | 'SHOW GRANTS FOR ''', | ||
+ | ) AS query FROM mysql.user" | ||
+ | mysql $@ | \ | ||
+ | sed ' | ||
===== Réplication Master-Master ===== | ===== Réplication Master-Master ===== | ||
Ligne 31: | Ligne 38: | ||
log_bin = / | log_bin = / | ||
* Commenter la ligne : < | * Commenter la ligne : < | ||
- | * Exécuter la requête SQL suivante : < | + | * Exécuter la requête SQL suivante : < |
* Redémarrer le service //MySQL// | * Redémarrer le service //MySQL// | ||
* Sur serveur 2 : | * Sur serveur 2 : | ||
Ligne 43: | Ligne 50: | ||
master-port = 3306</ | master-port = 3306</ | ||
* Redémarrer le service //MySQL// | * Redémarrer le service //MySQL// | ||
- | * Exécuter la requête SQL suivante : < | + | * Exécuter la requête SQL suivante : < |
- | * Pour savoir si la réplication se passe correctement exécuter la requête suivante : < | + | * Pour savoir si la réplication se passe correctement exécuter la requête suivante : < |
* Le résultat de cette requête devrais être a peu près : < | * Le résultat de cette requête devrais être a peu près : < | ||
| | ||
Ligne 60: | Ligne 67: | ||
...</ | ...</ | ||
* Les valeurs // | * Les valeurs // | ||
- | * Cette vérification est également possible depuis serveur 1 en exécutant la requête SQL suivante : < | + | * Cette vérification est également possible depuis serveur 1 en exécutant la requête SQL suivante : < |
* Le résultat de cette requête devrais être a peu près : < | * Le résultat de cette requête devrais être a peu près : < | ||
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | | | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | | ||
Ligne 67: | Ligne 74: | ||
+------------------+----------+--------------+------------------+ | +------------------+----------+--------------+------------------+ | ||
1 row in set (0.00 sec)</ | 1 row in set (0.00 sec)</ | ||
- | * Exécuter ensuite la requête SQL suivante : < | + | * Exécuter ensuite la requête SQL suivante : < |
* Sur serveur 1 : | * Sur serveur 1 : | ||
* Editer le fichier /// | * Editer le fichier /// | ||
Ligne 75: | Ligne 82: | ||
master-port = 3306</ | master-port = 3306</ | ||
* Redémarrer le service //MySQL// | * Redémarrer le service //MySQL// | ||
- | * Exécuter la requête SQL suivante : < | + | * Exécuter la requête SQL suivante : < |
- | * Vérifier que la synchronisation se passe correctement dans se sens également en exécutant la requête SQL : < | + | * Vérifier que la synchronisation se passe correctement dans se sens également en exécutant la requête SQL : < |
* Le résultat de cette requête devrais être a peu près : < | * Le résultat de cette requête devrais être a peu près : < | ||
| | ||
Ligne 92: | Ligne 99: | ||
...</ | ...</ | ||
* Les valeurs // | * Les valeurs // | ||
- | * Sur serveur 2, la requête SQL suivante < | + | * Sur serveur 2, la requête SQL suivante < |
La synchronisation est normalement opérationnel. | La synchronisation est normalement opérationnel. | ||
+ | ===== Si ça se passe mal ===== | ||
+ | |||
+ | ==== Could not find first log file name in binary log index file ==== | ||
+ | |||
+ | Si vous rencontrez une erreur du type : | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Voici la solution à appliquer : | ||
+ | |||
+ | * Sur le slave : <code sql>stop slave;</ | ||
+ | * Sur le master : | ||
+ | * Exécuter : <code sql> | ||
+ | show master status;</ | ||
+ | * Noter le nom du log et la position | ||
+ | *Sur le slave : <code sql> | ||
+ | start slave;</ | ||
+ | ==== Resynchro complète d'une des machines sur l' | ||
+ | |||
+ | * Sur une des deux machines que l'on choisira comme étant **master** : | ||
+ | * Exécuter les commandes SQL suivantes : <code sql> | ||
+ | FLUSH TABLES WITH READ LOCK; | ||
+ | SHOW MASTER STATUS;</ | ||
+ | * Copier le résultat de la dernière requête (//File// & // | ||
+ | * Faire un dump des bases : <code bash> | ||
+ | * Exécuter la commande SQL suivante : <code sql> | ||
+ | * Sur l' | ||
+ | * Exécuter la commande SQL suivante : <code sql>STOP SLAVE;</ | ||
+ | * Importer le dump généré sur l' | ||
+ | * Exécuter les commandes SQL suivantes en adaptant les variables // | ||
+ | CHANGE MASTER TO MASTER_LOG_FILE=' | ||
+ | START SLAVE;</ | ||
+ | * Vérifier que la synchro est bien reparti à l'aide de la requête SQL : <code sql>show slave status\G;</ | ||
+ | |||
+ | |||
+ | ===== Optimiser MySQL ===== | ||
+ | |||
+ | Utiliser l' | ||
+ | |||
+ | <code bash># | ||
+ | |||
+ | # Get a list of all fragmented tables | ||
+ | FRAGMENTED_TABLES=" | ||
+ | |||
+ | # Run Optimize on | ||
+ | for fragment in $FRAGMENTED_TABLES; | ||
+ | database=" | ||
+ | table=" | ||
+ | [ $fragment != ' | ||
+ | done</ | ||
+ | |||
+ | **Source : ** http:// | ||
+ | |||
+ | ===== Recrée l' | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | ===== Extraire les dumps DB par DB d'un dump complet ===== | ||
+ | |||
+ | Le script ci-dessous automatise cela : | ||
+ | |||
+ | <code bash># | ||
+ | |||
+ | IN=" | ||
+ | [ -z " | ||
+ | |||
+ | currentdb="" | ||
+ | dbline="" | ||
+ | endline="" | ||
+ | nbextracted=0 | ||
+ | headend="" | ||
+ | function extract() { | ||
+ | headend=" | ||
+ | db=" | ||
+ | f=" | ||
+ | e=" | ||
+ | file=db_$( echo " | ||
+ | echo -n " | ||
+ | sed -n 1, | ||
+ | sed -n ${f},${e}p $IN >> $file | ||
+ | echo " | ||
+ | let nbextracted=nbextracted+1 | ||
+ | } | ||
+ | |||
+ | IFS=" | ||
+ | " | ||
+ | for line in $( grep -n '\-\- Current Database:' | ||
+ | do | ||
+ | nbline=$( echo " | ||
+ | if [ ! -z " | ||
+ | then | ||
+ | let f=dbline-1 | ||
+ | let e=nbline-2 | ||
+ | extract " | ||
+ | else | ||
+ | let headend=nbline-2 | ||
+ | fi | ||
+ | dbline=$nbline | ||
+ | currentdb=$( echo " | ||
+ | done | ||
+ | |||
+ | if [ ! -z " | ||
+ | then | ||
+ | let f=dbline-1 | ||
+ | e=$( wc -l $IN|awk ' | ||
+ | extract " | ||
+ | fi | ||
+ | |||
+ | echo " |