IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Replication InnoDB marche a suivre


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut Replication InnoDB marche a suivre
    Bonjour à tous,

    J'ai bien suivi le tutoriel http://jgrondin.developpez.com/artic...ication_MySQL/

    Mais comme j'utilise des tables au format InnoDB il y a quelques variantes ...

    Alors la procedure est la suivante, coté master j'ai créé un utilisateur avec cette commande :
    GRANT REPLICATION SLAVE ON *.* TO repl@'%'IDENTIFIED BY 'repl';
    Voici d'abord mes fichiers de configurations.

    Coté master (serveur debian sarge, MySQL 5.0.20 issue du depot Backports) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    [client]
    port        = 3306
    socket        = /var/run/mysqld/mysqld.sock
    [mysqld_safe]
    socket        = /var/run/mysqld/mysqld.sock
    nice        = 0
     
    [mysqld]
    user        = mysql
    pid-file    = /var/run/mysqld/mysqld.pid
    socket        = /var/run/mysqld/mysqld.sock
    port        = 3306
    basedir        = /usr
    datadir        = /var/lib/mysql
    tmpdir        = /tmp
    language    = /usr/share/mysql/french
    skip-external-locking
    old_passwords    = 1
    key_buffer        = 16M
    max_allowed_packet    = 16M
    thread_stack        = 128K
    query_cache_limit    = 1048576
    query_cache_size        = 16777216
    query_cache_type        = 1
    server-id        = 1
    log-bin            = /var/log/mysql/mysql-bin.log
    expire-logs-days    = 20
    max_binlog_size         = 104857600
    skip-bdb
    default_table_type = InnoDB
    innodb_data_home_dir = /ibdata/
    innodb_data_file_path = ibdata1:200M:autoextend
     
    innodb_log_group_home_dir = /ibdata/
    innodb_log_arch_dir =  /ibdata/
    innodb_log_archive=0
     
    innodb_lock_wait_timeout=50
    innodb_additional_mem_pool_size=2M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=1M
    innodb_buffer_pool_size=8M
    innodb_log_file_size=10M
    [mysqldump]
    quick
    quote-names
    max_allowed_packet    = 16M
     
    [mysql]
     
    [isamchk]
    key_buffer        = 16M
    Et voici le fichier de config coté esclave (serveur sous windows xp pro MySQL 5.0.20) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    [client]
    port=3306
     
    [mysql]
    default-character-set=latin1
     
    [mysqld]
    port=3306
    basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
    datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
    default-character-set=latin1
     
     
    default-storage-engine=INNODB
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    max_connections=100
    query_cache_size=8M
    table_cache=256
    tmp_table_size=5M
     
    thread_cache_size=8
     
    myisam_max_sort_file_size=100G
    myisam_max_extra_sort_file_size=100G
    myisam_sort_buffer_size=8M
     
    key_buffer_size=8M
    read_buffer_size=64K
    read_rnd_buffer_size=185K
    sort_buffer_size=139K
     
    log-bin="C:/MySQL InnoDB Datafiles/"
    server-id = 2
    master-host = 192.168.1.20
    master-user = repl
    master-password = repl
    master-port = 3306
     
    innodb_data_home_dir="C:/MySQL InnoDB Datafiles/"
    innodb_additional_mem_pool_size=2M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=1M
    innodb_buffer_pool_size=8M
    innodb_log_file_size=10M
    innodb_thread_concurrency=8
    Ma base maitre comprends les tables par défaut et rien de plus, de même pour ma base esclave.

    J'ai essayé de locker ma base maitre, j'ai ensuite eteint MySQL :
    mysql> FLUSH TABLES WITH READ LOCK;
    shell> mysqladmin -u root -p shutdown

    Et ensuite j'ai copier les fichier contenu dans le répertoire /ibdata du master vers le répertoire C:/MySQL InnoDB Datafiles/
    (au préalable javais arrété mon serveur MySQL esclave)

    Je relance les serveurs, du coté esclave : SLAVE START
    Et là la réplication ne fonctionne pas ...
    (je n'ai rien fait de plus, peut etre qu'il y a des commandes ...)

    Avez vous une idée???
    Je suis totalement perdu

    Merci d'avance

  2. #2
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    ce serait pas parce qu'il ya dejà des fichiers *.info existant dans ton datadir du slave ? Dans tous les cas essaye de spécifier explicitement la clause change master to ... avant de faire le start slave, pour voir.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut
    merci pour l'info, j'ai finalement résolu mon problème, au niveau de la configuration c'est impec, c'est au niveau de mon transfert de base que sa coince!

    on dump a chaud :
    mysqldump -u root -p --master-data --single-transaction --all-databases > save.sql


    restoration du dump a chaud :
    mysql -u root -p < save.sql


    ensuite sur le serveur esclave : START SLAVE

    et hop le tour est joué !!

    par contre je viens de me rendre compte que j'ai besoin d'une réplication bidirectionnelle ... donc mysql ne fonctionne pas car dans l'architecture que j'ai élaborée j'ai un maitre, plusieurs esclaves et ils doivent tous pouvoir communiquer dans les deux sens ...
    pour parfaire le tout mysql ne reparti pas les charges au niveau des requetes select/insert/update ... et en plus en cas de crash serveur il n'y a rien au niveau logiciel ...

    donc soit je garde MySQL et je fait des script ou alors je change!

    une idée???

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut
    La réplication marche au poil!

    Par contre j'ai un gros problème, en faisant des tests, je m'aperçois que lors d'un crash d'un esclave alors qu'il y a des insert sur le maitre, lorsque l'esclave est de nouveau opérationnel, il ne replique plus du tout !!!!!

    Je doit faire quoi pour qu'il reprenne son activité apres un crash???

    pour l'in stant pour le faire repartir je fait un dump du serveur maitre et je l'applique au serveur esclave. Mais bon il y a certainement autre chose a faire ...

    Quelqu'un aurais une idée?

    merci d'avance

    EDIT : j'ai le même problème si c'est le serveur maitre qui crash, sauf que là plus aucun serveur esclave ne réplique ... misère !!!!!

    Help Please!!!!!

  5. #5
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par baallrog
    Je doit faire quoi pour qu'il reprenne son activité apres un crash???
    LOAD DATA FROM MASTER et SLAVE START non ?
    Pensez au bouton

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut
    LOAD DATA FROM MASTER
    Je suis avec des bases InnoDB donc c'est pas possible!

    Par contre j'ai trouvé quelques chose qui à l'air de fonctionner mais je ne pense pas que c'est une bonne chose. Dans le my.ini j'ai rajouté :

    slave-skip-errors=all
    relay-log=mon_host-relay-bin


    Là la réplication me pose plus de problème, mais en contre partie je n'ai plus aucune information sur les erreurs dans le log ...

    c'est compliqué!!!!!!
    qu'est ce que vous ne pensez.???

    Edit : sa marche a moitié, les machines se reconnecte mais les bases ne sont pas exactement identiques! ...
    C'est dur la vie sous MySQL !!!!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut
    Voici la fin de mon fichier .err :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    060510 17:05:18  InnoDB: Database was not shut down normally!
    InnoDB: Starting crash recovery.
    InnoDB: Reading tablespace information from the .ibd files...
    InnoDB: Restoring possible half-written data pages from the doublewrite
    InnoDB: buffer...
    060510 17:05:21  InnoDB: Starting log scan based on checkpoint at
    InnoDB: log sequence number 0 1855685.
    InnoDB: Doing recovery: scanned up to log sequence number 0 1864971
    060510 17:05:21  InnoDB: Starting an apply batch of log records to the database...
    InnoDB: Progress in percents: 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
    InnoDB: Apply batch completed
    InnoDB: In a MySQL replication slave the last master binlog file
    InnoDB: position 0 112, file name .000001
    InnoDB: Last MySQL binlog file position 0 369890, file name C:\Program Files\MySQL\MySQL Server 5.0\Data\.000001
    060510 17:05:21  InnoDB: Started; log sequence number 0 1864971
    060510 17:05:22 [Note] Recovering after a crash using C:/Program Files/MySQL/MySQL Server 5.0/Data/
    060510 17:05:22 [Note] Starting crash recovery...
    060510 17:05:22 [Note] Crash recovery finished.
    060510 17:05:24 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.
    Version: '5.0.20a-nt-log'  socket: ''  port: 3306  MySQL Community Edition (GPL)
    060510 17:05:24 [Note] Slave SQL thread initialized, starting replication in log '.000001' at position 996414, relay log '.\Vendin-relay-bin.000005' position: 11892
    060510 17:05:25 [Note] Slave I/O thread: connected to master 'repl@192.168.1.20:3306',  replication started in log '.000001' at position 1015578
    060510 17:05:25 [ERROR] Slave: Error 'Duplicate entry '84' for key 1' on query. Default database: 'test'. Query: 'INSERT INTO essaie (jjjj,ssss) VALUES ("test",84)', Error_code: 1062
    060510 17:05:25 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log '.000001' position 996414
    il semblerais que ma connection de réplication soit rendue inopérante à cause d'un enregistrement déjà présent dans ma base esclave ...

    mais j'ai toujours pas la solution!!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 90
    Points : 40
    Points
    40
    Par défaut
    petite avancée, après avoir modifier mon fichier de configuration pour ignorer l'erreur de duplication n° 1062, mon serveur esclave à récupéré quelques lignes puis s'est arreté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    060510 17:29:04 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: Normal shutdown
     
    060510 17:29:04 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
    060510 17:29:04 [Note] Slave I/O thread killed while reading event
    060510 17:29:04 [Note] Slave I/O thread exiting, read up to log '.000001', position 1124638
    060510 17:29:05  InnoDB: Starting shutdown...
    060510 17:29:08  InnoDB: Shutdown completed; log sequence number 0 1864981
    060510 17:29:08 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: Shutdown complete
     
    060510 17:29:17  InnoDB: Started; log sequence number 0 1864981
    060510 17:29:17 [Note] Slave SQL thread initialized, starting replication in log '.000001' at position 996414, relay log '.\Vendin-relay-bin.000005' position: 11892
    060510 17:29:17 [Note] C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.
    Version: '5.0.20a-nt-log'  socket: ''  port: 3306  MySQL Community Edition (GPL)
    060510 17:29:17 [Note] Slave I/O thread: connected to master 'repl@192.168.1.20:3306',  replication started in log '.000001' at position 1124638
    060510 17:29:18 [ERROR] Error in Log_event::read_log_event(): 'Event too small', data_len: 0, event_type: 0
    060510 17:29:18 [ERROR] Error reading relay log event: slave SQL thread aborted because of I/O error
    060510 17:29:18 [ERROR] Slave: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave. Error_code: 0
    060510 17:29:18 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log '.000001' position 998221
    là je ne sais que faire ... si une âme charitable veut bien me dépêtrer ...
    un énorme merci d'avance!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Menu dynamique, marche a suivre
    Par vita83 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2011, 11h21
  2. Réponses: 7
    Dernier message: 14/01/2011, 14h00
  3. La replication ne marche pas sur Mysql-cluster
    Par kakashi05 dans le forum Installation
    Réponses: 0
    Dernier message: 26/02/2010, 16h27
  4. marche a suivre pour la creation d'un progress bar
    Par azde7015 dans le forum Access
    Réponses: 1
    Dernier message: 19/02/2006, 11h06
  5. [Oracle 9i] Marche à suivre pour installer un Patch
    Par zestrellita dans le forum Oracle
    Réponses: 2
    Dernier message: 03/11/2005, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo