Replikation startet nicht, Repli-User kann aber alles lesen

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von Yoda, 01.03.2011.

  1. #1 Yoda, 01.03.2011
    Zuletzt bearbeitet: 01.03.2011
    Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    Hallo Leute,

    ich hab hier ein kleines Problem bei dem ich nicht weiter komme.

    wenn ich dieses Kommando abschicke bekomme ich die selbe Fehlermeldung
    wie sie auch im "SHOW SLAVE STATUS" drin steht:

    Code:
    # echo "LOAD DATA FROM MASTER" | mysql -t -uroot -pgeheim
    ERROR 1218 (08S01) at line 1: Error connecting to master: Access denied for user 'otto'@'slavedb.domain.net' (using password: YES)
    
    allerdings darf der User "otto" alles was er braucht.
    Ich hab ihn auf beiden Rechnern so angelegt:
    Code:
    # echo "CREATE USER otto IDENTIFIED BY 'geheim';GRANT SELECT,SUPER,REPLICATION CLIENT,RELOAD,REPLICATION SLAVE ON *.* TO 'otto'@'%' IDENTIFIED BY 'geheim';" | mysql -u root -pgeheim
    
    und er kann auch auf den Master zugreifen:
    Code:
    mysqlshow -t -uotto -pgeheim -h masterdb
    
    +--------------------+
    |     Databases      |
    +--------------------+
    | information_schema |
    | mysql              |
    +--------------------+
    
    
    # echo "select * FROM user where user='otto' \G;" | mysql -t -uotto -pgeheim -h masterdb mysql
    *************************** 1. row ***************************
                     Host: %
                     User: otto
                 Password: *82220DCF4F0E73F924A5C7E41B65F254607C394E
              Select_priv: Y
              Insert_priv: N
              Update_priv: N
              Delete_priv: N
              Create_priv: N
                Drop_priv: N
              Reload_priv: Y
            Shutdown_priv: N
             Process_priv: N
                File_priv: N
               Grant_priv: N
          References_priv: N
               Index_priv: N
               Alter_priv: N
             Show_db_priv: N
               Super_priv: Y
    Create_tmp_table_priv: N
         Lock_tables_priv: N
             Execute_priv: N
          Repl_slave_priv: Y
         Repl_client_priv: Y
         Create_view_priv: N
           Show_view_priv: N
      Create_routine_priv: N
       Alter_routine_priv: N
         Create_user_priv: N
               Event_priv: N
             Trigger_priv: N
                 ssl_type: 
               ssl_cipher: 
              x509_issuer: 
             x509_subject: 
            max_questions: 0
              max_updates: 0
          max_connections: 0
     max_user_connections: 0
    
    Besonders Verwunderlich ist das, weil ich ja schon ein paar Rechner mit genau dieser Konfiguration laufen habe, bei denen alles prima funktioniert... :(

    Wenn einer eine Idee hat, wäre ich sehr dankbar.
    Danke!


    EDIT:
    Die Konfigurationsdateien habe ich in den beiden folgenden Beiträgen gepostet,
    der Rest ist von der Default-Installation unverändert.
    Die DB ist praktisch noch "unbenutzt".

    Code:
    # echo "SHOW MASTER STATUS;" | mysql -t -u root -pgeheim -h masterdb
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000012 |      695 |              |                  |
    +------------------+----------+--------------+------------------+
    
    Code:
    # echo "SHOW SLAVE STATUS \G;" | mysql -t -u root -pgeheim -h slavedb
    *************************** 1. row ***************************
                   Slave_IO_State: 
                      Master_Host: masterdb
                      Master_User: otto
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000010
              Read_Master_Log_Pos: 352
                   Relay_Log_File: mysql-relay-bin.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: mysql-bin.000010
                 Slave_IO_Running: No
                Slave_SQL_Running: No
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 352
                  Relay_Log_Space: 106
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 1045
                    Last_IO_Error: error connecting to master 'otto@vdbswsi01:3306' - retry-time: 60  retries: 86400  message: Access denied for user 'otto'@'vdbswsi02.oqrm.victorvox.net' (using password: YES)
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    meine Slave-CFG's

    Code:
    # cat /etc/mysql/conf.d/default.cnf 
    [mysqld]
    pid_file              = mysql.pid
    log_bin               = mysql-bin
    relay_log             = mysql-relay-bin
    
    Code:
    # cat /etc/mysql/conf.d/GLOBAL.cnf 
    [server]
    sql-mode=""
    
    Code:
    # cat /etc/mysql/conf.d/Tuning.cnf 
    [mysqld]
    key_buffer = 256M
    table_cache = 512
    max_connections = 900
    connect_timeout = 10
    tmp_table_size= 256M
    max_heap_table_size = 256M
    query_cache_limit = 256M
    query_cache_size= 256M
    query_cache_type= 1
    
    Code:
    # cat /etc/mysql/conf.d/replication.cnf 
    [mysqld]
    server_id             = 112
    #
    innodb_flush_log_at_trx_commit=1
    sync_binlog           = 1
    #
    #bind_address          = 127.0.0.1
    master_host           = masterdb
    master_user           = otto
    master_password       = geheim
    master_port           = 3306
    master_connect_retry  = 60
    report_host           = slavedb
    
     
  4. Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    meine Master-CFG's

    Code:
    # cat /etc/mysql/conf.d/default.cnf 
    [mysqld]
    pid_file              = mysql.pid
    log_bin               = mysql-bin
    relay_log             = mysql-relay-bin
    
    Code:
    # cat /etc/mysql/conf.d/GLOBAL.cnf 
    [server]
    sql-mode=""
    
    Code:
    # cat /etc/mysql/conf.d/Tuning.cnf 
    [mysqld]
    key_buffer = 256M
    table_cache = 512
    max_connections = 900
    connect_timeout = 10
    tmp_table_size= 256M
    max_heap_table_size = 256M
    query_cache_limit = 256M
    query_cache_size= 256M
    query_cache_type= 1
    
    Code:
    # cat /etc/mysql/conf.d/replication.cnf 
    [mysqld]
    server_id             = 111
    #
    innodb_flush_log_at_trx_commit=1
    sync_binlog           = 1
    
     
  5. #4 HeadCrash, 01.03.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Abend,

    evtl ein Tipfehler beim Passwort in der Slave-Konfiguration? Darauf würde ich zumindest auf Grund der Fehlermeldung schließen.
    Glaub zwar selbst nicht dran, könnte aber sein.
    MySQL schreibt die Replikations infos(User, Passwort, Host) übrigends in die Datei master.info im MySQL-Datadir. Diese schreibt er nur einmal und fasst sie danach nur noch über "Change Master To" an. Such hier mal nach master.info

    mfg
    HeadCrash
     
  6. Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    Das kann ich nochmal kontrollieren
    aber eigentlich habe ich bei allen Systemen immer die selbe Datei hin kopiert und nur die drei relevanten Einträge geändert,
    das Passwort aber nie auch nur berührt.

    Der Tip mit der "master.info" ist gut, das werde ich Morgen gleich als erstes überprüfen.
     
  7. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    Hiho,
    mahc mal bei beien Hosts
    Code:
    netstat -tulpen | grep 3306
    
    und vor allem welcher MySQL-Version ?
    denn
    Code:
    # cat /etc/mysql/conf.d/replication.cnf 
    [mysqld]
    server_id             = 112
    #
    innodb_flush_log_at_trx_commit=1
    sync_binlog           = 1
    #
    #bind_address          = 127.0.0.1
    master_host           = masterdb
    master_user           = otto
    master_password       = geheim
    master_port           = 3306
    master_connect_retry  = 60
    report_host           = slavedb
    
    das geht bei vielen nicht mehr. Das musst du via CLI machen.

    Ein Logauszug von dem DB-Slave wäre auch sinnvoll, dann bräuchten wir hier nicht zu raten ;)
     
  8. Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    masterdb:
    Code:
    # netstat -tulpen | grep 3306
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      106        39769       16837/mysqld
    
    slavedb:
    Code:
    # netstat -tulpen | grep 3306
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      106        13430       3832/mysqld
    
    Ich verwende genau genommen keine MySQL, sondern die MariaDB auf einem aktuellem Ubuntu:
    5.1.49-MariaDB (5.1.49-mariadb82)

    Da MariaDB aber noch keine eigene Doku besitzt, bin ich nach der MySQL-Doku vorgegangen:

    http://dev.mysql.com/doc/refman/5.1/de/replication.html
    http://dev.mysql.com/doc/refman/5.1/de/replication-howto.html

    Im Detail bin ich so vorgegangen:
    Code:
    #!/bin/bash
    
    sed -i "s/^127.0.0.1.*/& ${HOSTNAME}/" /etc/hosts
    
    /etc/init.d/mysql stop
    aptitude -y purge libdbd-mysql-perl libmysqlclient16 mysql-client mysql-client-5.1 mysql-client-core-5.1 mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1 || exit 1
    rm -fr /etc/mysql/ /var/log/mysql* /var/lib/mysql
    apt-key add ourdelta.gpg || exit 1
    cp ourdelta.list /etc/apt/sources.list.d/ourdelta.list || exit 1
    aptitude update && aptitude safe-upgrade && aptitude autoclean || exit 1
    aptitude -y install mariadb-server mariadb-client || exit 1
    cp GLOBAL.cnf default.cnf replication.cnf Tuning.cnf /etc/mysql/conf.d/
    
    echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'geheim' WITH GRANT OPTION;FLUSH PRIVILEGES;" | mysql -u root -pgeheim
    
    echo "CREATE USER otto IDENTIFIED BY 'geheim';GRANT SUPER,REPLICATION CLIENT,RELOAD,REPLICATION SLAVE ON *.* TO 'otto'@'%' IDENTIFIED BY 'geheim';FLUSH PRIVILEGES;" | mysql -u root -pgeheim
    
    sed -i 's/^bind-address/#&/' /etc/mysql/my.cnf && cp default.cnf GLOBAL.cnf Tuning.cnf /etc/mysql/conf.d/ && /etc/init.d/mysql restart || exit 1
    

    Die MariaDB scheint keine "master.info" zu schreiben, zumindest finde ich keine.

    Das Log wird in eine entfernte Log-DB geschrieben, die Einträge mit "SysLogTag LIKE '%mysql%'" habe ich angehängt.


    Was meinst Du eigentlich mit:
    Das verstehe ich nicht, meist Du wirklich, das man das nicht mehr über CFG-Datei konfen kann?
    Aber die entsprechenden Sync-Befehle hab ich auch über Kommandozeile abgeschickt:
    Code:
    #!/bin/bash
    
    if [ -z "${5}" ] ; then
    
            echo "
            ${0} [master_host_name] [slave_host_name] [replication_user_name] [replication_password] [dbrootpw]
            zum Beispiel
            ${0} db01 db02 otto FOSp85bLOpzH geheim
            "
    
    else
    
    master_host_name="${1}"
    slave_host_name="${2}"
    replication_user_name="${3}"                            # Repli-User
    replication_password="${4}"                             # Repli-Passwort: geheim
    dbrootpw="${5}"                                         # root-DB-Passwort
    
    ZUFALL="$(pwgen -s -v 12 1)"
    
    ### auf dem MASETER
    echo "FLUSH TABLES WITH READ LOCK;" | mysql -h${master_host_name} -t -uroot -p${dbrootpw}
    time mysqldump -h${master_host_name} -uroot -p${dbrootpw} --opt -A --master-data > /tmp/dbsynch_alles_${ZUFALL}.sql
    MASTERSTATUS="$(echo "SHOW MASTER STATUS;" | mysql -h${master_host_name} -t -u root -p${dbrootpw} | fgrep -v '+---------' | tail -n1 | awk -F'|' '{print $2,$3}')"
    echo "UNLOCK TABLES;" | mysql -h${master_host_name} -t -uroot -p${dbrootpw}
    echo "'${MASTERSTATUS}'"
    ls -lh /tmp/dbsynch_alles_${ZUFALL}.sql
    
    #------------------------------------------------------------------------------#
    
    ### auf dem SLAVE
    recorded_log_file_name="$(echo "${MASTERSTATUS}"|awk '{print $1}')"
    recorded_log_position="$(echo "${MASTERSTATUS}"|awk '{print $2}')"
    echo "STOP SLAVE;" | mysql -h${slave_host_name} -uroot -p${dbrootpw}
    time mysql -h${slave_host_name} -uroot -p${dbrootpw} < /tmp/dbsynch_alles_${ZUFALL}.sql
    rm -fr /tmp/dbsynch_alles_${ZUFALL}.sql
    ssh ${master_host_name} 'cat /etc/mysql/debian.cnf' | ssh ${slave_host_name} 'cat > /etc/mysql/debian.cnf'
    echo "CHANGE MASTER TO MASTER_HOST='${master_host_name}', MASTER_USER='${replication_user_name}', MASTER_PASSWORD='${replication_password}', MASTER_LOG_FILE='${recorded_log_file_name}', MASTER_LOG_POS=${recorded_log_position};" | mysql -h${slave_host_name} -uroot -p${dbrootpw}
    echo "START SLAVE;" | mysql -h${slave_host_name} -uroot -p${dbrootpw}
    
    fi
    

    ... aber da sehe ich gerade etwas in meiner Kommandozeilenhistorie ...

    Ja, ich glaube ich habe auf der Kommandozeile und in den CFG-Dateien unterschiedliche Passwörter für den Replikations-User "otto" verwendet...

    Und wenn er die Einträge aus der CFG-Datei nicht verwendet, sondern sich die Daten
    von der Kommandozeile merkt und auch nach einem Neustart weiter verwendet,
    dann ist mir jetzt auch alles klar... :think:

    Gut das Du das erwähnt hast, ich dachte, alles was in den CFG-Dateien steht
    ist spätestens nach einem Neustart gültig... :(
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Yoda

    Yoda [Linux|FreeBSD] - User

    Dabei seit:
    24.03.2006
    Beiträge:
    51
    Zustimmungen:
    0
    Ort:
    Taunus
    gelöst: klappt jetzt

    Code:
                      Master_User: otto
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000013
              Read_Master_Log_Pos: 106
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 251
            Relay_Master_Log_File: mysql-bin.000013
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 106
                  Relay_Log_Space: 406
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
    
    Es war das Passwort von der Kommandozeile...
    Danke!
     
  11. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    Ja auf den Slaves kannst du diese Einstellungen leider nicht mehr direkt in der Konfig erledigen.
    Das musst du alles via
    Code:
     mysql> CHANGE MASTER TO
         ->     MASTER_HOST='master_host_name',
         ->     MASTER_USER='replication_user_name',
         ->     MASTER_PASSWORD='replication_password',
         ->     MASTER_LOG_FILE='recorded_log_file_name',
         ->     MASTER_LOG_POS=recorded_log_position;
    
    auf dem slave ausführen
     
Thema:

Replikation startet nicht, Repli-User kann aber alles lesen

Die Seite wird geladen...

Replikation startet nicht, Repli-User kann aber alles lesen - Ähnliche Themen

  1. Manuelle DC Replikation

    Manuelle DC Replikation: Hi, Ich habe zwei 4.4er Samba auf CentOS 7 als DC laufen. Während der "Haupt"-DC (Name:DC0) 24/7 läuft, ist der andere (DC1) 80% offline und wird...
  2. Postgres und replikation

    Postgres und replikation: Hi Leute, also bisher was ich gelesen habe bin ich doch bisschen enttäuscht über einen professionellen Einsatz von postgres. Postgres selbst...
  3. MySQL Ring-Replikation

    MySQL Ring-Replikation: Folgende Situation: Ich habe 3 Datenbankserver. server1 ist Master für server2, server2 ist Master für server3 und Server3 ist Master für server1....
  4. LEDE: Fork von OpenWRT gestartet

    LEDE: Fork von OpenWRT gestartet: Unter dem Namen LEDE haben einzelne OpenWRT-Entwickler ein neues Projekt gestartet. Ziel des neuen Projektes ist es, eine gemeinschaftszentrierte...
  5. X startet nichtmehr

    X startet nichtmehr: Hallo, ich habe versucht CUDA und OPENCL mit meiner Graka zum laufen zu bekommen ... nun hängt er aber schon beim Booten bei "started Update UTMP...