我正在寻找可以帮助我们创建大量连接到指定主服务器的 mysql 从服务器的东西,比如说批量复制。
如果为此目的有任何现有的解决方案。在简单的情况下,它可以只是 bash 脚本,它锁定主数据库,将表文件复制到新的从属数据库,恢复位置并开始复制。
据您所知,是否存在上述内容?
我正在寻找可以帮助我们创建大量连接到指定主服务器的 mysql 从服务器的东西,比如说批量复制。
如果为此目的有任何现有的解决方案。在简单的情况下,它可以只是 bash 脚本,它锁定主数据库,将表文件复制到新的从属数据库,恢复位置并开始复制。
据您所知,是否存在上述内容?
我想提出一些激进的建议。我从星际迷航中得到了这个想法:深空 9(号召性用语)
通过 DS9 类比,我为您带来了一个有趣的想法。
您设置了 2 个初始读取从属,其中 MySQL 从属禁用了 innodb
这是可选的。我的偏好是使用全 MyISAM 从属设备进行读取,因为对于小型数据集,它的读取速度比 InnoDB 快。如果您选择使用 InnoDB,请确保放松 ACID 合规性
如果发生崩溃,只需摧毁奴隶并启动一个新的
我们称奴隶为 S0 和 S1
这是别的东西:在 S0 的 /etc/my.cnf 中有这个
这些将帮助 S0 通过完全刷新的数据快速关闭。
以下是您必须在复制器进程中编写的脚本
当你需要生成一个新的slave时(我们称之为S2),这里是你必须做的
步骤 01) 在 S0 上,运行
service mysql stop
STEP 02) 将与 S0 相同版本的 MySQL 安装到 S2
步骤 03) 在 S0 上,
scp /etc/my.cnf S2:/etc/.
STEP 04) 在 S2 上,您需要将
server-id
S2 中的 /etc/my.cnf 更改为唯一值(建议:使用 S2 的私有 IP 的第 2、3 和第 4 个八位字节[不带点])innodb_max_dirty_pages_pct = 0
步骤 05) 在 S2 上,从 /etc/my.cnf中删除或注释掉步骤 06) 在 S0 上,运行
rsync -av /var/lib/mysql S2:/var/lib/mysql
(注意:如果您必须启动 5 个从站,此时运行 5 个 rsync)步骤 07) 在 S2 上,
service mysql start
(MySQL 复制在 S0 停止的地方立即开始)步骤 08) 在 S0 上,运行
service mysql start
创建复制器脚本后,您可以使用它在新的 Slave 上启动 MySQL。
同时,S1 可用于 SELECT 查询并继续复制。
S0 用于重新创建一个新的 Slave。
如果您在启动 Amazon EC2 或其他一些云数据库服务器的同时执行此操作,请与您的系统管理员核实任何允许您启动数据库服务器的 Linux 命令/API。然后,将复制器应用到新生成的 DB Server。更好的是,您可以将 Db Server 创建 API 合并到您的复制器脚本中。
警告
如果您必须启动数十或数百个从站,您只需拥有 10 台 Replicator 从站服务器 (S0 - S9) 并在不同的 Replicator 从站上拥有 10 个复制器脚本操作符副本。
我写了这篇博文,解释了如何创建 bash 脚本来自动化 MySQL 上的主从复制:
http://blog.ditullio.fr/2016/04/30/initialize-mysql-master-slave-replication-script/
它提供了一个 shell 脚本(见文章末尾),您只需在其中输入变量:
然后它会自动开始在这些从属上复制主控。
它针对大量从属服务器进行了优化,因为它只锁定和导出主转储和日志位置一次。然后它将转储文件分发给所有从属并在每个从属上初始化复制。
是的,它叫做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