首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql复制自动化脚本

Mysql复制自动化脚本
EN

Database Administration用户
提问于 2012-02-12 10:38:46
回答 3查看 6.4K关注 0票数 1

我正在寻找的东西,将帮助我们创建许多mysql奴隶连接到指定的主,比方说,大规模复制。

如果为此目的有任何现有的解决方案。简单地说,它可以是bash脚本,它锁定主DB,将表文件复制到新的从服务器,恢复位置并启动复制。

从你的了解上面描述的东西是否存在?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2012-04-13 19:11:46

我想提出一些激进的建议。我是从StarTrek :深空9号(呼叫武器)那里得到这个想法的

在一个虫洞周围设置了一个雷场,以防止自治领部队和杰马哈人通过。每一枚爆炸性地雷都配备了一个复制器,使地雷在爆炸后可以重新制造另一枚地雷。因此,雷区无限期地不睡觉。

通过DS9的类比,我给你带来了一个有趣的想法。

您设置了两个初始读取器,其中的MySQL从节点禁用了innodb

代码语言:javascript
复制
[mysqld]
skip-innodb

这是可选的。我的首选是一个全MyISAM从机进行读取,因为它比小型数据集的InnoDB更快。如果您选择使用InnoDB,请确保您放松对此的酸性依从性

代码语言:javascript
复制
[mysqld]
innodb_flush_log_at_trx_commit = 0

一旦坠机,只要摧毁奴隶,然后再旋转一个新的

我们叫奴隶S0和S1

下面是其他一些内容:在S0中的/etc/my.cnf中有这个

代码语言:javascript
复制
[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个复制者脚本运算符的副本。

票数 1
EN

Database Administration用户

发布于 2016-06-15 14:48:01

我写了这篇博文,解释了如何创建bash脚本来自动化MySQL上的主从复制:

http://blog.ditullio.fr/2016/04/30/initialize-mysql-master-slave-replication-script/

它给出了一个shell脚本(参见post的末尾),您只需输入变量:

  • 主主机名或IP
  • 奴隶主机名或IP的数组
  • 数据库名称

然后,它会自动在这些奴隶上启动主服务器的复制。

它针对大量的奴隶进行了优化,因为它只锁定和导出主转储和日志位置一次。然后,它将转储文件分发给所有从服务器,并在每个从服务器上初始化复制。

票数 1
EN

Database Administration用户

发布于 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

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/12713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档