我是小白,今天刚刚配置好主从机,我觉得我主从机配置好了,因为主从机配置好的标准是这样的:

主机:10.140.133.47

从机:10.210.139.77 

在主机上:

(实验小结)主从配置不同步的解决(小白踩雷点)_mysql 

证明配置从机的这条语句成功。

在从机上我进行了相应的操作配置好主机之后,我执行了start slave

验证一下是否配置成功:

(实验小结)主从配置不同步的解决(小白踩雷点)_status_02 

我在主机上对数据库进行一些操作然后看此时的结果:

mysql> show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.140.133.47 

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: binlog.000031

          Read_Master_Log_Pos: 1075

               Relay_Log_File: relay-log.000002

                Relay_Log_Pos: 250

        Relay_Master_Log_File: binlog.000031

             Slave_IO_Running: Yes

            Slave_SQL_Running: No

              Replicate_Do_DB: 

          Replicate_Ignore_DB: mysql

           Replicate_Do_Table: 

       Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: mysql.%

                   Last_Errno: 1146

                   Last_Error: Error 'Table 'data1.t1' doesn't exist' on query. Default database: 'data1'. Query: 'insert into t1 value(1)'

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 892

              Relay_Log_Space: 1169

              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: 0

                Last_IO_Error: 

               Last_SQL_Errno: 1146

               Last_SQL_Error: Error 'Table 'data1.t1' doesn't exist' on query. Default database: 'data1'. Query: 'insert into t1 value(1)'

  Replicate_Ignore_Server_Ids: 

             Master_Server_Id: 224811

1 row in set (0.00 sec)

 

证明已经连上的,数据不同步是因为出现了错误,既然已经配上了会不会是数据发送有问题呢?

根据mysql主从同步的原理,master发送二进制日志内容,二进制日志名称以及当前事件发生的起点给slave,通过I/O传输到slaveslave会将收到的二进制日志内容写进中继日志尾部,然后从机调用SQL线程安装中继日志执行,似的主从同步,并且将收到的二进制日志名称以及当前事件发生的起点写进master info,然后定期坚持从机里中继日志尾部的信息和主机的二进制日志是否一致,如果不一致将会更新,主机会重新发送二进制日志内容,二进制日志名称以及当前事件发生的起点给slave

 

我们可以看到,因为slave status里是有主机信息的那么证明发送的二进制日志名称以及当前事件发生的起点是没有错的,那么我们查看是否是发送的二进制日志内容出现错误。

 

回到主机:根据从机读取的起点来查看日志

mysql> show binlog events in 'binlog.000031' from 892 \G

*************************** 1. row ***************************

   Log_name: binlog.000031

        Pos: 892

 Event_type: Query

  Server_id: 224811

End_log_pos: 961

       Info: BEGIN

*************************** 2. row ***************************

   Log_name: binlog.000031

        Pos: 961

 Event_type: Query

  Server_id: 224811

End_log_pos: 1048

       Info: use `data1`; insert into t1 value(1)

*************************** 3. row ***************************

   Log_name: binlog.000031

        Pos: 1048

 Event_type: Xid

  Server_id: 224811

End_log_pos: 1075

       Info: COMMIT /* xid=50 */

3 rows in set (0.00 sec)

 

mysql> show processlist\G

*************************** 1. row ***************************

     Id: 52

   User: repl

   Host: 10.210.139.77:35146

     db: NULL

Command: Binlog Dump

   Time: 1196

  State: Master has sent all binlog to slave; waiting for binlog to be updated

   Info: NULL

*************************** 2. row ***************************

     Id: 53

   User: root

   Host: localhost

     db: NULL

Command: Query

   Time: 0

  State: NULL

   Info: show processlist

2 rows in set (0.00 sec)

 

发现一切正常啊,数据很好的发送出去了。

 

 

突然我又发现

(实验小结)主从配置不同步的解决(小白踩雷点)_status_03 

好像我有一个重要的参数

Slave_SQL_Running没有设为yes,当然同步不了啦(我其实是没设定成功,,,,囧~

那么我们回到从机看从机的中继日志怎么样

mysqlbinlog解析发现好像少了一部分,没有建库和表的过程。。。。。。。。

这到底是什么原因呢?

是我误操作起点设定错了?

还是Slave_SQL_Running没有设定为YES造成的呢?

问题解决:去问水哥,水哥好棒,没错就是那个DBA大神水哥,waterbin,我现在是他小弟,不要羡慕我哈哈哈~,水哥让我去新建data1t1,照做之后问题解决,我才恍然大悟,我是起点设定错了,问题的原因应该是我误操作:在主机上执行了操作后又重新show master status。然后回从机改的最新的起点,当然会有问题啦,在生产环境中一定要切记起点不能随便改的。

还有哦,Slave_SQL_Running是状态量,是改不了的,它是yes的时候表明主从同步成功哦。

下面附上主从配置的步骤:

主机:10.140.133.47

从机:10.210.139.77 

第一步骤:记得在/etc/my.cnf改主机和从机的server-id改得不同

                然后记得在从机的配置文件里开启relay-log

第二步骤:

配置文件后记得重启mysqld服务器哦,这样才会生效,然后在主机里执行这条语句:

Grant replication slave on 取个名字最好是repl@从机的ip identified by 密码1

然后执行show master status;

查看bin-log文件名以及postion

在从机里:

执行

Change master to master_host=主机ip绝对不是localhost或者127.0.0.1master_user=repl(上面说过最好是repl哦)master_password=密码1master_log_file= 主机里show master status显示的,master_log_pos=和前面一项一起显示的,很重要!;

然后

Start slave;

Show processlist;看一下

记得开启之后要slave stop 哦。