首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中主从复制的差异?

问mysql中主从复制的差异?
EN

Database Administration用户
提问于 2015-08-18 04:31:28
回答 1查看 1.3K关注 0票数 1

在名为asterisk的数据库中,有一个名为cdr的表,该表在时间域上进行了分区。

代码语言:javascript
复制
mysql> show create table cdr;
Create Table: CREATE TABLE `cdr` (
`gid` bigint(20) NOT NULL AUTO_INCREMENT,
`id` bigint(20) NOT NULL,
`start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL DEFAULT '',
`src` varchar(80) NOT NULL DEFAULT '',
`channel` varchar(80) NOT NULL DEFAULT '',
`duration` int(11) NOT NULL DEFAULT '0',
`billsec` int(11) NOT NULL DEFAULT '0',
`disposition` varchar(45) NOT NULL DEFAULT '',
`uniqueid` varchar(32) NOT NULL DEFAULT '',
`dnid` varchar(20) NOT NULL DEFAULT '',
`line` varchar(20) NOT NULL DEFAULT '',
`prefix` varchar(20) NOT NULL DEFAULT '',
`service` varchar(100) NOT NULL DEFAULT '',
`cost` int(11) NOT NULL DEFAULT '0',
`visit` varchar(500) NOT NULL DEFAULT '',
`pressed` varchar(200) NOT NULL DEFAULT '',
PRIMARY KEY (`gid`,`start`),
UNIQUE KEY `id` (`id`,`prefix`,`start`),
KEY `start` (`start`),
KEY `clid` (`clid`),
KEY `service` (`service`)
) ENGINE=InnoDB AUTO_INCREMENT=40086530 DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE  COLUMNS(`start`)
(PARTITION p0 VALUES LESS THAN ('2013-11-16') ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN ('2014-01-20') ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN ('2014-02-20') ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN ('2014-04-01') ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN ('2014-06-01') ENGINE = InnoDB,
PARTITION p5 VALUES LESS THAN ('2015-01-01') ENGINE = InnoDB,
PARTITION p6 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */

我成功地从它复制到另一台服务器。

因为,我检查了文件系统上的数据库文件,我看到了令人难以置信的东西。分区表的文件大小因主表和从表的不同而不同。

主服务器

代码语言:javascript
复制
root@mdb1-msh:# ls -lh /var/lib/mysql/asterisk_archive 
total 12G
-rw-rw---- 1 mysql mysql 1.7G May  8 22:35 cdr#P#p0.ibd
-rw-rw---- 1 mysql mysql 1.7G May  8 22:35 cdr#P#p1.ibd
-rw-rw---- 1 mysql mysql 1.7G May  8 22:35 cdr#P#p2.ibd
-rw-rw---- 1 mysql mysql 1.8G May  8 22:35 cdr#P#p3.ibd
-rw-rw---- 1 mysql mysql 1.9G May  8 22:35 cdr#P#p4.ibd
-rw-rw---- 1 mysql mysql 1.6G May  8 22:35 cdr#P#p5.ibd
-rw-rw---- 1 mysql mysql 916M Aug 18 06:33 cdr#P#p6.ibd
-rw-rw---- 1 mysql mysql 8.9K May  8 21:15 cdr.frm
-rw-rw---- 1 mysql mysql   48 May  8 21:15 cdr.par
-rw-rw---- 1 mysql mysql   61 May  9 10:16 db.opt

从服务器

代码语言:javascript
复制
root@db-ast1:~# ls -lh /var/lib/mysql/asterisk
total 11G
-rw-rw---- 1 mysql mysql 1.7G Aug 17 09:08 cdr#P#p0.ibd
-rw-rw---- 1 mysql mysql 1.6G Aug 17 09:08 cdr#P#p1.ibd
-rw-rw---- 1 mysql mysql 1.7G Aug 17 13:24 cdr#P#p2.ibd
-rw-rw---- 1 mysql mysql 1.7G Aug 17 13:24 cdr#P#p3.ibd
-rw-rw---- 1 mysql mysql 1.9G Aug 17 15:49 cdr#P#p4.ibd
-rw-rw---- 1 mysql mysql 1.6G Aug 17 17:07 cdr#P#p5.ibd
-rw-rw---- 1 mysql mysql 868M Aug 18 00:09 cdr#P#p6.ibd
-rw-rw---- 1 mysql mysql 8.9K Aug 17 05:28 cdr.frm
-rw-rw---- 1 mysql mysql   48 Aug 17 05:28 cdr.par
-rw-rw---- 1 mysql mysql   65 Aug 17 04:47 db.opt

我要知道怎么回事?有什么不同吗?怎么做这个手术?如何检查数据的完整性?

UPDATE1

主控

代码语言:javascript
复制
mysql> select count(gid) from cdr;
+------------+
| count(gid) |
+------------+
|   28170822 |
+------------+

从站

代码语言:javascript
复制
mysql> select count(gid) from cdr;
+------------+
| count(gid) |
+------------+
|   27531422 |
+------------+

对于percona校验和:

代码语言:javascript
复制
user@db:~$ pt-table-checksum h=slave-host,u=root,p=pass --databases=asterisk --tables=cdr
Checksumming asterisk_archive.cdr:   7% 06:19 remain
Checksumming asterisk_archive.cdr:  20% 03:52 remain
Checksumming asterisk_archive.cdr:  33% 02:56 remain
Checksumming asterisk_archive.cdr:  46% 02:18 remain
Checksumming asterisk_archive.cdr:  59% 01:42 remain
Checksumming asterisk_archive.cdr:  72% 01:07 remain
Checksumming asterisk_archive.cdr:  90% 00:23 remain
        TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
08-18T10:41:34      0      0 27531422     180       0 228.538 asterisk.cdr

UPDATE2

我检查了mysql.err,没有错误,下面是复制状态:

代码语言:javascript
复制
mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.34.20
              Master_User: slave_user
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.000103
      Read_Master_Log_Pos: 1036136
           Relay_Log_File: mysql-relay-bin.000034
            Relay_Log_Pos: 1036282
    Relay_Master_Log_File: mysql-bin.000103
         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: 1036136
          Relay_Log_Space: 1036481
          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: 
  Replicate_Ignore_Server_Ids: 
         Master_Server_Id: 513
1 row in set (0.00 sec)
EN

回答 1

Database Administration用户

发布于 2015-08-18 05:19:27

MySQL不会减少/回收先前删除的数据的大小。如果前面的.ibd文件显著增长,但实际数据只占其大小的一部分,那么运行OPTIMIZE TABLE可以收回未使用的空间。

来源:http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

要验证MySQL复制完整性,您可能需要查看Percona的pt-table-checksum。

pt表校验和通过在主服务器上执行校验和查询来执行联机复制一致性检查,这将在副本上产生与主副本不一致的不同结果。可选DSN指定主主机。如果发现任何差异,或者如果出现任何警告或错误,则该工具的“退出状态”为非零。

来源:https://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html

更新1:

使用pt-table-sync -“测试同步”--print打印出差异如何?

代码语言:javascript
复制
pt-table-sync --h=localhost,u=root,p=pass --print --no-check-slave --databases=asterisk --tables=cdr <master-host> <slave-host>

pt-table-sync --h=localhost,u=root,p=pass --print --no-check-slave --databases=asterisk --tables=cdr <slave-host> <master-host>

来源:https://www.percona.com/doc/percona-toolkit/2.2/pt-table-sync.html

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/111368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档