基于GTID的复制

配置主节点

  1. 修改主数据库服务器的配置文件 my.cnf,开启 BINLOG设置 server-id 的值,并启动 GTID。这两个参数的修改需要重新启动数据库服务才可以生效。

    [mysqld]
    server-id=1
    log-bin=mysql-bin    # 一个相对路径,相对于 Data 存放的目录
    binlog_format=Row
    
    # enable GTID-based replication
    gtid_mode=ON
    enforce-gtid-consistency=ON
  2. 创建一个专门用于复制的用户,并授予 REPLICATION SLAVE 的权限。

    CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  3. 通过命令行客户端连接到源并启动一个会话,执行 FLUSH TABLES WITH READ LOCK 语句来刷新所有表并阻止写入语句(这个操作是为了确保没有数据库操作,以便获得一个一致性的快照)。

    FLUSH TABLES WITH READ LOCK;
  4. 使用 mysqldump 工具创建主数据库的快照(推荐使用 mysqldump 特别是在使用 InnoDB 引擎时)。以下示例将所有数据库转储到名为 dbdump.db 的文件中:

    mysqldump -uroot -p --all-databases --set-gtid-purged=OFF > dbdump.db
  5. 主数据库的备份完毕后,可以恢复写操作,剩下的操作只需要在从库上执行:

    UNLOCK TABLES;

每个副本都使用 MySQL 的用户名和密码连接到主数据库,因此在主数据库上必须有一个用户帐户,副本可以使用该帐户进行连接。

当设置副本时,会通过 CHANGE MASTER TO 命令的 MASTER_USER 选项指定用户名。任何帐户都可以用于此操作,只要已授予 REPLICATION SLAVE 权限。你可以选择为每个副本创建一个不同的帐户,或者使用相同的帐户连接到源。

用于复制的用户名和密码会以明文的形式存储在从数据库元数据存储库中。因此,你需要创建一个仅用于复制过程的帐户,以最小化对其他帐户的威胁。

配置从节点

  1. 修改从数据库的配置文件 my.cnf,增加 server-id 参数,并启动 GTID。注意 server-id 的值必须是唯一的,不能和主数据库的配置相同,如果有多个从数据库服务器,每个从数据库服务器必须有自己唯一的 server-id 值。

  2. 在从库上,使用 --skip-slave-start 选项启动从数据库,这样不会立即启动从数据库服务上的复制进程,方便我们对从数据库的服务进行进一步的配置。

  3. 将主库的快照文件(dbdump.db)复制到从节点服务器上,然后导入快照:

  4. 对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的 IP、端口以及开始执行复制的位置等:

  5. 启动 slave 线程:

  6. 查看复制状态:

MySQL的复制功能并不要求副本必须启用二进制日志记录

但是,在副本上启用二进制日志记录意味着可以使用副本的二进制日志进行数据备份和崩溃恢复。如果要在副本上启用二进制日志记录,可以在配置文件的 [mysqld] 部分中使用 log-bin 选项。

对于之前未使用二进制日志的服务器,需要重新启动服务器以启动二进制日志记录。

最后更新于