数据迁移通用笔记(Minio、Mysql、Mongo、ElasticSearch)

序号 更新时间 备注
1 2024.03.26 初始化笔记
2 2024.03.27 细化ES 集群和单节点的描述

文章目录

一、Mino 数据迁移

这里主要存在两种模式

1、直接通过minio之间mirro镜像迁移

​ 整体上通过配置别名进行区分迁移

2、通过备份迁移数据

​ 通过备份文件和恢复文件来迁移

1、mc的基础操作

myminio 是您给 Minio 实例设置的别名

https://play.min.io 是 Minio 实例的端点地址,如果有端口也填入

ACCESS_KEY 是您的访问密钥,SECRET_KEY 则是您的密钥

source-bucket 是存储桶名称

a、设置别名

mc alias remove myminio

b、删除别名

mc alias remove myminio

c、查询已配置的别名

mc alias list (如需要,可以--json 格式化)

d、查询存储桶列表

mc ls myminio

e、查看存储桶中的对象列表

mc ls myminio/source-bucket

f、删除桶内容

mc rb --force myminio/source-bucket (删除指定存储桶)

mc rb --force myminio (删除所有存储桶)

g、创建桶

mc mb myminio/mybucket

h、镜像复制

--force 参数将强制备份过程,即使目标目录已存在也会覆盖它。

--remove 参数将删除目标目录中不存在的对象和存储桶。

--watch 参数将监视源目录的更改,并在检测到更改时自动更新目标目录。

shell 复制代码
mc mirror --force --remove --watch <ALIAS_NAME> <BACKUP_DIRECTORY>

2、镜像复制

① 这里首先要保证A、B服务器节点网络互通,最起码保证api端口联通,如无变更,默认是9000

② 我们可以任意在A、B中选取一个配置别名,如果有就可以直接利用,这里A为minioA ,B为minioB,主要是利用到mirror

③ 这里假设A是输出源、B是输入源,则其实我们可以任意在A和B节点下执行如下命令,如果缺乏别名需要补充。

shell 复制代码
 ./mc mirror minioA minioB

3、备份复制

这里主要看你需要复制特定桶还是全部了,根据情况参考 基础操作 中的参数是否覆盖和删除

shell 复制代码
# ======== 备份操作 =======
# 备份特定桶 到backup 下
mc cp --recursive myminio/source-bucket backup/

# 备份全部桶 到backup 下
mc cp --recursive myminio/ backup/

# ======== 恢复操作 =======
# 恢复特定桶
mc cp --recursive backup/ myminio/destination-bucket

# 恢复全部桶
mc cp --recursive backup/ myminio/destination-bucket

二、MySql数据迁移

这里主要是讨论8.0

① 假设为A、B两点

A:192.168.0.1

B:192.168.0.2

② 假设账户密码

username: test

password: test666?

③ 假设存储库

test

1、利用主从复制

直接利用主从复制,将内容复制过去,然后关闭主从状态。

2、数据汇出汇入

sql 复制代码
# 汇出A的test数据源内容
mysqldump -h 192.168.0.1 -u test -p --databases test > test_bak.sql
sql 复制代码
# 汇入到B 数据源内容
mysql -h 192.168.0.2 -u test -p < /tmp/test_bak.sql

三、Mongo数据迁移

① 假设为A、B两点

A:192.168.0.1

B:192.168.0.2

② 假设账户密码

username: test

password: test666?

③ 假设存储库

test

1、利用主从复制

2、数据汇出汇入

/tmp/test 为存放目录

shell 复制代码
# 汇出数据
mongodump --uri="mongodb://test:test666?@192.168.0.1/test?authSource=test" --out=/tmp/test


# 汇入数据 -  记得/
mongorestore --uri="mongodb://mongodb://test:test666?@192.168.0.2/test?replicaSet=mgset-75334555/test?authSource=test" /tmp/test/

四、ElasticSearch数据迁移

① 假设为A、B两点

A:192.168.0.1

B:192.168.0.2

② 假设账户密码

username: test

password: test666?

③ 假设存储库

esSnap

④快照名称

snapshot_20240325

1、基于快照

这种方式建议版本一致,否则可能出现不知名问题。

【适应离线方案】

1.1、旧数据快照备份

ES的快照是需要一个存储库来存放的,所以我们需要先创建存储库快照才能创建快照存放其中。

a、查看存储库快照
shell 复制代码
# 全部快照存储库
curl -XGET "http://192.168.0.1:9200/_snapshot/_all"

#特定快照存储库 ------------ test
curl -XGET "http://192.168.0.1:9200/_snapshot/test"

#查看存储库快照列表
curl -XGET /_snapshot/test/_all?pretty

#删除存储库快照 - 全部
curl -XDELETE /_snapshot/test/_all

#删除存储库 
curl -XDELETE /_snapshot/test
b、创建存储库快照
  • type 字段指定了存储库类型为 "fs",表示使用本地文件系统作为快照的存储位置。

复制代码
  settings

字段包含了存储库的设置信息,其中:

  • location 指定了快照文件存储的路径,这里是 "/tmp/esSnap"。(通过打开elasticsearch.yml的 path.repo属性查看)
  • max_snapshot_bytes_per_sec 指定了快照过程中允许的最大写入速率,这里设置为 "50mb",表示每秒最大写入速率为 50MB。
  • max_restore_bytes_per_sec 指定了恢复过程中允许的最大读取速率,这里也设置为 "50mb",表示每秒最大读取速率为 50MB。
  • compress 指定了是否压缩快照文件,这里设置为 "true",表示压缩快照文件。
shell 复制代码
curl -XPOST -H "Content-Type: application/json" "http://192.168.0.1:9200/_snapshot/test" -d '{"type":"fs", "settings": {"location": "/opt/test", "max_snapshot_bytes_per_sec":"50mb",   "max_restore_bytes_per_sec":"50mb", "compress": "true"}}' 
c、创建(数据)快照

wait_for_completion=true :指定等待快照过程完成后返回响应

  • ignore_unavailable 字段指定了是否忽略不可用的索引,这里设置为 "true",表示如果有不可用的索引也继续创建快照。
  • include_global_state 字段指定了是否包含全局状态信息,这里设置为 "false",表示不包含全局状态信息。
shell 复制代码
 curl -XPOST -H "Content-Type: application/json" "http:// 192.168.4.162:9200/_snapshot/test/snapshot_20240325?wait_for_completion=true" -d '{"ignore_unavailable":"true",   "include_global_state":"false"}'
d、分片配置(集群)
shell 复制代码
# 关闭分片配置
curl -XPUT "http://192.168.0.1:9200/_cluster/settings" -H 'Content-Type: application/json' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}'

# 重启分片配置
curl -XPUT "http://192.168.0.1:9200/_cluster/settings" -H 'Content-Type: application/json' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}'
1.2、利用快照恢复 (集群)

这里需要提醒一下,存储的快照目录需要预先配置.

如果是集群节点,需要每个配置,需要配置 共享挂载盘

通常:elasticsearch.yml内设置 path.repo ,可以赋值例如 ["/opt/test"]

集群挂载共享盘

(1)安装配置

shell 复制代码
# 通用linux
yum install nfs-utils rpcbind -y
#设置开机自启动
systemctl enable rpcbind.servicesystemctl enable nfs-server.service
#启动服务
systemctl start rpcbind.servicesystemctl start nfs-server.service

# Ubuntu
# nfs 服务端
sudo apt-get install nfs-kernel-server
# nfs 客户端
sudo apt-get install nfs-common   
# 启动内容
sudo systemctl start nfs-kernel-server
# 自启动配置
sudo systemctl enable nfs-kernel-server

(2)挂载配置

shell 复制代码
# 编辑NFS内容
sudo vim /etc/exports

# 挂载
# /opt/test 挂载目录
# 1、读写(rw)模式共享给所有客户端
# 2、同步(sync)更新
# 3、no_root_squash 表示客户端以 root 用户身份连接时不会转换为匿名用户
/opt/test *(rw,sync,no_root_squash,no_subtree_check)


#使其生效
exportfs -a

(3)查看可挂载目录、挂载

shell 复制代码
# 查看可挂载目录
showmount -e 192.168.0.1
# 挂载操作
//将 NFS 服务器 192.168.0.1 上的共享目录 /opt/test 挂载到本地 /opt/test
sudo mount -t nfs 192.168.0.1:/opt/test /opt/test
# 查看已经挂载的内容
mount | grep nfs
a、检查存储库

如果不存在存储库,建议新建存储库用于恢复

用共享盘来存储文件,来达成同一个存储库,并从存储库内容恢复的操作

b1、利用快照恢复(空数据的ES)

共享盘联通的情况下,建立同一个存储库,会自动加载存储库里面的快照 snapshot_20240325 ,这时候我们可选择指定 index1index1 恢复,也可以什么都不加,全部恢复

shell 复制代码
curl -XPOST -H "Content-Type: application/json" "http://192.168.0.1:9200/_snapshot/test/snapshot_20240325/_restore?wait_for_completion=true" -d '{"indices": "index1,index2"}'
b2、利用快照恢复(已经存在数据)
shell 复制代码
#1、停止全部节点

#2、删除data数据
 通常是 `/opt/xiaoi_app/elasticsearch/data`

#3、重启节点

#4、检测集群状态
curl -XGET 'http://localhost:9200/_cat/health?v'

#5、这时候需要继续走下1.2-a 重建设存储库
curl -XPOST -H "Content-Type: application/json" "http://192.168.0.1:9200/_snapshot/test" -d '{"type":"fs", "settings": {"location": "/opt/test", "max_snapshot_bytes_per_sec":"50mb",   "max_restore_bytes_per_sec":"50mb", "compress": "true"}}' 

#6、这时候
# 共享盘联通的情况下,建立同一个存储库,会自动加载存储库里面的快照 snapshot_20240325,直接恢复即可
curl -XPOST -H "Content-Type: application/json" "http://192.168.0.1:9200/_snapshot/test/snapshot_20240325/_restore?wait_for_completion=true" 

#7、检查索引是否完好
curl -XGET 'http://localhost:9200/_cat/indices?v'
1.3、覆盖式恢复(单节点)

data/node/ 分片的内容保存,复制源数据内容,重启ES 应用

2、利用 logstash 插件同步数据

【适应网络联通方案】

相关推荐
骑士雄师18 分钟前
使用 IntelliJ IDEA 结合 DBeaver 连接 MySQL 数据库并实现数据增删查改的详细步骤:
数据库·mysql·intellij-idea
b78gb2 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
奥尔特星云大使2 小时前
CentOS 7 安装 MySQL 8
mysql·centos·mysql 8
lang201509283 小时前
MySQL FIPS模式:安全合规全解析
mysql
一只叫煤球的猫5 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
jianghx10247 小时前
Docker部署ES,开启安全认证并且设置账号密码(已运行中)
安全·elasticsearch·docker·es账号密码设置
yumgpkpm8 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
程序员云帆哥9 小时前
MySQL JDBC Driver URL参数配置规范
数据库·mysql·jdbc
三三木木七11 小时前
mysql拒绝连接
数据库·mysql
唐古乌梁海11 小时前
【mysql】InnoDB的聚簇索引和非聚簇索引工作原理
数据库·mysql