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

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

码农世界 2024-06-04 后端 96 次浏览 0个评论
序号更新时间备注
12024.03.26初始化笔记
22024.03.27细化ES 集群和单节点的描述
32024.04.01针对集群迁移失败的问题增加描述

文章目录

    • 一、Mino 数据迁移
      • 1、mc的基础操作
      • 2、镜像复制
      • 3、备份复制
      • 二、MySql数据迁移
        • 1、利用主从复制
        • 2、数据汇出汇入
        • 三、Mongo数据迁移
          • 1、利用主从复制
          • 2、数据汇出汇入
          • 四、ElasticSearch数据迁移
            • 1、基于快照
              • 1.1、旧数据快照备份
                • a、查看存储库快照
                • b、创建存储库快照
                • c、创建(数据)快照
                • d、分片配置(集群)
                • 1.2、利用快照恢复 (集群)
                  • 集群挂载共享盘
                  • a、检查存储库
                  • b1、利用快照恢复(空数据的ES)
                  • b2、利用快照恢复(已经存在数据)
                  • 1.3、覆盖式恢复(单节点)
                  • 2、利用 logstash 插件同步数据
                  • 3、elasticdump 迁移

                    一、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 参数将监视源目录的更改,并在检测到更改时自动更新目标目录。

                    mc mirror --force --remove --watch  
                    

                    2、镜像复制

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

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

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

                     ./mc mirror minioA minioB
                    

                    3、备份复制

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

                    # ======== 备份操作 =======
                    # 备份特定桶 到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、数据汇出汇入

                    # 汇出A的test数据源内容
                    mysqldump -h 192.168.0.1 -u test -p --databases test > test_bak.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 为存放目录

                    # 汇出数据
                    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、查看存储库快照
                    # 全部快照存储库
                    curl -XGET "http://192.168.0.1:9200/_snapshot/_all"
                    #特定快照存储库 ———— test
                    curl -XGET "http://192.168.0.1:9200/_snapshot/test"
                    #查看存储库快照列表
                    curl -XGET "http://192.168.0.1:9200/_snapshot/test/_all?pretty"
                    #删除存储库快照 - 全部
                    curl -XDELETE "http://192.168.0.1:9200/_snapshot/test/_all"
                    #删除存储库 
                    curl -XDELETE "http://192.168.0.1:9200/_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”,表示压缩快照文件。
                    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”,表示不包含全局状态信息。
                     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、分片配置(集群)
                    # 关闭分片配置
                    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)安装配置

                    # 通用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)挂载配置

                    # 编辑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)查看可挂载目录、挂载

                    # 查看可挂载目录
                    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 ,这时候我们可选择指定 index1和index1 恢复,也可以什么都不加,全部恢复

                    Tips (迁移失败的问题):

                    这里要指定索引,避免一些本地状态的索引导致无法迁移 && include_global_state 必定加 fasle

                    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、利用快照恢复(已经存在数据)
                    #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 插件同步数据

                    【适应网络联通方案】

                    3、elasticdump 迁移

                    暂时遇到滑动窗口的问题

转载请注明来自码农世界,本文标题:《数据迁移通用笔记(Minio、Mysql、Mongo、ElasticSearch)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,96人围观)参与讨论

还没有评论,来说两句吧...

Top