Je suis très nouveau dans l'administration des bases de données.
Je fais face à beaucoup de problèmes lors de la configuration de la réplication maître-esclave mysql.
Je suis également confronté à des problèmes de résolution de problèmes de réplication mysql.
Quelqu'un peut-il aider à comprendre comment dois-je gérer tout cela?
mysql
replication
mysql-5
Abdul Manaf
la source
la source
Réponses:
J'ai fourni des liens vers des tutoriels. N'oubliez pas que sur Ubuntu, le fichier my.cnf se trouve dans /etc/mysql/my.cnf et non dans /etc/my.cnf comme dans le tutoriel howtoforge. Dans ma configuration, je n'ai pas utilisé de TABLEAUX DE RINÇAGE AVEC VERROUILLAGE EN LECTURE; sur le maître. Si votre serveur maître a beaucoup d'activité d'écriture, vous devrez peut-être verrouiller vos tables en exécutant cette commande avant de sauvegarder. Si vous utilisez FLUSH TABLES WITH READ LOCK ;, puis après votre sauvegarde, vous voudrez exécuter UNLOCK TABLES. Si vous rencontrez des problèmes, faites-le moi savoir.
Voici le tutoriel que j'ai trouvé sur la façon de forger, fait pour Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Un autre tutoriel qui semblait correct pour Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Voici la configuration que j'ai utilisée:
Sur le serveur MASTER
Configurez le serveur maître:
Redémarrez MySQL:
/etc/init.d/mysql restart
Connectez-vous à la console de mysql: mysql -u root -ppassword
Créez et accordez des autorisations à l'utilisateur de la réplication.
Assurez-vous de copier ces informations quelque part ou de les laisser visibles
Vider la base de données dans un fichier:
Copiez le vidage de la base de données sur le serveur esclave à l'aide de scp ou utilisez ftp si vous le souhaitez:
Sur le serveur SLAVE
Modifiez la configuration mysql:
Redémarrez MySQL:
/etc/init.d/mysql restart
Restaurez la sauvegarde:
Connectez-vous à MySQL:
Exécuter
SHOW SLAVE STATUS\G
:Ensuite, gardez à l'esprit que la réplication peut échouer pour diverses raisons. Sur l'esclave, vous pouvez surveiller l'état en exécutant la commande SHOW SLAVE STATUS \ G; Ou en configurant une tâche cron pour surveiller l'état et envoyer des e-mails en cas d'échec. Familiarisez-vous avec la sortie de cette commande. Si la réplication s'exécute correctement, vous devriez voir "Slave_IO_State: Attendre que le maître envoie l'événement".
Une fois que vous obtenez cette configuration correctement, je peux vous fournir un script pour surveiller cette réplication.
Voici un script pour surveiller le journal des erreurs dans MySQL. Si vous ajoutez la ligne
redémarrez mysql: /etc/init.d/mysql restart
Ensuite, vous pouvez utiliser le script suivant pour surveiller le fichier journal. Si le journal change de quelque façon que ce soit, vous recevrez un e-mail vous informant qu'une erreur s'est produite sur le serveur esclave. Si vous souhaitez que le journal des erreurs soit vérifié régulièrement, vous devrez ajouter ce script à votre crontab.
Voici un exemple de script: /somepath/monitor_mysql_log.sh
Pour ajouter à crontab.
Rendez le script exécutable:
Mettre à jour crontab:
Et le script sera exécuté toutes les minutes.
Le script que j'ai fourni est un script que j'ai rapidement assemblé. De plus, pour que votre serveur puisse envoyer des e-mails, vous devez installer quelque chose comme postfix ou sendmail.
la source
Mysqldump est rapide, mais la restauration des vidages peut être très lente pour une grande base de données, et le verrouillage des tables n'est pas acceptable sur un site en direct. Une façon bien meilleure et plus rapide de configurer des esclaves est d'utiliser XtraBackup de Percona . XtraBackup impose peu de charge au maître, ne nécessite aucun verrou et la restauration sur l'esclave est très rapide. Ce mécanisme produit un clone complet de toute la base de données, y compris des éléments comme les tables d'utilisateurs, qui cassent certaines choses qui sont configurées par une installation en stock, comme l'utilisateur debian-sys-maint, ce qui n'est pas nécessairement une mauvaise chose !
En prime, une fois que vous savez faire cela, vous pouvez utiliser exactement le même mécanisme pour vos sauvegardes quotidiennes. Les sauvegardes sont plus lentes que mysqldump, mais les restaurations sont bien plus rapides, ce dont vous avez besoin si vous êtes dans une situation de panique et que vous devez restaurer une sauvegarde! Si jamais vous obtenez une erreur de réplication majeure, utilisez simplement cette procédure pour jeter l'esclave et le reconstruire; ça ne prend vraiment pas longtemps.
Vous devrez configurer le repo apt / yum de Percona pour votre distribution, puis installer le
xtrabackup
package sur le maître et l'esclave. Je recommande également fortement l'utilisation de l' utilitaire de compression pigz (gzip parallèle, disponible dans la plupart des référentiels standard) car il fait une énorme différence sur la vitesse de sauvegarde.Le processus se déroule comme ceci (sur Ubuntu, les autres distributions peuvent varier légèrement), et suppose que vous avez déjà installé MySQL sur votre esclave:
mkdir -p /var/xtrabackup; /usr/bin/innobackupex --slave-info --stream=tar --throttle=1500 /var/xtrabackup 2> /tmp/xtrabackup.out | /usr/bin/pigz -p 4 -c --best -q > /var/backups/mysql.tgz
(ajustez la valeur de limitation pour limiter l'impact de la sauvegarde sur le service en direct)scp -l 400000
pour ne pas affamer le maître de la bande passante réseau pour les clients actifs)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(ou compressez-le quelque part si vous manquez d'espace disque)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Notez l'i
option sur l'opération tar - elle ne fonctionnera pas sans elle . Cela prendra un certain temps si vous avez une grosse base de données./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Cela exécute efficacement une récupération après incident sur les fichiers à partir des journaux binaires. Cela ne prend que quelques secondes; utilisez une plus petite quantité de mémoire si sur un serveur plus petit.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Cela dira quelque chose commemysql-bin.000916 13889427
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000916', MASTER_LOG_POS=13889427;
(Modifier pour correspondre aux détails réels du serveur DB)START SLAVE;
SHOW SLAVE STATUS\G
Votre esclave est maintenant prêt. Si nécessaire, vous pouvez maintenant configurer la réplication circulaire:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
notez le nom et la position du fichier journal (quelque chose comme mysql-bin.000031 et 17244785).CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000031', MASTER_LOG_POS=17244785;
:, en insérant des valeurs de l'esclave que nous venons de regarder.START SLAVE;
UNLOCK TABLES;
Vous devriez maintenant être prêt pour une réplication circulaire.
En ce qui concerne le dépannage, la boîte à outils de Percona a toutes sortes de choses à aider, telles que la somme de contrôle pour détecter la corruption silencieuse, la mesure du retard et plus encore. Les formes les plus courantes de corruption de réplication peuvent être évitées en définissant
binlog_format = MIXED
votre my.cnf. Cela dit, d'après mon expérience, la réplication n'est généralement pas gênante.la source