我正在寻找的东西,将帮助我们创建许多mysql奴隶连接到指定的主,比方说,大规模复制。
如果为此目的有任何现有的解决方案。简单地说,它可以是bash脚本,它锁定主DB,将表文件复制到新的从服务器,恢复位置并启动复制。
从你的了解上面描述的东西是否存在?
发布于 2012-04-13 19:11:46
我想提出一些激进的建议。我是从StarTrek :深空9号(呼叫武器)那里得到这个想法的
在一个虫洞周围设置了一个雷场,以防止自治领部队和杰马哈人通过。每一枚爆炸性地雷都配备了一个复制器,使地雷在爆炸后可以重新制造另一枚地雷。因此,雷区无限期地不睡觉。
通过DS9的类比,我给你带来了一个有趣的想法。
您设置了两个初始读取器,其中的MySQL从节点禁用了innodb
[mysqld]
skip-innodb这是可选的。我的首选是一个全MyISAM从机进行读取,因为它比小型数据集的InnoDB更快。如果您选择使用InnoDB,请确保您放松对此的酸性依从性
[mysqld]
innodb_flush_log_at_trx_commit = 0一旦坠机,只要摧毁奴隶,然后再旋转一个新的
我们叫奴隶S0和S1
下面是其他一些内容:在S0中的/etc/my.cnf中有这个
[mysqld]
innodb_max_dirty_pages_pct = 0;
innodb_fast_shutdown = 0这将帮助S0关闭快速与完全刷新的数据。
以下是在复制者进程中必须编写的脚本
当您需要生成一个新的从属程序(我们将称之为S2)时,下面是您必须做的事情
(步骤01)在S0上运行service mysql stop
步骤2)将与MySQL相同的S0版本安装到S2中
(步骤03)关于S0,scp /etc/my.cnf S2:/etc/.
(步骤04)在S2上,您需要将S2中/etc/my.cnf的server-id更改为唯一值(建议:使用S2私有IP的第2、第3和第4八进制没有点点 )
(步骤05)在S2上,从/etc/my.cnf中删除或注释掉innodb_max_dirty_pages_pct = 0
(步骤06)在S0上运行rsync -av /var/lib/mysql S2:/var/lib/mysql (注意:如果你必须旋转5个奴隶,此时运行5 rsyncs )
(步骤07)在S2上,service mysql start (MySQL复制立即从S0停止时开始)
(步骤08)在S0上运行service mysql start
一旦创建了复制者脚本,就可以在新的奴隶上使用它来拆分MySQL。
同时,S1可用于选择查询并继续复制。
S0用于重新创建一个新奴隶。
如果您是在旋转Amazon或其他一些Cloud服务器时这样做的,请在任何允许您拆分DB服务器的Linux命令/API上与您的系统管理员联系。然后,将复制器应用于新生成的DB Server。更好的是,您可以将Db Server创建API合并到Replicator脚本中。
警告
如果您需要旋转几十个或数百个从服务器,只需拥有10个复制子从服务器(S0 - S9),并在不同的复制器从服务器上拥有10个复制者脚本运算符的副本。
发布于 2016-06-15 14:48:01
我写了这篇博文,解释了如何创建bash脚本来自动化MySQL上的主从复制:
http://blog.ditullio.fr/2016/04/30/initialize-mysql-master-slave-replication-script/
它给出了一个shell脚本(参见post的末尾),您只需输入变量:
然后,它会自动在这些奴隶上启动主服务器的复制。
它针对大量的奴隶进行了优化,因为它只锁定和导出主转储和日志位置一次。然后,它将转储文件分发给所有从服务器,并在每个从服务器上初始化复制。
发布于 2012-02-13 05:52:38
是的,它叫做mysqldump:
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
您可以使用它将数据复制到从服务器,并在一个命令中启动复制。都在那里。
另见:
http://dev.mysql.com/doc/refman/5.1/en/replication-howto-existingdata.html
https://dba.stackexchange.com/questions/12713
复制相似问题