免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10861 | 回复: 22
打印 上一主题 下一主题

求助MySQL同步问题(Replication)! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-12 11:39 |只看该作者 |倒序浏览
数据库A  为Master   版本:4.1.22        ip:192.168.0.2
数据库B  为Slave     版本:5.0.51a      ip:192.168.0.1
操作系统 RHEL4

Master  配置:
#master
log-bin = /usr/local/mysql/var/bin-log
server-id = 1
binlog-do-db = aaa
binlog-do-db = bbb
binlog-ignore-db = mysql
binlog-ignore-db = test

Slave  配置:
#slave
log-bin         = /usr/local/mysql1/mysql-bin
server-id       = 2
master-host = 192.168.0.2
master-port = 3306
master-user = test
master-password = test
master-connect-retry = 60
relay-log = /usr/local/mysql1/mysql-relay-bin
#sql_slave_skip_counter = 1
#logs-slave-updates
read-only
skip-slave-start
replicate-do-db = aaa
replicate-do-db = bbb
replicate-ignore-db = mysql
#replicate-ignore-db = test

Master  上相应用户权限已设置。
启动slave(start slave)后过一段时间报错,信息如下:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.0.2
                Master_User: test
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: bin-log.000397
        Read_Master_Log_Pos: 13467484
             Relay_Log_File: mysql-relay-bin.000002
              Relay_Log_Pos: 271281
      Relay_Master_Log_File: bin-log.000363
           Slave_IO_Running: Yes
          Slave_SQL_Running: No
            Replicate_Do_DB: aaa,bbb,aaa,bbb,aaa,bbb
        Replicate_Ignore_DB: mysql,mysql,mysql,mysql,mysql
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 1062
                 Last_Error: Error 'Duplicate entry '4454319' for key 1' on query. Default database: 'aaa'. Query: 'INSERT INTO dz_pms (msgfrom, msgfromid, msgtoid, folder, new, subject, dateline, message)       VALUES ('System Message', '0', '379209', 'inbox', '1', 'Welcome to !', '1210446620',')。
               Skip_Counter: 0
        Exec_Master_Log_Pos: 16756663
            Relay_Log_Space: 756638029
            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
1 row in set (0.00 sec)

[root@localhost mysql1]# cat localhost.localdomain.err
080511 03:13:04  mysqld started
080511  3:13:04 [Warning] The syntax for replication startup options is deprecated and will be removed in MySQL 5.2. Please use 'CHANGE MASTER' instead.
080511  3:13:04 [Warning] 'user' entry 'root@localhost.localdomain' ignored in --skip-name-resolve mode.
080511  3:13:04 [Warning] 'user' entry '@localhost.localdomain' ignored in --skip-name-resolve mode.
080511  3:13:04 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.51a-community-log'  socket: '/usr/local/mysql1/mysql1.sock'  port: 3306  MySQL Community Edition (GPL)
080511  3:19:31 [Note] Slave SQL thread initialized, starting replication in log 'bin-log.000363' at position 16487322, relay log '/usr/local/mysql1/mysql-relay-bin.000001' position: 4
080511  3:19:31 [Note] Slave I/O thread: connected to master 'repli@192.168.0.2:3306',  replication started in log 'bin-log.000363' at position 16487322
080511  3:19:32 [ERROR] Slave: Error 'Duplicate entry '4454319' for key 1' on query. Default database: 'aaa'. Query: 'INSERT INTO dz_pms (msgfrom, msgfromid, msgtoid, folder, new, subject, dateline, message)     VALUES ('System Message', '0', '379209', 'inbox', '1', 'Welcome to !', '1210446620','
080511  3:19:32 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'bin-log.000363' position 16756663

Master  上相关信息:
mysql> show processlist;
+---------+-------+-----------------------+------+-------------+--------+----------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
| Id      | User  | Host                  | db   | Command     | Time   | State                                                          | Info                                                                                                 |
+---------+-------+-----------------------+------+-------------+--------+----------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
|  106617 | test | 192.168.0.1:32783 | NULL | Binlog Dump | 115063 | Has sent all binlog to slave; waiting for binlog to be updated | NULL

论坛徽章:
0
2 [报告]
发表于 2008-05-12 13:39 |只看该作者
搜搜坛子吧。答案好多的。

论坛徽章:
0
3 [报告]
发表于 2008-05-12 13:55 |只看该作者
数据库A  为Master   版本:4.1.22        ip:192.168.0.2
数据库B  为Slave     版本:5.0.51a      ip:192.168.0.1

建议不要用不同版本的mysql来进行同步,问题多多!

论坛徽章:
0
4 [报告]
发表于 2008-05-12 14:12 |只看该作者

回复 #2 yueliangdao0608 的帖子

把那条数据跳过去了
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
具体原因在查找。

论坛徽章:
0
5 [报告]
发表于 2008-05-12 14:17 |只看该作者

回复 #3 ProfessorTian 的帖子

建议不要用不同版本的mysql来进行同步,问题多多!


之所以用不同版本是这样的:
    服务现在跑的是4.1.22版本,想要升级,但是不知道直接升级到5.0会不会出问题,且前台程序员一直说会出问题,不同意我升级;
    所以就把数据复制到5.0版本测试。
    有什么其它方案么?

论坛徽章:
0
6 [报告]
发表于 2008-05-12 15:23 |只看该作者
与版本关系不大
你的错误上面明显说明了,主键重复

解决方法:
1:在slave上面删除冲突的相关记录,重启slave
2:如果要求不是很严格,在配置未见中加上 skip-error=1062

论坛徽章:
0
7 [报告]
发表于 2008-05-12 18:14 |只看该作者
[quote]原帖由 showsa 于 2008-5-12 15:23 发表
与版本关系不大

字面上是1062错误,有时候即使跳过了这一步,仍然不能解决问题,仍然会继续出现1062错误,难不成还一直选择跳过不成?
以前我们也做过,用不同版本的mysql,但是会出现各种各样的问题。所以才建议slave用和master一样版本的mysql来进行同步,那样可以避免各种各样的问题出现。

论坛徽章:
0
8 [报告]
发表于 2008-05-13 01:45 |只看该作者
楼上应该弄清楚1062错误产生的原因

一种是人为的,即在slave上插入了master中存在的数据,在复制的过程中造成冲突,这种只要找到原因所在,是容易避免的

另外一种是因为mysql的replication过程并不是事务安全的,slave上面有relay log info 和master info 文件,slave的 sql thread在插入数据之后再更新这2个文件,但是当在插入数据和更新这2个文件之前,msyqld中断的话,就会造成下次重启slave的时候重新插入之前已经插入过的数据,从而产生1062错误。

上面2种情况才是造成1062错误的原因
不同版本的mysql只是表象,不知道田教授明白了没有

欢迎讨论,如有不对之处,请指出,以免误导新人

如有不明,可以加qq群

论坛徽章:
0
9 [报告]
发表于 2008-05-13 10:00 |只看该作者
原帖由 showsa 于 2008-5-13 01:45 发表
楼上应该弄清楚1062错误产生的原因

一种是人为的,即在slave上插入了master中存在的数据,在复制的过程中造成冲突,这种只要找到原因所在,是容易避免的

另外一种是因为mysql的replication过程并不是事务 ...


论坛徽章:
0
10 [报告]
发表于 2008-05-13 11:40 |只看该作者

暂时稳定了!

非常感谢各位的帮助。

Last_Error: Error 'Duplicate entry '4454319' for key 1' on query.


这是出问题的那个表的信息:
mysql> desc dz_pms;
+-----------+------------------------+------+-----+---------+----------------+
| Field     | Type                   | Null | Key | Default | Extra          |
+-----------+------------------------+------+-----+---------+----------------+
| pmid      | int(10) unsigned       | NO   | PRI | NULL    | auto_increment |

。。。。。。省略。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP