迹象 #1:从属线程

迹象 #1:从属线程

这是我第一次设置主从复制。我正在使用作为指导。

我按照步骤操作,一切正常,直到最后一部分,我需要验证复制。当我在主数据库中创建新表并向该表插入一些数据时,该数据并未在从属数据库中复制。

下面是master的my.cnf

server-id = 1
binlog-do-db = databasename
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

从属的 my.cnf

server-id = 2
master-host=10.77.88.111
master-connect-retry=60
master-user=slave_user
master-password=slave_password
replicate-do-db=databasename
replicate-ignore-table=table1
replicate-ignore-table=table2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

以下是 SHOW SLAVE STATUS

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.77.88.111
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 389591
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: databasename
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table: databasename.table1,databasename.table2
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 389591
              Relay_Log_Space: 120695
              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:
1 row in set (0.00 sec)

我努力了:

  • 使用 slave_user 从从机访问主数据库 ==> 成功;所以问题不在这里
  • 重新启动从机的mysql服务==>没有变化
  • /var/lib/mysql/mysql.err 中没有显示任何错误
  • 使用 # service iptables stop 停止防火墙 ==> 没有变化

请帮忙!非常感谢!

答案1

没有任何错误。

您可以通过以下方式判断

迹象 #1:从属线程

当你跑步时SHOW SLAVE STATUS\G,它会显示

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这表明 IO 线程(拦截来自主服务器的 Binlog 事件并将其存储在中继日志 FIFO 中)和 SQL 线程(从中继日志 FIFO 读取 Binlog 事件并执行 SQL)均已连接并正在运行

迹象 #2:中继日志

当你跑步时SHOW SLAVE STATUS\G,它会显示

Relay_Log_Space: 120695

这表明 IO 线程已从 Master 读取了 120K。当 IO 线程读取新事件时,此值应该不断变化。

指示 #3:已执行的语句

当你跑步时SHOW SLAVE STATUS\G,它会显示

Read_Master_Log_Pos: 389591
Exec_Master_Log_Pos: 389591

如果这些值正在发生变化,IO 线程就会执行到所处的位置Read_Master_Log_Pos,SQL 线程也会执行到所处的位置Exec_Master_Log_Pos

警告

我看到您在从服务器上启用了二进制日志记录。您不会看到从服务器上的二进制日志增长。为什么?您忘记添加日志从属更新到奴隶的my.cnf

你必须添加日志从属更新到从属服务器my.cnf并重新启动 MySQL。

答案2

这里没有什么明显的错误。

我要做的第一件事是确保在发出 CREATE TABLE 和 INSERT 命令时您实际上正在使用数据库数据库名称。

您还可以尝试删除 binlog-do-db、replicate-do-db 等施加的限制,看看是否有帮助。

相关内容