Replikation startet nicht, Repli-User kann aber alles lesen

Yoda

Yoda

[Linux|FreeBSD] - User
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:
 
Zuletzt bearbeitet:
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
 
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
 
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
 
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.
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.

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
Der Tip mit der "master.info" ist gut, das werde ich Morgen gleich als erstes überprüfen.
 
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 ;)
 
Hiho,
mahc mal bei beien Hosts
Code:
netstat -tulpen | grep 3306

Ein Logauszug von dem DB-Slave wäre auch sinnvoll, dann bräuchten wir hier nicht zu raten ;)
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:
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.
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... :(
 
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!
 
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
 

Ähnliche Themen

Dovecot: Geteilte Postfächer (Shared Mailboxes) funktionieren nicht

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Samba Dateien und Ordner verschieben

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

Zurück
Oben