我有一个主数据库和两个副本。当 linux 服务器重新启动而没有停止 mysqld 时,replicate1 损坏了。我想使用以下命令从 replicate2 中获取转储并加载 replicate1
mysqldump --master-data --single-transaction --all-databases --compress > full_dumpfle.sql
在 replicate12 上的复制停止后,转储开始
停止从属;
转储启动后,我立即在 replicate2 上重新启动复制
启动从属;
转储文件大小为50G。
我将 my.cnf 文件从 replicate4 复制到 replicate1,保留了 replicate1 以前的 my.cnf 文件中的 server-id,以及 master_user 和 master_password 行。
我加载数据库
mysql < 完整转储文件.sql
我发现负载耗尽了磁盘空间,在不幸的重启之前,这足以满足 replicate1 的需要。我甚至添加了 100G 的磁盘空间,但负载也有可能耗尽这 100G 的磁盘空间。
我截断了巨大的 128G 的 slow_log 表并删除了另外 56G 的主数据库,在一次几乎耗尽可用磁盘的加载失败后,当我开始第二次加载时,大约有 245G 是空闲的。
我只想将 replicate1 作为 master 的副本返回服务。显然我使用的方法不起作用。有人能告诉我如何正确加载转储吗?不拘泥于转储,可以再拿一个。如果需要,甚至可以从头开始在 replicate1 上启动复制,但如果可以的话,我宁愿不加载 master。
所有这些都在我们的私有云上进行,因此建议降低负载。
所有这些都在 ubuntu10.04LTS 和 MaridDB 上。
服务器版本:5.2.12-MariaDB-mariadb115~lucid-log
如有任何建设性建议我将不胜感激。
拉乌尔
答案1
我对 Percona XtraBackup 的使用体验很好。请参阅“如何使用 Xtrabackup 通过 6 个简单步骤设置从属服务器以进行复制“ 食谱。