MySQL乱弹笔记

MySQL 8 Clone Plugin应用

2020-10-13  本文已影响0人  醉红尘丶

8.0.17开始支持clone插件功能

本地克隆

启动克隆操作的MySQL服务器实例中的数据,克隆到同服务器或同节点上的一个目录里

[图片上传失败...(image-ca83c5-1602639875106)]

远程克隆

默认情况下,远程克隆操作会删除接受者(recipient)数据目录中的数据,并将其替换为捐赠者(donor)的克隆数据。
您可以将数据克隆到收件人的其他目录中,以避免删除现有数据。(可选)
与通过远程克隆操作相比,通过本地克隆操作克隆的数据没有区别,两种操作都克隆相同的数据。

[图片上传失败...(image-694a64-1602639875106)]

原理

PAGE COPY

限制

克隆插件受以下限制:

实际应用

测试环境

启动时自动加载

在my.cnf中配置

[mysqld]
plugin-load-add=mysql_clone.so

安装插件

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
## 验证插件是否正常安装执行如下语句或show plugins查看
root [(none)]> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone       | ACTIVE        |
+-------------+---------------+
1 row in set (0.00 sec)

创建克隆用户

create user 'clone_user'@'%' identified by '123456';
# 备份只需要 BACKUP_ADMIN 即可,这边授权CLONE_ADMIN是为了后面远程复制使用
GRANT BACKUP_ADMIN,CLONE_ADMIN ON *.* TO 'clone_user'@'%';

本地克隆

# 创建目录
[root@initnode ~]# mkdir /data/newmysql
[root@initnode ~]# chown mysql.mysql /data/newmysql

# 登陆执行克隆操作
[root@initnode ~]# mysql -h127.0.0.1 -uclone_user -p123456
clone_user [(none)]> CLONE LOCAL DATA DIRECTORY = '/data/newmysql/newmysql';
Query OK, 0 rows affected (4.37 sec)

# 查看克隆进度
root [(none)]> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
+-----------+-------------+----------------------------+
| STAGE     | STATE       | END_TIME                   |
+-----------+-------------+----------------------------+
| DROP DATA | Completed   | 2020-10-13 16:01:09.433805 |
| FILE COPY | Completed   | 2020-10-13 16:01:28.156082 |
| PAGE COPY | Completed   | 2020-10-13 16:01:28.362579 |
| REDO COPY | Completed   | 2020-10-13 16:01:28.563969 |
| FILE SYNC | Completed   | 2020-10-13 16:01:31.436841 |
| RESTART   | Not Started | NULL                       |
| RECOVERY  | Not Started | NULL                       |
+-----------+-------------+----------------------------+
7 rows in set (0.00 sec)

启动克隆出的实例

# 编辑一份my.cnf文件
cp /etc/my.cnf /etc/my1111.cnf  #对应修改路径等

# 启动
mysqld_safe --defaults-file=/etc/my1111.cnf --datadir=/data/newmysql/newmysql  --user=mysql --mysqlx=OFF &

远程clone

捐赠者和接受者分别创建克隆用户

create user 'clone_user'@'%' identified by '123456';
# 备份只需要 BACKUP_ADMIN 即可,这边授权CLONE_ADMIN是为了后面远程复制使用
GRANT BACKUP_ADMIN,CLONE_ADMIN ON *.* TO 'clone_user'@'%';

实际捐赠者需要 BACKUP_ADMIN,接受者需要 CLONE_ADMIN 的权限即可

远程clone

以下操作均在接受者上执行
注意:接受者会清空掉原有的数据文件并重启,若这个库上有需要的数据请提前备份出来。

# 开始克隆
root [(none)]> SET GLOBAL clone_valid_donor_list = '192.168.20.200:3306';
Query OK, 0 rows affected (0.00 sec)

[root@initnode ~]# mysql -uclone_user -p123456 -h127.0.0.1
clone_user [(none)]> CLONE INSTANCE FROM clone_user@'192.168.20.200':3306 IDENTIFIED BY '123456';
Query OK, 0 rows affected (17.15 sec)

# 查看状态:
root [aaa]> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
+-----------+-----------+----------------------------+
| STAGE     | STATE     | END_TIME                   |
+-----------+-----------+----------------------------+
| DROP DATA | Completed | 2020-10-14 09:15:59.610589 |
| FILE COPY | Completed | 2020-10-14 09:16:15.617052 |
| PAGE COPY | Completed | 2020-10-14 09:16:15.920651 |
| REDO COPY | Completed | 2020-10-14 09:16:16.223565 |
| FILE SYNC | Completed | 2020-10-14 09:16:16.477574 |
| RESTART   | Completed | 2020-10-14 09:16:20.160321 |
| RECOVERY  | Completed | 2020-10-14 09:16:20.866489 |
+-----------+-----------+----------------------------+

root [aaa]> SELECT STATE FROM performance_schema.clone_status;
+-----------+
| STATE     |
+-----------+
| Completed |
+-----------+
1 row in set (0.01 sec)

接下去就能用这个来创建主从了

这还是个无锁备份【均为 innodb 表】,只是在clone期间,捐赠者无法执行DDL,感觉未来xtrabackup 要凉

上一篇 下一篇

猜你喜欢

热点阅读