主从数据不一致,需要重新关联

lvchenotl 2016-04-01 01:57:06
情况是这样的:目前的库是一主两从,大部分的修改和读操作都是在主库上完成的,两个从库基本只做热备之用。前段时间由于重启主库,所以业务人员临时启用了其中一台从库做为主库,并对从库进行了写入操作。后来主库重启好后,他们又让原来的主库恢复了主库的职能,之前暂时做从的数据库就断开了与主库的主从关系。现在他们需要我把断开的从库跟主库重新关联上,并表示一切的数据都以原来的主库为准,所以可以把从库上的东西都删掉,然后导入主库的数据。

目前有几个问题,一个是需要整个导出的库很大,光表数据大小就有61G,数据库目录的大小有100多G,其中ibdata1文件就占了85G;
第二个是数据库里的表只有一张用的是MYISAM引擎,其他都用的是INNODB引擎,所以不能使用xtrabackup工具来导出。

然后我想到了四种方案:
一是使用Innobackupex+binlog日志还原从库数据;
二是使用mysqldump+binlong日志来还原从库;
三是直接拷贝从库上的数据然后scp到需要重新关联的从库;
四是使用percona-toolkit工具来重构数据,使主从数据库数据一致。

我是倾向于mysqldump+binlong,但是本身数据库就很大,估计光导出就要很久了。。。
然后我又看网上说用Innobackupex导出大数据更快,但是毕竟要在正式环境上安装工具,怕对现网环境造成影响
第三种方案需要期间停止所有从库,然后转移数据,这对空间和时间都有很大的要求,恐怕不容易满足。。。而且不知道把从库都先停止了会不会让原本没有问题的从库出现新问题
第四种方案貌似需要在主库上进行操作,而且会重构主库上的数据,我觉得风险更大。。。所以正在纠结中,不知道该怎么办

不知各位有何意见,或者有什么新的方案能够一起分享下呢?
...全文
207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2016-04-05
  • 打赏
  • 举报
回复
既然从库没有使用 那肯定第三种方法 停止第二个从库进程 拷贝第二个从库数据目录到第一个从库 然后启动第二个从库 在启动第一个从库
zhu19774279 2016-04-05
  • 打赏
  • 举报
回复
我记得xtrabackup备份MyISAM的条件是锁库,另外官网也是这么说的“In the case of MyISAM a “read lock” is needed.”。 其实如果主库有一段时间没人用,而且所有binlog又都在,可以考虑从库从头开始同步,不过这时主从库压力都比较大,所以需要主库有一段时间没人用或压力很小。
lvchenotl 2016-04-05
  • 打赏
  • 举报
回复
引用 8 楼 zhu19774279 的回复:
mysql:mysql用户对拷贝路径赋权 关闭SELinux或者放开SELinux对拷贝路径的管制。
谢谢,我们的服务器SELinux都是关闭的
zhu19774279 2016-04-05
  • 打赏
  • 举报
回复
mysql:mysql用户对拷贝路径赋权 关闭SELinux或者放开SELinux对拷贝路径的管制。
lvchenotl 2016-04-05
  • 打赏
  • 举报
回复
引用 6 楼 zhu19774279 的回复:
[quote=引用 4 楼 lvchenotl 的回复:] [quote=引用 2 楼 rucypli 的回复:] 既然从库没有使用 那肯定第三种方法 停止第二个从库进程 拷贝第二个从库数据目录到第一个从库 然后启动第二个从库 在启动第一个从库
目前我也是这么打算的,不知有哪些细节需要注意呢? 烦请不吝赐教[/quote] 从库能停库的话,那就直接拷贝吧。[/quote] 从库可以停。。。。拷贝完成后,除了server_id以及一些路径,还需要修改或者注意哪些呢?
zhu19774279 2016-04-05
  • 打赏
  • 举报
回复
引用 4 楼 lvchenotl 的回复:
[quote=引用 2 楼 rucypli 的回复:] 既然从库没有使用 那肯定第三种方法 停止第二个从库进程 拷贝第二个从库数据目录到第一个从库 然后启动第二个从库 在启动第一个从库
目前我也是这么打算的,不知有哪些细节需要注意呢? 烦请不吝赐教[/quote] 从库能停库的话,那就直接拷贝吧。
zhu19774279 2016-04-05
  • 打赏
  • 举报
回复
引用 3 楼 lvchenotl 的回复:
目前领导允许把数据不一致的那个从库给直接干掉,然后我在想是不是直接整个物理拷贝正常从库上的数据文件,然后修改参数后重启。。。之后再通过主从复制自动同步。 当然,这个操作还是需要在数据库访问量很少的时候进行操作,毕竟数据文件很大,光压缩然后传输解压就要花费一段时间了
事实上xtrabackup的工作原理就是这样,拷贝所有数据文件。InnoDB可以用redo log恢复,因此不用锁库,MyISAM需要锁库(如果不锁库,拷贝的时候再写入数据,那么这部分数据很可能会丢失)。
lvchenotl 2016-04-05
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
既然从库没有使用 那肯定第三种方法 停止第二个从库进程 拷贝第二个从库数据目录到第一个从库 然后启动第二个从库 在启动第一个从库
目前我也是这么打算的,不知有哪些细节需要注意呢? 烦请不吝赐教
lvchenotl 2016-04-05
  • 打赏
  • 举报
回复
引用 1 楼 zhu19774279 的回复:
我记得xtrabackup备份MyISAM的条件是锁库,另外官网也是这么说的“In the case of MyISAM a “read lock” is needed.”。 其实如果主库有一段时间没人用,而且所有binlog又都在,可以考虑从库从头开始同步,不过这时主从库压力都比较大,所以需要主库有一段时间没人用或压力很小。
目前领导允许把数据不一致的那个从库给直接干掉,然后我在想是不是直接整个物理拷贝正常从库上的数据文件,然后修改参数后重启。。。之后再通过主从复制自动同步。 当然,这个操作还是需要在数据库访问量很少的时候进行操作,毕竟数据文件很大,光压缩然后传输解压就要花费一段时间了
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。   本课程主要讲解以下内容:1. Redis的基本使用2. Redis数据库的数据类型3. Redis数据数据管理4. Redis的主从复制5. Redis数据库的持久性6. Redis的高可靠性和集群7. Redis的优化和性能测试8. Redis服务器的维护和管理9. Redis服务器的常见问题排错 

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧