programing

mysql 데이터가 복제되지 않지만 복제는 문제가 없는 것 같습니다.

elecom 2023. 9. 25. 22:13
반응형

mysql 데이터가 복제되지 않지만 복제는 문제가 없는 것 같습니다.

mariadb 10.0.21을 실행하는 4 machine mysql 클러스터가 있습니다.저에겐 두 명의 마스터가 있어요 서로를 속이고 있어요그리고 각각 첫 번째와 두 번째 db에서 복제되는 읽기 전용 슬레이브 두 개.

간단히 말해서, 설정 방식은 다음과 같습니다.

db1 replicates -> db2
db1 replicates -> db3
db2 replicates -> db1
db2 replicates -> db4

아주 기본적인 4db 설정입니다.

제가 겪고 있는 문제는 1차 db의 클러스터를 모니터링하기 위해 nagios 사용자를 설정했다는 것입니다.

확인해보니 처음 3개의 데이터베이스에 로그인할 수 있었지만 나기오스 사용자로 4번째 데이터베이스에는 로그인할 수 없었습니다.처음 두 개의 데이터베이스 머신에 mysql 데이터베이스를 복제하고 있기 때문에 각 db에 nagios 사용자를 만들지 않고도 할 수 있습니다.

그러나 어떤 이유에서인지 nagios 사용자는 모든 노드에서 복제는 문제가 없는 것처럼 보이지만 db2에 있는 것처럼 db4에 생성되지 않았습니다.

아마 기억하시겠지만, 저는 db2를 4번째 db로 복제하고 있습니다.

그리고 db2에서 show master status를 하면 mysql db를 복제하고 있음을 알 수 있습니다.

MariaDB [mysql]> show master status;
+--------------------+----------+------------------------------+------------------+
| File               | Position | Binlog_Do_DB                 | Binlog_Ignore_DB |
+--------------------+----------+------------------------------+------------------+
| mariadb-bin.000078 |      376 | jfwiki,jokefire,bacula,mysql |                  |
+--------------------+----------+------------------------------+------------------+
1 row in set (0.00 sec)

2번째 db에 nagios 사용자가 있는 것을 확인하면 있습니다.

 MariaDB [mysql]> select User,Host,Password from user where user like 'nagios';
    +--------+-------------+-------------------------------------------+
    | User   | Host        | Password                                  |
    +--------+-------------+-------------------------------------------+
    | nagios | 52.4.204.96 | *somepasswordhash                         |
    +--------+-------------+-------------------------------------------+
    1 row in set (0.00 sec)

이 사용자는 db2에서 생성되지 않았지만 복제로 인해 생성된 사용자입니다.

그리고 db4에서 슬레이브 상태를 확인하면 복제는 전혀 문제가 없는 것 같습니다.

[root@db4:~] #mysql -e "show slave status\G" | egrep "Slave_IO_State|Master_Host|Slave_IO_Running|Slave_SQL_Running|Last_Errno|Seconds_Behind_Master"
               Slave_IO_State: Waiting for master to send event
                  Master_Host: db2.example.com
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                   Last_Errno: 0
        Seconds_Behind_Master: 0

그리고 제가 db2에서 그랬던 것처럼 db4에서 nagios 사용자의 존재를 확인하면, 사용자가 없을 뿐입니다.

MariaDB [mysql]> select User,Host from user where user like 'nagios';
Empty set (0.00 sec)

그래서 제 질문은 왜 나기오스 사용자가 db1 -> db2에서 db1 -> db3에서 했던 방식대로 db4로 복제되지 않았느냐는 것입니다.db4에 슬레이브 레플리케이션을 해도 괜찮은 것 같습니까?모니터링 호스트에서 nagios 사용자를 사용하여 모든 호스트에 로그인할 수 있었습니다.

다음은 db4에서 슬레이브 복제 명령어의 전체 출력입니다.

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: db2.example.com
                  Master_User: jf_slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000078
          Read_Master_Log_Pos: 376
               Relay_Log_File: db4-relay-bin.000044
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mariadb-bin.000078
             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: 376
              Relay_Log_Space: 1121
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /opt/mysql/ca.crt
           Master_SSL_CA_Path:
              Master_SSL_Cert: /opt/mysql/db4.example.com.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /opt/mysql/db4.example.com.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:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 2
               Master_SSL_Crl: /opt/mysql/ca.crt
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
1 row in set (0.00 sec)

db4의 miaadb 로그에서 몇 가지 오류가 보이지만 nagios 사용자 데이터가 성공적으로 복제된 첫 번째 3개 데이터베이스에서 보이는 오류와 다를 바 없습니다.

151004 15:34:36 [Note] Error reading relay log event: slave SQL thread was killed
151004 15:34:36 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
151004 15:34:36 [Note] Slave I/O thread killed while reading event
151004 15:34:36 [Note] Slave I/O thread exiting, read up to log 'mariadb-bin.000078', position 376
151004 15:36:47 [Note] Slave SQL thread initialized, starting replication in log 'mariadb-bin.000078' at position 376, relay log './db4-relay-bin.000042' position: 537
151004 15:36:47 [Note] Slave I/O thread: connected to master 'jf_slave@db2.example.com:3306',replication started in log 'mariadb-bin.000078' at position 376
151007  4:24:12 [Note] Error reading relay log event: slave SQL thread was killed
151007  4:24:12 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
151007  4:24:12 [Note] Slave I/O thread killed while reading event
151007  4:24:12 [Note] Slave I/O thread exiting, read up to log 'mariadb-bin.000078', position 376
151007  4:28:20 [Note] Slave SQL thread initialized, starting replication in log 'mariadb-bin.000078' at position 376, relay log './db4-relay-bin.000043' position: 537
151007  4:28:20 [Note] Slave I/O thread: connected to master 'jf_slave@db2.example.com:3306',replication started in log 'mariadb-bin.000078' at position 376

복제의 모든 지표가 괜찮은 것 같은데 왜 데이터베이스의 불일치가 발생할까요?nagios 사용자가 처음 3 db에서 할 수 있는 방식으로 db4에 로그인할 수 없는 이유는 무엇입니까?

감사해요.

각 서버의 CNF 파일에 Log_slave_updates를 설정해야 하기 때문입니다.

언급URL : https://stackoverflow.com/questions/33049897/mysql-data-not-replicating-but-replication-seems-fine

반응형