为 MyISAM 表设置复制?

Hal*_*luk 8 mysql myisam replication

在 MySQL 中设置复制之前,首先需要将数据传输到从属设备。

由于 MyISAM 表可以作为文件复制。可以将 MyISAM 文件 .myd .myi .frm 复制到从站吗?这足以开始复制吗?

Rol*_*DBA 8

由于一切都是 MyISAM,因此您需要执行以下操作

STEP 01) 将 Master 配置为复制 Master

如果你没有server-id在/etc/my.cnf中定义,添加一个

[mysqld]
server-id=1
Run Code Online (Sandbox Code Playgroud)

service mysql restart

STEP 02) 检查主节点上的二进制日志

如果 Master 上的二进制日志处于活动状态,请执行此操作

RESET MASTER;
Run Code Online (Sandbox Code Playgroud)

清除所有二进制日志并重新开始。

如果二进制日志未激活,请执行此操作

  • 在/etc/my.cnflog-bin=mysql-bin下添加[mysqld]
  • 服务mysql重启

步骤 03) 复制 /var/lib/mysql

您可以将rsync设置为从/var/lib/mysql一台服务器到/var/lib/mysql另一台服务器执行MyISAM 表的逐字节强力复制。您将执行多次 rsync,直到最后一次 rsync,这非常快。然后,您将完全关闭 MySQL 并再执行一次 rsync。在 Master 和 Slave 上启动 mysql。

STEP 04) 在 Slave 上创建复制用户

GRANT REPLICATION CLIENT,REPLICATION SLAVE
ON *.* TO replicator@'PrivateIPofSlave' IDENTIFIED BY 'r3pl1cAt0r';
Run Code Online (Sandbox Code Playgroud)

STEP 05) 设置复制

在 Slave 上运行此命令

CHANGE MASTER TO
MASTER_HOST='PrivateIPofMaster',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='r3pl1cAt0r',
MASTER_LOG_FILE='XXXX',
MASTER_LOG_POS=YYYY;
START SLAVE;
Run Code Online (Sandbox Code Playgroud)

XXXX 和 YYYY 是什么???

  • XXXX是您执行最终 rsync 时的最后一个二进制日志文件。Slave 上的 /var/lib/mysql 中有该文件的副本。只需ls -l /var/lib/mysql/mysql-bin.0*在 Slave 上运行并使用最后一个二进制日志。
  • YYYY是执行最终 rsync 时最后一个二进制日志文件的位置。有趣的是,位置也是二进制日志的文件大小。只需ls -l /var/lib/mysql/mysql-bin.0*在 Slave 上运行并将最后一个二进制日志的文件大小作为 position YYYY

步骤 06) 检查复制

运行这个

SHOW SLAVE STATUS\G
Run Code Online (Sandbox Code Playgroud)

如果Slave_IO_RunningYesSlave_SQL_RunningYes,恭喜你完成了!!!

我写过类似的关于使用 rsync 的帖子,如下所示: