利用 MySQL 克隆插件搭建主从

前言:

MySQL 的 Clone 插件是一个强大的功能,首次引入于 MySQL 8.0.17 版本。简单来说,Clone Plugin 是一款物理克隆数据工具,它能够帮助我们快速、高效地克隆或复制数据库,极大地简化了数据库迁移、备份和恢复的过程,让我们在处理大量数据时更加得心应手。本篇文章我们一起来学习下如何使用克隆插件。

克隆插件介绍

克隆插件的工作原理是创建存储在 InnoDB 中的 schema、table、tablespaces 和 data dictionary metadata的物理快照。这个快照实际上是一个完整的数据目录,MySQL克隆插件可以使用这个目录来配置并恢复一个 MySQL 服务器。

使用克隆插件,用户可以执行本地克隆和远程克隆两种操作:

  • 本地克隆:将数据从启动克隆操作的 MySQL 服务器克隆到该服务器主机上的指定目录下。
  • 远程克隆:涉及到本地 MySQL 服务器(接收方)和远程 MySQL 服务器(发送方),克隆的数据通过网络从发送方传输到接收方。默认情况下,远程克隆操作会删除接收方数据目录中的现有数据,并用克隆的新数据替换。

不过克隆插件的使用也是有一定的限制的,参考官方文档,总结几点如下:

  1. DDL阻塞与兼容性
    • 在早期版本中,克隆操作期间会阻塞源服务器(Donor)上的所有 DDL 操作,但从 MySQL 8.0.27 开始,克隆命令不再阻塞 Donor 上的 DDL 操作。
    • 克隆操作要求源和目标 MySQL 服务器版本兼容,通常不允许跨大版本克隆。直至最近更新(如MySQL 8.0.37),小版本间的克隆限制有所放宽,但仍需注意版本兼容性。
  2. 存储引擎限制
    • 克隆操作仅支持InnoDB表,对于其他存储引擎的表,只会克隆其表结构而不会复制数据。
  3. 配置与日志不复制
    • 克隆插件不会复制 Donor 服务器的配置参数和二进制日志(Binlog)设置,这意味着目标实例需要独立配置。
  4. 操作系统与网络限制
    • 捐赠者和接受者必须运行在相同的操作系统上,并且在某些情况下,要求网络连接直接而不通过MySQL Router。
    • 指定的 Donor 端口不能是X Protocol端口。
  5. 字符集与排序规则
    • 源和目标 MySQL 服务器必须具有相同的字符集和排序规则。

利用 Clone Plugin 搭建主从

下面我们来具体操作下如何利用远程克隆来搭建主从复制:

# 主从服务器安装克隆插件 
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';

# 写入my.cnf配置文件
[mysqld]
plugin-load-add=mysql_clone.so

# 查看插件状态 确认为 ACTIVE
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME = 'clone';
+------------------------+---------------+
| PLUGIN_NAME            | PLUGIN_STATUS |
+------------------------+---------------+
| clone                  | ACTIVE        |
+------------------------+---------------+

# 从节点执行远程克隆
# 远程克隆语法:
CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];

DATA DIRECTORY:是一个可选子句,用于在接收端指定要克隆的数据的目录。
如果不想删除接受方原数据目录中的现有数据,可以使用此选项修改数据copy的目录,必须有绝对路径,且目录必须不存在。
不指定的话,则默认克隆到接受方的数据目录下。

# 执行克隆操作,用户需要有BACKUP_ADMIN权限,建议使用管理员账号
mysql> CLONE INSTANCE FROM 'root'@'172.16.255.49':3306 IDENTIFIED BY 'xxxxxxx';
Query OK, 0 rows affected (12.40 sec)

# 克隆完成后 数据库服务会自动重启,再次进入查看克隆状态
mysql> select * from performance_schema.clone_status\G; 
*************************** 1. row ***************************
             ID: 1
            PID: 0
          STATE: Completed
     BEGIN_TIME: 2024-07-03 16:41:34.473
       END_TIME: 2024-07-03 16:41:56.788
         SOURCE: 172.16.255.49:3306
    DESTINATION: LOCAL INSTANCE
       ERROR_NO: 0
  ERROR_MESSAGE: 
    BINLOG_FILE: bin-log.000007
BINLOG_POSITION: 153538
  GTID_EXECUTED: 4bab9d8c-0ea8-11ef-a209-0050569c2bf5:1-380

# 状态无误后,从库即可开启主从复制
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='172.16.255.49',
    ->     SOURCE_PORT = 3306,
    ->     SOURCE_USER='repl',
    ->     SOURCE_PASSWORD='xxxx',
    ->     MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 3 warnings (0.05 sec)

mysql> start REPLICA;
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW REPLICA STATUS\G  
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 172.16.255.49
                  Source_User: repl
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: bin-log.000007
          Read_Source_Log_Pos: 154754
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 414
        Relay_Source_Log_File: bin-log.000007
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes

自己做过一遍才发现,使用克隆插件搭建主从真的方便快速很多,原来搭建主从至少需要源端备份+目标端恢复两个步骤,遇到数据库比较大的情况将非常耗时。而有了克隆插件,只需一条命令即能实现物理克隆,确实方便快速很多。

其实 MySQL 克隆插件使用场景还有很多,下面列举几种使用场景:

  1. 快速构建测试环境:在开发和测试环境中快速创建与生产环境数据一致的数据库副本,以进行功能测试、性能测试等。
  2. 灾难恢复:在数据库发生故障时,可以快速从备份或另一个健康实例克隆数据,以减少恢复时间和业务中断。
  3. 数据库迁移:在升级硬件、切换服务器时,使用克隆插件可以快速迁移数据而无需长时间的停机。
  4. 水平扩展:在数据库需要增加读取能力时,可以快速克隆数据库到新的服务器上,作为只读从库。
  5. 数据库物理备份:克隆插件可以用于构建本地或远程的热备节点,以提高数据的可用性和容错能力。

总结:

综上所述,MySQL 克隆插件适用于需要快速、高效地复制数据库的场景,尤其是在对数据一致性、速度和停机时间敏感的应用中。然而,其使用也受限于一定的条件和环境,因此在具体应用时需充分评估其适用性和局限性。

参考:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容