按主题
按用户名
按昵称
按相册
当前数据
历史数据
主题:Mysql 达人入........
588 0
来自:上海 注册:2003-07-15
发帖:201+2352
操作系统::redhat as 3
数据库:Mysql 3.23.58
目前以两台数据库相同版本从MASTER 单向同步到 SLAVE 以保持数据的近似相同
采用Mysql replication机制
系统原本一直工作很正常,近来突然发现同步停止了 以下为SLAVE 的mysql log
070925 16:24:21 Slave: connected to master 'repl@192.168.10.51:3306', replication started in log 'log-bin.212' at position 266410
070925 16:24:21 Could not parse log event entry, check the master for binlog corruption
This may also be a network problem, or just a bug in the master or slave code.
070925 16:24:21 Error running query, slave aborted. Fix the problem, and re-start the slave thread with "mysqladmin start-slave". We stopped at log 'log-bin
.212' position 266410
070925 16:24:21 Slave thread exiting, replication stopped in log 'log-bin.212' at position 266410
在企图恢复同步时进行如下操作
删除MASTER 下所有binlog 文件 删除mysql.info 文件
Restart mysqld
检查同步状态 Mysql>show master status 正常
检查msql log 如下
070926 11:58:20 Slave thread killed while connecting to master
070926 11:58:20 Slave thread exiting, replication stopped in log 'FIRST' at position 4
已经开始同步
检查SLAVE 同步状态
mysql> show slave status\G
*************************** 1. row ***************************
Master_Host: 192.168.10.51
Master_User: repl
Master_Port: 3306
Connect_retry: 60
Log_File: log-bin.001
Pos: 31778587
Slave_Running: Yes
Replicate_do_db:
Replicate_ignore_db:
Last_errno: 0
Last_error:
Skip_counter: 0
1 row in set (0.00 sec)
检查SLAVE MYSQL LOG
ERROR: 1062 Duplicate entry '213205725' for key 1
ERROR: 1062 Duplicate entry '213205726' for key 1
ERROR: 1062 Duplicate entry '213205727' for key 1
ERROR: 1062 Duplicate entry '213205728' for key 1
ERROR: 1062 Duplicate entry '213205729' for key 1
ERROR: 1062 Duplicate entry '213205730' for key 1
ERROR: 1062 Duplicate entry '213205731' for key 1
ERROR: 1062 Duplicate entry '213205732' for key 1
ERROR: 1062 Duplicate entry '213205733' for key 1
ERROR: 1062 Duplicate entry '213205734' for key 1
ERROR: 1062 Duplicate entry '213205735' for key 1
错误代码定义
ERROR: 1062 :字段值重复,入库失败
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 14:01:59
588 0
来自:上海 注册:2003-07-15
发帖:201+2353
技术贴无人问津
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 14:14:39
1577 151
来自:上海 注册:2001-02-17
发帖:718+9259
初始化master机后,先手工把master机上的数据库复制到salve机上,再同步看看
[此贴子已经被作者于 2007-09-26 14:40:10 编辑过]
-------------------------------------------------------------------------------------------
世上本无事,庸人自扰之
容天下难容之事
笑天下可笑之人
msn:huyuegui@hotmail.com
QQ:312066776
发表于:2007-09-26 14:37:31
588 0
来自:上海 注册:2003-07-15
发帖:201+2355
由于A机数据庞大 复制的话耗时太大 且本身大部分数据以同步到B机
A与B之间 中断了约1天多的时间 本分有备份机制 这段时间的数据可以考虑放弃
现在只想恢复同步功能...
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 14:41:18
1577 151
来自:上海 注册:2001-02-17
发帖:718+9260
mysql复制不是很简单的,只要把数据库文件通过网络copy过去就可以了。就是几G么也是很快的。看了一下网络上的教程。感觉mysql自带的同步在初始时master和slave机上的数据库必须相同。
-------------------------------------------------------------------------------------------
世上本无事,庸人自扰之
容天下难容之事
笑天下可笑之人
msn:huyuegui@hotmail.com
QQ:312066776
发表于:2007-09-26 14:47:12
588 0
来自:上海 注册:2003-07-15
发帖:201+2356
感觉同步机制已经恢复.. 所报ERROR 只是同步时insert的一些错误 是否可以忽略呢?
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 14:48:14
588 0
来自:上海 注册:2003-07-15
发帖:201+2357
要是数据只有几个G 我也就COPY 下了...
现在有上百G
而且在DUMP 的时候会锁表 目前业务运行中 长时间锁表是不允许的
难道他的replication机制 在中断后重新同步 必须保持两台数据库中的数据一致性?
[此贴子已经被作者于 2007-09-26 14:52:10 编辑过]
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 14:49:22
58 8
来自:上海 注册:2003-09-20
发帖:43+1141
1、master上执行 mysqldump -F --database DBxxx --opt > /home/DBxxx.sql
2、执行完后,echo "begin work;" > 1.sql,然后 cat DBxxx.sql >> 1.sql,然后 echo "commit;" >> 1.sql
3、把1.sql传到DR
4、在DR上, mysql***** shutdown关闭库,把mysql目录下的内容删干净,注意预先保留my.cnf文件,然后执行mysql/bin/mysql_install_db,然后执行启动mysql
5、在DR上把1.sql导入,然后执行CHANGE MASTER TO MASTER_HOST="Master_IP", MASTER_USER="repl", MASTER_PASSWORD="ur_passwd", MASTER_LOG_FILE="Master上最新生成的log-bin", MASTER_LOG_POS=4;
6、flush privileges;,然后执行 start slave;,使用 show slave status;查看状态
-------------------------------------------------------------------------------------------
Leica M6/EPSON R-D1/Leica R-E/Contax T2/Kodak Retina IIIC
M35/2 ASPH
M90/2 ASPH
R50/2
R135/2.8
发表于:2007-09-26 14:52:47
1577 151
来自:上海 注册:2001-02-17
发帖:718+9261
应该无法忽略的。我猜想mysql的同步机制只不过是slave机定期去访问master机上的binlog。然后把binlog里记录的再操作一遍。你现在两边数据不一致了,那边在同步时肯定会有问题的。
-------------------------------------------------------------------------------------------
世上本无事,庸人自扰之
容天下难容之事
笑天下可笑之人
msn:huyuegui@hotmail.com
QQ:312066776
发表于:2007-09-26 14:53:34
58 8
来自:上海 注册:2003-09-20
发帖:43+1142
楼主肯定还是要dump出一个库传过去才行的。
-------------------------------------------------------------------------------------------
Leica M6/EPSON R-D1/Leica R-E/Contax T2/Kodak Retina IIIC
M35/2 ASPH
M90/2 ASPH
R50/2
R135/2.8
发表于:2007-09-26 14:55:59
588 0
来自:上海 注册:2003-07-15
发帖:201+2358
引用:
楼主肯定还是要dump出一个库传过去才行的
这是我最不想看到的... dump上百G数据N多个库
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 15:01:49
1577 151
来自:上海 注册:2001-02-17
发帖:718+9262
你把binlog都删掉了,叫slave机如何同步中断后的操作?
-------------------------------------------------------------------------------------------
世上本无事,庸人自扰之
容天下难容之事
笑天下可笑之人
msn:huyuegui@hotmail.com
QQ:312066776
发表于:2007-09-26 15:01:51
588 0
来自:上海 注册:2003-07-15
发帖:201+2359
引用: 你把binlog都删掉了,叫slave机如何同步中断后的操作
删除后 重启MYSQL 会生成新的BINLOG 从新的基点开始读取
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 15:03:31
588 0
来自:上海 注册:2003-07-15
发帖:201+2360
刚才测试了下
在MASTER 创建新库后 会被同步到SLAVE
同步已经恢复...
在不DUMP整个MASTER的情况下 中断同步那段时间的数据已经没有办法了 可以忽略
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 15:08:02
1577 151
来自:上海 注册:2001-02-17
发帖:718+9263
引用: 同步机制实现概述
MySQL同步机制基于master把所有对数据库的更新操作(更新、删除 等)都记录在二进制日志里。因此,想要启用同步机制,在master就必须启用二进制日志。详情请看"5.9.4 The Binary Log"。
每个slave接受来自master上在二进制日志中记录的更新操作,因此在slave上执行了这个操作的一个拷贝。应该非常重要地意识到,二进制日志只是从启用二进制日志开始的时刻才记录更新操作的。所有的slave必须在启用二进制日志时把master上已经存在的数据拷贝过来。如果运行同步时slave上的数据和master上启用二进制日志时的数据不一致的话,那么slave同步就会失败。
把master上的数据拷贝过来的方法之一实在slave上执行 LOAD DATA FROM MASTER 语句。不过要注意,LOAD DATA FROM MASTER 是从MySQL 4.0.0之后才开始可以用的,而且只支持master上的 MyISAM 类型表。同样地,这个操作需要一个全局的读锁,这样的话传送日志到slave的时候在master上就不会有更新操作了。当实现了锁自由表热备份时(在MySQL 5.0中),全局读锁就没必要了。
由于有这些限制,因此我们建议只在master上相关数据比较小的时候才执行 LOAD DATA FROM MASTER 语句,或者在master上允许一个长时间的读锁。由于每个系统之间 LOAD DATA FROM MASTER 的速度各不一样,一个比较好的衡量规则是每秒能拷贝1MB数据。这只是的粗略的估计,不过master和slave都是奔腾700MHz的机器且用100MBit/s网络连接时就能达到这个速度了。
slave上已经完整拷贝master数据后,就可以连接到master上然后等待处理更新了。如果master当机或者slave连接断开,slave会定期尝试连接到master上直到能重连并且等待更新。重试的时间间隔由 --master-connect-retry 选项来控制,它的默认值是60秒。每个slave都记录了它关闭时的日志位置。msater是不知道有多少个slave连接上来或者哪个slave从什么时候开始更新。
-------------------------------------------------------------------------------------------
世上本无事,庸人自扰之
容天下难容之事
笑天下可笑之人
msn:huyuegui@hotmail.com
QQ:312066776
发表于:2007-09-26 15:15:30
588 0
来自:上海 注册:2003-07-15
发帖:201+2361
谢谢LS 两位
我知道现有的做法 很不严谨 毕竟有数据丢失
考虑到假期快来临 为避免假期中出现任何问题 就先把同步恢复起来...
至于丢失的那部分数据 待假期过后 系统空闲时 再进行全局dump
-------------------------------------------------------------------------------------------
面对惨淡的人生 直面淋漓的鲜血 彪捍的活下去!
发表于:2007-09-26 15:29:26