Chinaunix

标题: mysql主从的2进制文件问题,求解 [打印本页]

作者: 最不爱吃鱼    时间: 2011-09-15 13:49
标题: mysql主从的2进制文件问题,求解
现在有一台mysql主机 A
用的是innode 打算用这个做master  前几天把几个月前的2进制文件删除了一部分。
现在想用B做slave,主A的2进制文件不全的情况下,可以同步么?小弟在线等,谢谢!
作者: mysqllog    时间: 2011-09-15 20:01
可以
作者: 毛xx总理    时间: 2011-09-16 09:18
可以同步的应该。
作者: 飞鸿无痕    时间: 2011-09-16 10:39
回复 1# 最不爱吃鱼

把A的数据通过mysqldump导出,记得导出的时候加入--master-data=2,然后
grep -i "CHANGE MASTER TO" dumpfile 查找到log文件以及log文件的位置,再在从上执行change master ..... 语句就可以了
作者: 最不爱吃鱼    时间: 2011-09-21 12:57
回复 4# 飞鸿无痕
有没有详细点的资料,给个连接,或者email我一下也可以,linux@anylinux.info 我只配置过基本的主从,谢谢了。
作者: hunter_search    时间: 2011-09-21 19:16
主库现有的数据, 是把它导入从库么后,再来  
还是想当然地认为,丛库会将以前的数据从binlog里replication过来咧?
作者: 飞鸿无痕    时间: 2011-09-22 08:55
本帖最后由 飞鸿无痕 于 2011-09-22 08:58 编辑

回复 5# 最不爱吃鱼



同步历史数据就以下几个步骤,在做下面几步之前,应该先设置好主从同步,比如建同步帐号,设置不同的serverid,设置需要同步的库等,关于同步的设置网上很多,你找一下吧:
1、从主库中导出数据:
mysqldump -uroot -ppassword -h masterip --single-transaction --flush-logs --master-data=2 dbname > dbname.sql
2、在从库中导入dbname.sql数据
mysql -uroot -ppassword -h slaveip dbname < dbname.sql
3、找出在主库上导出数据时的log文件以及log文件的位置
grep -i "CHANGE MASTER TO" dbname.sql
假如这里返回:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000495', MASTER_LOG_POS=106;
4、根据找到的log文件以及log文件的位置,登陆从库执行change master语句
change master to master_host='masterip',master_user='replication_user',master_password='password',master_log_file='mysql-bin.000495', master_log_pos=106;
start slave;

最后用show slave status\G;查看一下同步是否正常就Ok了!
作者: 最不爱吃鱼    时间: 2011-09-22 11:31
回复  最不爱吃鱼



同步历史数据就以下几个步骤,在做下面几步之前,应该先设置好主从同步,比如建同 ...
飞鸿无痕 发表于 2011-09-22 08:55



    我是这样做的
主服务器my.cnf
server-id=1
log-bin=log
binlog-do-db=xxxooo
grant all privileges  on *.* to 'root'@'192.168.0.171' identified by '123456';

从服务器my.cnf
server-id=2
create database `xxxooo` default character set utf8 collate utf8_general_ci ;
#锁定主服务器的表
flush tables with read lock;
show mater status; #记录log.000数值 post值
mysqldump -uroot -p xxxooo > 备份的sql
unlock tables; 解锁表



#恢复slave的表
mysql -uroot -p xxxooo < 备份的sql
stop slave;
change master to master_host='192.168.0.130', master_user='root', master_password='123456', master_log_file='log.000 ' ,master_log_pos= ;
start slave;


由于主的部分2进制文件我备份到另外一台机器上了,所以不全,另外主还用了innodb引擎,数据都是记录在ibdata里的。


现在mysql报错


110922 10:15:23 [ERROR] Error reading packet from server: Could not find first log file name in binary log index file ( server_errno=1236)
110922 10:15:23 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file', Error_code: 1236
110922 10:15:23 [Note] Slave I/O thread exiting, read up to log 'log.00048', position 106
110922 10:18:05 [Note] Error reading relay log event: slave SQL thread was killed
110922 10:18:24 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='192.168.0.101', master_port='3306', master_log_file='log.00048', master_log_pos='106'. New state master_host='192.168.0.101', master_port='3306', master_log_file='log.00049', master_log_pos='19863'.
110922 10:18:27 [Note] Slave SQL thread initialized, starting replication in log 'log.00049' at position 19863, relay log './mail-relay-bin.000001' position: 4
110922 10:18:27 [Note] Slave I/O thread: connected to master 'slave@192.168.0.101:3306',replication started in log 'log.00049' at position 19863
110922 10:18:27 [ERROR] Error reading packet from server: Could not find first log file name in binary log index file ( server_errno=1236)
110922 10:18:27 [fly][ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file', [/fly]Error_code: 1236
110922 10:18:27 [Note] Slave I/O thread exiting, read up to log 'log.00049', position 19863

现在是这样,我晚上的时候访问量少,把站点停掉按照你的方法在试试,先谢过了。
作者: 飞鸿无痕    时间: 2011-09-22 12:34
回复 8# 最不爱吃鱼


    按照我那个方法,不需要停服务的!
作者: 最不爱吃鱼    时间: 2011-09-22 14:46
回复  最不爱吃鱼


    按照我那个方法,不需要停服务的!
飞鸿无痕 发表于 2011-09-22 12:34


好,我试试 ,谢谢先。
作者: 最不爱吃鱼    时间: 2011-09-27 14:08
本帖最后由 最不爱吃鱼 于 2011-09-27 14:09 编辑

回复 9# 飞鸿无痕
110927 14:06:19 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000050' at position 101673, relay log './mail-relay-bin.000002' position: 101819
110927 14:06:19 [ERROR] Slave SQL: Error 'Duplicate entry 'd174a64b68f9a917d982d02d7e3eb57a' for key 'PRIMARY'' on query. Default database: 'feng_production'. Query: 'INSERT INTO `online_members` (`member_id`, `ip`, `location`, `updated_at`, `created_at`, `time_count`, `visitor`) VALUES (0, '116.63.131.55', 'http://www..com/login?upurl=http%3A%2F%2Fwww.j.com%2Fmy', '2011-09-23 17:19:20', '2011-09-23 17:19:20', 0, 'd174a64b68f9a917d982d02d7e3eb57a')', Error_code: 1062
110927 14:06:19 [Warning] Slave: Duplicate entry 'd174a64b68f9a917d982d02d7e3eb57a' for key 'PRIMARY' Error_code: 1062
110927 14:06:19 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000050' position 101673

是不是我操作的时候要锁住master的表才可以?
作者: 飞鸿无痕    时间: 2011-09-27 16:31
回复 11# 最不爱吃鱼


    不需要!
作者: 最不爱吃鱼    时间: 2011-09-27 16:56
回复 12# 飞鸿无痕
那现在这样报错,我要重来一遍么?还是有其他解决办法
作者: 飞鸿无痕    时间: 2011-09-27 17:00
回复 13# 最不爱吃鱼

按照我的那个方法不可能出现重复的主键值的,把你的详细操作步骤写出来,帮你分析分析!
作者: 最不爱吃鱼    时间: 2011-09-27 17:04
回复  最不爱吃鱼

按照我的那个方法不可能出现重复的主键值的,把你的详细操作步骤写出来,帮你分析分析 ...
飞鸿无痕 发表于 2011-09-27 17:00



    都一样的,101是主,数据库访问量很大,
剩下的就是change master啥的
作者: 飞鸿无痕    时间: 2011-09-27 17:08
回复 15# 最不爱吃鱼


    步骤没啥问题,最后再问一句,你的存储引擎是否是innodb?
作者: 最不爱吃鱼    时间: 2011-09-27 17:12
回复 16# 飞鸿无痕


    是啊,数据文件都存在ibdata里的,本来我发帖没人理我打算删掉ibdata之类的重新生成了,后来见你回帖,我就一直在试,要是innodb还有解决办法么?
作者: 飞鸿无痕    时间: 2011-09-27 17:46
回复 17# 最不爱吃鱼

我那个步骤只适合innodb,你的是innodb引擎就应该没问题,按理应该不会有问题,那个步骤做过n遍都正常。
会不会是你的change master那里有问题???还是你将一些信息写到了my.cnf中???
作者: 最不爱吃鱼    时间: 2011-09-27 17:58
回复  最不爱吃鱼

我那个步骤只适合innodb,你的是innodb引擎就应该没问题,按理应该不会有问题,那个步 ...
飞鸿无痕 发表于 2011-09-27 17:46

master的my.cnf里面只写了个server-id=1
同步的库名字
slave的my.cnf里只有一个server-id=2
其他的信息都是写到change master里的


stop slave;
change master to master_host='192.168.0.101', master_user='slavge', master_password='密码', master_log_file='log.000045 ' ,master_log_pos=106 ;
start slave;

  mysql log里从已经连接到主了,只有那一个主键的报错,谢谢你这么晚了还回答我问题。
作者: 飞鸿无痕    时间: 2011-09-27 18:17
本帖最后由 飞鸿无痕 于 2011-09-27 18:19 编辑

回复 19# 最不爱吃鱼


    不客气,master_log_file='log.000045 ' ,master_log_pos=106 ; 这个log文件和位置是前面那个命令grep -i "CHANGE MASTER TO" dbslave显示出来的吧?
作者: 最不爱吃鱼    时间: 2011-09-28 08:06
回复 20# 飞鸿无痕

嗯,都是grep -i的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2