Page 1 sur 2
MySQL Replication
Publié : ven. 30 oct. 2009 14:47
par chour@mih-fr
Bonjour à tous !
J'ai mis en place une réplication MySQL, avec un master et un slave, chacun étant sur son propre serveur.
OS : W2K SP4
MySQL : 5.1.35-community
Cependant, le master ne se réplique pas sur le slave. Je n'ai rien dans les logs, les show master status et show slave status ne donnent pas beaucoup d'information.
Le slave est en "Waiting for master to send event".
J'ai rajouté ceci dans le my.conf du slave :
server-id=2
master-host=10.254.133.241
master-user=slave_user
master-password=Password01
master-connect-retry=60
replicate-do-db=wikidb,dotclear
et ceci dans le master :
log-bin="D:/Data/MySQL Server 5.1/mysql-bin.log"
server-id=1
binlog-do-db=wikidb,dotclear
Pour ceux qui aurait déjà mis ça en place, avez-vous rencontrez des difficultés ?
Merci
MySQL Replication
Publié : ven. 30 oct. 2009 18:55
par fighting_falcon
nan aucune ...
De mémoire, j'ai suivi ça :
http://members.cox.net/midian/howto/mys ... cation.htm
As tu fais la dernière partie ?
# mysql -u root -p
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_LOG_FILE='[Filename written down]',
MASTER_LOG_POS=[Position written down];
mysql> START SLAVE;
MySQL Replication
Publié : sam. 31 oct. 2009 12:25
par Ryu_wm
ça fait des mois que je cherche à faire de la réplication MySQL entre deux hotes distants sur le net et je n'y arrive pas non plus
( en meme temps je me penche dessus tous les 36 du mois

)
MAIS ce sujet m'interesse au plus haut point !
MySQL Replication
Publié : sam. 31 oct. 2009 21:15
par chour@mih-fr
Moi j'ai suivi ce tuto :
http://www.howtoforge.com/mysql_database_replication
Et pareil, ça ne semble pas du tout fonctionner ... Alors que pour mon cas, je suis en intranet sans firewall ni rien !
fighting_falcon > Oui bien sûr !
En fait ce qui me chagrine, c'est que l'on fait connaître au slave quel est son master, mais pas l'inverse. Or, c'est le master qui initie la réplication, mais s'il ne connaît pas le ou les slave, ça ne peut jamais fonctionner, non ?!
MySQL Replication
Publié : dim. 1 nov. 2009 13:30
par fighting_falcon
c'est le slave en démarrant qui se connecte au master et lui dit "ouh ouh je suis là"
Ensuite, dès qu'il y a un truc à répliquer, le master l'envoie à chaque slave connecté ...
MySQL Replication
Publié : lun. 2 nov. 2009 10:55
par chour@mih-fr
Ok ok !
J'ai quand même un petit souci : le log binaire que j'ai renseigné n'a pas l'air de vouloir se créer :/ Je ne trouve pas mon fichier D:/Data/MySQL Server 5.1/mysql-bin.log sur le master. Mais aucune erreur dans les logs

MySQL Replication
Publié : ven. 13 nov. 2009 15:03
par nidosaur
moi je mettrais des paths sans espace a ta place.
sinon ce que j'ai scripté pour créer un slave
#!/bin/sh
####################################################################
# PSU #
# 06/02/2009 #
# Script pour repliquer 2 serveurs mysql #
# A Executer cote master (localhost) #
####################################################################
### variables de connection mysql ###
master_ip="144.56.18.63" ## nec_ubuntu
master_login="root"
master_password=""
master_repli_user="slave_user"
master_repli_password="slave_user"
slave_ip="144.56.14.73" ## nagios ex dickens
slave_login="root"
slave_password="slave"
### variables diverse ###
save_mysql="save.sql.bz2" #fichier de sauvegarde du dump mysql
exclude_database="mysql|information_schema" # Liste des databases a exclure de la sauvegarde separe par |
## Creation de la chaine de connection mysql
if [ $master_password ]; then connection_master=" -u$master_login -p$master_password "; else connection_master=" -u$master_login "; fi
if [ $slave_password ]; then connection_slave=" -u$slave_login -p$slave_password "; else connection_slave=" -u$slave_login "; fi
## On genere la liste des database a sauvegarder
databases=`echo "show databases\G" | mysql $connection_master | grep Database | grep -E -v $exclude_database | awk '{
print $2}'`
for base in $databases
do
b=$b" "$base
done
echo "Sauvegarde Mysql du Master dans $save_mysql"
ssh $master_ip "mysqldump $connection_master --master-data --add-drop-table --databases $b | bzip2 > $save_mysql"
echo "Transfert de la sauvegarde sur le Slave"
ssh $master_ip "scp $save_mysql root@$slave_ip:/tmp/"
echo "Stop Slave"
echo "ssh $slave_ip 'mysql $connection_slave -e \"slave stop;\"'" | sh
echo "Restauration sur le Slave"
ssh $slave_ip "bzcat /tmp/$save_mysql | mysql $connection_slave"
echo "Fin de restauration sur le slave"
echo "Start Slave"
echo "ssh $slave_ip 'mysql $connection_slave -e \"slave start;\"'" | sh
echo "Nettoyage des fichiers sur Master et Slave"
ssh $master_ip "rm $save_mysql"
ssh $slave_ip "rm /tmp/$save_mysql"
le script est pas optimisé code, il est opitmisé lisibilité
MySQL Replication
Publié : ven. 13 nov. 2009 15:06
par nidosaur
et pour vérifier la replication 2 scripts (attention ca fait un lock coté database master)
verif_repli.sh qui appelle norun_verif_mysql.sh
#!/bin/sh
####################################################################
# PSU #
# 06/02/2009 #
# Script pour verifier la replication entre 2 serveurs mysql #
# A Executer sur un serveur connu authorized_keys pour ssh #
####################################################################
### variables ###
master_ip="localhost" ## nec_ubuntu
master_login="root"
master_password=""
## Creation de la chaine de connection mysql
if [ $master_password ]; then connection_master=" -u$master_login -p$master_password "; else connection_master=" -u$master_login "; fi
echo "Lock sur le Master"
ssh $master_ip 'mysql $connection_master -e "flush tables with read lock;
system /root/scripts/norun_verif_mysql.sh;
unlock tables;"'
echo "Unlock Master"
#!/bin/sh
####################################################################
# PSU #
# 06/02/2009 #
# Script pour verifier la replication entre 2 serveurs mysql #
# A Executer sur un serveur connu authorized_keys pour ssh #
# Ce script est lance par le script verif_mysql.sh afin d acquerir #
# Un lock sur la session du programme #
####################################################################
### variables ###
master_ip="localhost" ## nec_ubuntu
master_login="root"
master_password=""
slave_ip="144.56.14.73" ## nagios ex dickens
slave_login="root"
slave_password="slave"
latence=5 #delai en seconde pour attendre la fin des transactions sur le master
## Creation de la chaine de connection mysql
if [ $master_password ]; then connection_master=" -u$master_login -p$master_password "; else connection_master=" -u$master_login "; fi
if [ $slave_password ]; then connection_slave=" -u$slave_login -p$slave_password "; else connection_slave=" -u$slave_login "; fi
echo "Attente de $latence secondes pour fin de replication"
sleep $latence
##Lecture de la position du master
master_pos=`ssh $master_ip "mysql ${connection_master} -e \"show master status\G\"" | grep "Position" | awk '{print $2}'`
##Lecture de la position du slave
slave_pos=`ssh $slave_ip "mysql ${connection_slave} -e \"show slave status\G\"" | grep "Read_Master_Log_Pos" | awk '{print $2}'`
slave_sql_running=`ssh $slave_ip "mysql ${connection_slave} -e \"show slave status\G\"" | grep "Slave_SQL_Running" | awk '{print $2}'`
slave_io_running=`ssh $slave_ip "mysql ${connection_slave} -e \"show slave status\G\"" | grep "Slave_IO_Running" | awk '{print $2}'`
echo "Position Master : "$master_pos
echo "Position Slave : "$slave_pos
if [ $slave_sql_running == "No" ] || [ $slave_io_running == "No" ]
then
echo "KO : LA REPLICATION EST CASSE"
else
if [ $slave_pos == $master_pos ]
then
echo "LA REPLICATION EST OK"
else
echo "KO : REPLICATION en retard"
fi
fi
echo "Verification du checksum des tables du Master"
databases=`echo "show databases" | mysql $connection_master | grep -v Database`
for base in $databases
do
tables=`echo "use $base;show tables;" | mysql $connection_master | grep -v "Tables_in_$base"`
for t in $tables
do
### On recupere le type de table innodb ou MyIsam ###
master_type_table=`mysql -h $master_ip $connection_master -e "show table status from $base where name='$t'" | grep -v "Avg_row_length" | awk
'{print $2}'`
master_isam_result=`echo "checksum table $base.$t" | mysql -h $master_ip $connection_master | grep "$base.$t" | awk '{print $2}'`
slave_isam_result=`echo "checksum table $base.$t" | mysql -h $slave_ip $connection_slave | grep "$base.$t" |awk '{print $2}'`
if [ "${master_isam_result}" != "${slave_isam_result}" ]
then
echo "$master_type_table $base => $t => master : $master_isam_result | slave : $slave_isam_result"
fi
done
done
c'est pas optimisé non plus il y a des ameliorations a mener mais c'est fonctionnel (dans ma boite et dans la boite d'un pote a qui je l ai donné
le principe de la verif est de locker les databases et de faire des checksums sur les tables puis de comparer.
MySQL Replication
Publié : dim. 15 nov. 2009 22:04
par Ryu_wm
merci pour cette avancée
( pour moi ça ne sert pas car je suis sous mysql coté windows

)
MySQL Replication
Publié : mar. 17 nov. 2009 14:41
par Naibed
sujet qui m intéresse vivement , je vais etre amené à faire la même chose ,merci du tuyau

MySQL Replication
Publié : jeu. 19 nov. 2009 14:17
par chour@mih-fr
Je suis sous Windows également.
J'ai beau regarder mes "show slave status" et "show master status", je ne comprends toujours pas pourquoi ce foutu slave ne se met pas à jour ...
Code : Tout sélectionner
Waiting for master to send event 10.254.133.241 slave_user 3306 60 mysql-bin.000005 106 pars03100504-relay-bin.000506 251 mysql-bin.000005 Yes Yes wikidb,dotclear 0 0 106 558 None 0 No 0 No 0 0
MySQL Replication
Publié : jeu. 19 nov. 2009 14:33
par fighting_falcon
parefeu / routeur / autre entre les deux machines hébergeant les MySQL ?
MySQL Replication
Publié : jeu. 19 nov. 2009 14:38
par chour@mih-fr
Toutes les 2 dans en intranet (ie : aucun drop de paquet possible), aucun parefeu entre les 2.
MySQL Replication
Publié : jeu. 19 nov. 2009 14:57
par fighting_falcon
sur chaque serveur, si tu fais un "telnet autre_serveur 3306" ça répond ?
MySQL Replication
Publié : jeu. 19 nov. 2009 16:36
par chour@mih-fr
sur chaque serveur, si tu fais un "telnet autre_serveur 3306" ça répond ?
Affirmatif
MySQL Replication
Publié : jeu. 19 nov. 2009 16:56
par fighting_falcon
dans les journaux d'évènements Windows y'a qq chose ou bien ?
MySQL Replication
Publié : sam. 21 nov. 2009 11:20
par chour@mih-fr
Faut que je regarde, mais il me semble que je n'avais pas trouvé d'erreur les dernières fois. Je te redis ça lundi.
MySQL Replication
Publié : mar. 24 nov. 2009 11:02
par chour@mih-fr
J'ai fait un arrêt / relance du serveur MySQL Slave, et voici ce que j'ai (ordre chronologique) :
The syntax 'for replication startup options' is deprecated and will be removed in MySQL 6.0. Please use 'CHANGE MASTER' instead.
For more information, see Help and Support Center at
http://www.mysql.com.
Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=pars03100504-relay-bin' to avoid this problem.
For more information, see Help and Support Center at
http://www.mysql.com.
Slave I/O thread: connected to master 'slave_user@10.254.133.241:3306',replication started in log 'mysql-bin.000005' at position 106
For more information, see Help and Support Center at
http://www.mysql.com.
Slave SQL thread initialized, starting replication in log 'mysql-bin.000005' at position 106, relay log '.\pars03100504-relay-bin.000622' position: 251
For more information, see Help and Support Center at
http://www.mysql.com.
D:\Apps\MySQL Server 5.1\bin\mysqld: ready for connections.
Version: '5.1.35-community' socket: '' port: 3306 MySQL Community Server (GPL)
For more information, see Help and Support Center at
http://www.mysql.com.
---- EDIT
La log du slave :
Code : Tout sélectionner
Version: '5.1.35-community' socket: '' port: 3306 MySQL Community Server (GPL)
091124 10:42:24 [Note] D:\Apps\MySQL Server 5.1\bin\mysqld: Normal shutdown
091124 10:42:24 [Note] Event Scheduler: Purging the queue. 0 events
091124 10:42:24 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
091124 10:42:24 [Note] Slave I/O thread killed while reading event
091124 10:42:24 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000005', position 106
091124 10:42:24 [Note] Error reading relay log event: slave SQL thread was killed
091124 10:42:24 InnoDB: Starting shutdown...
091124 10:42:26 InnoDB: Shutdown completed; log sequence number 0 2074015
091124 10:42:26 [Warning] Forcing shutdown of 1 plugins
091124 10:42:26 [Note] D:\Apps\MySQL Server 5.1\bin\mysqld: Shutdown complete
091124 10:42:42 InnoDB: Started; log sequence number 0 2074015
091124 10:42:42 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=pars03100504-relay-bin' to avoid this problem.
091124 10:42:42 [Note] Slave I/O thread: connected to master 'slave_user@10.254.133.241:3306',replication started in log 'mysql-bin.000005' at position 106
091124 10:42:42 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000005' at position 106, relay log '.\pars03100504-relay-bin.000622' position: 251
091124 10:42:42 [Note] Event Scheduler: Loaded 0 events
091124 10:42:42 [Note] D:\Apps\MySQL Server 5.1\bin\mysqld: ready for connections.
Version: '5.1.35-community' socket: '' port: 3306 MySQL Community Server (GPL)
Je pense que je vais devoir refaire ma réplication.
Dans l'ordre :
1/ purger mes 2 databases sur mon slave
2/ refaire un export de mes 2 databases master et les réinjecter sur le slave
3/ reprendre les log_bin et log_pos
4/ rejouer la requete sur le slave
MySQL Replication
Publié : mar. 24 nov. 2009 11:57
par chour@mih-fr
Pinaise, je ne comprends rien ... quand je fais un show master status, je retrouve bien le bon log-bin et log-pos que ceux indiqués dans les logs du slave ...
MySQL Replication
Publié : mar. 24 nov. 2009 15:00
par nidosaur
1./ Dump du master
mysqldump -umasterlogin -pmasterpassword --master-data --add-drop-table --databases liste des databases > dump.sql
l'option --master-data permet d'avoir la position du master au moment du dump
2./ si le slave est encours en route faire un stop slave
3./ injection du dump dans le slave
mysql -uslavelogin -pslavepassword < dump.sql
4./ slave start s'il est pas démarré
souvent quand ca marche pas c'est a cause des options du dump qui sont pas suffisantes pour une réplication
MySQL Replication
Publié : mar. 24 nov. 2009 16:04
par chour@mih-fr
Merci nidosaur !
Dans l'event viewer, le dernier message est :
Slave SQL thread initialized, starting replication in log 'mysql-bin.000006' at position 106, relay log '.\pars03100504-relay-bin.000001' position: 4
For more information, see Help and Support Center at
http://www.mysql.com.
J'arrive bien à me connecter avec le user du slave sur le master :
C:\Documents and Settings\Web>mysql -uslave_user -pPassword01 -h10.254.133.241
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 79
Server version: 5.1.35-community-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Sauf que j'ai :
error reconnecting to master 'slave_user@10.254.133.241:3306' - retry-time: 60 retries: 86400
dans mon "show slave status"
J'ai comme seul droit Repl_slave_priv pour mon user slave_user pour la réplication (extrait de la base mysql table user)
Bon, je vais faire un test en ajoutant un des data sur une des db du master, et voir comment cela interagit ensuite.
MySQL Replication
Publié : mar. 24 nov. 2009 16:40
par chour@mih-fr
Pas d'amélioration. J'ai rajouté un champ et il n'est pas répliqué.
Le error_connecting doit vraisemblablement venir du fait que j'ai rebooté mon serveur tout à l'heure.
Edit : Finalement ca tourne si on en croit ceci :
Code : Tout sélectionner
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB
Waiting for master to send event 10.254.133.241 slave_user 3306 60 mysql-bin.000006 106 pars03100504-relay-bin.000003 251 mysql-bin.000006 Yes Yes wikidb,dotclear
MySQL Replication
Publié : mer. 25 nov. 2009 16:42
par nidosaur
tu peux montrer le resultat de
show slave status\G;
MySQL Replication
Publié : mer. 25 nov. 2009 16:43
par nidosaur
et les conf my.cnf du master et du slave
MySQL Replication
Publié : mer. 25 nov. 2009 16:55
par nidosaur
et au niveau des droits pour le slave tu dois avoir
nom :slave_user
hosts : 144.56.14.73
privileges SELECT, RELOAD, SUPER, REPLICATION SLAVE
grant :Non
si tes serveurs ont un accés vpn ou quelconque depuis l exterieur, je peux jeter un coup d'oeil si tu veux, meme si je suis plutot linux !