这几天心里很乱,庆幸的是没影响到工作,但是不幸的事今天下午发生了,在给两个数据表添加字段时直接操作了从库。悲剧了.... mysql主从分离,主写从读,两张表table1、table2 新添字段column,当时两条SQL语句: alter table tabel1 add column int(5) default 0 not null auto_increment; alter table tabel2 add column int(5) default 0 not null auto_increment; 执行第一条没有问题,大概有五百多条被修改,执行第二条报错:此字段column已存在。执行到此才发现是在从库上的操作,当时的想法是drop掉table1的column字段:alter table table1 drop column column,但是由于误操作将table2的column字段drop掉了。悲催..... 接下来只能删除table1的column,添加table2的column,接着重启主从,报错。 以下为恢复过程: 1、利用DNS将查询业务切换到主库,停掉从库的同步:stop slave; 2、删除tabel1的column字段:alter table table1 drop column column;由于此表没有写入所以数据跟主库一致,table1恢复完成。 难点在于表table2的恢复 3、在主库备份table2:mysqldump -uroot -p database table2 > table2.sql 4、在从库上删除表table2:truncate table2; 5、将table2.sql导入从库:mysql -uroot -p database < table2.sql 6、set global sql_slave_skip_counter=1 跳过报错,重启主从:start slave 此时主从同步恢复正常,校验主从数据库的完整性,此案例成功的关键在于操作期间,数据表的数据没有变化,所以保证的主从数据库的数据一致,重启主从才能重新同步。 如果表的写入操作过于频繁则无法使用上述方法来恢复,不过,可以考虑锁表后再来进行操作。这个具有理论上的可行性,未经实验验证。 验证两个表的数据完整性,重启主从同步 |
|
来自: jas0n_liu > 《mysql常见报错》