• 【数据库开发】DataX开发环境的安装部署(Python、Java)


    1、简介

    DataX是阿里云DataWorks数据集成的开源版本。下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输。

    官网地址:
    https://github.com/alibaba/DataX

    在这里插入图片描述

    1.1 DataX简介

    DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
    在这里插入图片描述

    1.2 DataX功能

    DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
    在这里插入图片描述
    DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

    • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
    • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
    • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

    1.3 支持的数据通道

    DataX目前支持数据如下:

    类型数据源Reader(读)Writer(写)文档
    RDBMS 关系型数据库MySQL√√读 、写
    Oracle√√读 、写
    OceanBase√√读 、写
    SQLServer√√读 、写
    PostgreSQL√√读 、写
    DRDS√√读 、写
    Kingbase√√读 、写
    通用RDBMS(支持所有关系型数据库)√√读 、写
    阿里云数仓数据存储ODPS√√读 、写
    ADB√写
    ADS√写
    OSS√√读 、写
    OCS√写
    Hologres√写
    AnalyticDB For PostgreSQL√写
    阿里云中间件datahub√√读 、写
    SLS√√读 、写
    图数据库阿里云 GDB√√读 、写
    Neo4j√写
    NoSQL数据存储OTS√√读 、写
    Hbase0.94√√读 、写
    Hbase1.1√√读 、写
    Phoenix4.x√√读 、写
    Phoenix5.x√√读 、写
    MongoDB√√读 、写
    Cassandra√√读 、写
    数仓数据存储StarRocks√√读 、写
    ApacheDoris√写
    ClickHouse√√读 、写
    Databend√写
    Hive√√读 、写
    kudu√写
    selectdb√写
    无结构化数据存储TxtFile√√读 、写
    FTP√√读 、写
    HDFS√√读 、写
    Elasticsearch√写
    时间序列数据库OpenTSDB√读
    TSDB√√读 、写
    TDengine√√读 、写

    2、DataX安装配置

    https://github.com/alibaba/DataX/blob/master/userGuid.md

    2.1 DataX

    • 下载DataX的源代码进行编译
    wget https://codeload.github.com/alibaba/DataX/zip/master
    git clone git@github.com:alibaba/DataX.git
    
    • 1
    • 2

    或者

    • 下载DataX的二进制安装包(本文采用的方法)
    # wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
    wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
    
    • 1
    • 2

    在这里插入图片描述
    解压如下:

    tar -zxvf datax.tar.gz
    
    • 1

    在这里插入图片描述
    查看文件夹/home/tomcat如下:
    在这里插入图片描述
    查看文件夹/home/tomcat/datax/bin如下:
    在这里插入图片描述
    查看文件夹/home/tomcat/datax/job如下:
    在这里插入图片描述

    2.2 Java

    输入命令检查java是否已安装。

    java -version
    
    • 1

    在这里插入图片描述
    说明java没有安装。
    安装java环境,输入如下代码如下:

    apt-get install openjdk-11-jre-headless openjdk-11-jdk-headless
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    2.3 Python

    输入命令检查python是否已安装。

    python -v
    
    • 1

    在这里插入图片描述

    python3 -v
    
    • 1

    在这里插入图片描述

    3、DataX Web安装配置

    3.1 mysql

    下载mysql数据库的安装包:

    mkdir mysql
    cd mysql
    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    解压mysql数据库的安装包:

    tar xvf mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar
    
    • 1

    在这里插入图片描述

    依次安装如下文件:

     libmysqlclient20_5.7.31-1ubuntu18.04_amd64.deb
     libmysqlclient-dev_5.7.31-1ubuntu18.04_amd64.deb
     libmysqld-dev_5.7.31-1ubuntu18.04_amd64.deb
     mysql-client_5.7.31-1ubuntu18.04_amd64.deb
     mysql-common_5.7.31-1ubuntu18.04_amd64.deb
     mysql-community-client_5.7.31-1ubuntu18.04_amd64.deb
     mysql-community-server_5.7.31-1ubuntu18.04_amd64.deb
     mysql-community-source_5.7.31-1ubuntu18.04_amd64.deb
     mysql-server_5.7.31-1ubuntu18.04_amd64.deb
     #mysql-testsuite_5.7.31-1ubuntu18.04_amd64.deb
     #mysql-community-test_5.7.31-1ubuntu18.04_amd64.deb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    比如命令如下:

    sudo apt-get install ./mysql-server_5.7.31-1ubuntu18.04_amd64.deb
    
    • 1

    在这里插入图片描述

    测试是否安装成功如下:

    mysql -V
    
    • 1

    在这里插入图片描述
    安装完成后查看mysql服务:

    netstat -tap | grep mysql
    
    • 1

    在这里插入图片描述

    修改 root 密码和 host:

    mysql
    use mysql
    update user set host = '%' where user = 'root' 
    SET PASSWORD FOR 'root'@'%' = PASSWORD('XXXXXXXX');
    FLUSH PRIVILEGES;
    select user,host from user;
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    测试mysql是否能登录成功。
    在这里插入图片描述
    查看mysql数据库情况:

    show databases;
    
    • 1

    在这里插入图片描述

    use dataweb;
    show tables;
    
    • 1
    • 2

    在这里插入图片描述
    执行如下操作,使得远程可以连接mysql数据库。

    # 查看监听
    netstat -an |grep 3306
    # 前监听的是本地回环地址:tcp 0 0 127.0.0.1:3306  0.0.0.0:* LISTEN 
    # 远程客户端无法访问
    
    # 修改MySQL的本地监听地址
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    修改bind-address 的值为 bind-address = 0.0.0.0保存退出。
    也可以修改为本机ip,例如:bind-address = 192.168.111.10
    
    # 重启mysql数据库
    sudo service mysql restart
    
    # 在远程客户端机器上测试下网络,telnet成功说明网络没问题
    telnet 192.168.111.10 3306
    
    # 注意:阿里云服务器有端口限制,需要去配置下端口访问规则开放3306端口
    网址:[https://homenew.console.aliyun.com/](https://homenew.console.aliyun.com/)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    数据库的基本操作命令:

    # 直接登陆mysql
    mysql -u用户名 -p密码 数据库名
    # 例如: 
    mysql -uroot -p123456 mysql
    
    # 先登陆后面再输入密码和选择数据库
    mysql -u root -p
    Enter password:  “root用户密码”
    mysql> use mysql # 选择要操作的数据库
    
    # 切换数据库
    use 数据库名;
    
    # 查看所有数据库
    show databases;  
    
    # 查看登陆数据库中所有的表
    show tables;  
    
    # 查看数据表结构
    desc 表名;
    
    # 查看登陆用户名 
    select user();  
    
    # 查看登陆数据库库名
    select database();
    
    # 查看版本
    select version();
    
    # 显示当前时间
    select now();
    
    # 查看所有用户的 用户名、可登陆主机、身份验证插件、密码  
    select user,host,plugin,authentication_string from user;
    
    # 查看当前登录用户权限
    show grants;
    
    # 查看任意用户权限(后面说权限的具体含义)
    show grants for root@localhost;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    数据库的备份及恢复:

    # 备份所有数据库:
    mysqldump -uroot -p --all-databases > all.db
    
    # 备份指定数据库:
    mysqldump -uroot -p pydb > test1.db
    
    # 备份指定数据库的某些表
    mysqldump -uroot -p pydb 表名1 表名2 表名n > test2.db
    
    # 备份指定数据库排除某些表(排除表1 和 表2)
    mysqldump -uroot -p pydb --ignore-table=pydb.表1 --ignore-table=pydb.表2 > test3.db
    
    # 创建test数据库
    create database test charset=utf8; 
    
    # 恢复备份数据,导入的数据库必须存在
    mysql -u root -p test < test1.db
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    卸载mysql:

    # 卸载mysql:
    1.sudo apt-get autoremove mysql* --purge
    2.sudo apt-get remove mysql-server
    3.sudo apt-get remove mysql-common
    
    # 清理残留数据 
    sudo dpkg -l |grep mysql|awk '{print $2}' |sudo xargs dpkg -P 
    sudo rm -rf /etc/mysql/ 
    sudo rm -rf /var/lib/mysql
    
    # 检查是否删除完毕
    whereis mysql
    sudo find / -name mysql
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.2 DataX Web

    https://github.com/WeiYe-Jing/datax-web

    3.2.1 简介

    DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。

    3.2.2 架构图

    在这里插入图片描述

    3.2.3 依赖环境

    • Language: Java 8(jdk版本建议1.8.201以上)
    • Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下)
    • Environment: MacOS, Windows,Linux
    • Database: Mysql5.7

    3.2.4 安装

    https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md
    在这里插入图片描述

    https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg
    提取码:cpsk
    
    • 1
    • 2
    • 1)解压安装包
      在选定的安装目录,解压安装包
    tar -zxvf datax-web-{VERSION}.tar.gz
    
    • 1
    • 2)执行一键安装脚本
      进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行
    ./bin/install.sh
    
    • 1
    • 3)数据库初始化
      如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:
    Scan out mysql command, so begin to initalize the database
    Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y
    Please input the db host(default: 127.0.0.1): 
    Please input the db port(default: 3306): 
    Please input the db username(default: root): 
    Please input the db password(default: ): 
    Please input the db name(default: exchangis)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
      1. 配置
        在项目目录下/modules/datax-execute/bin/env.properties 指定PYTHON_PATH的路径
    vi ./modules/{module_name}/bin/env.properties
    
    ### 执行datax的python脚本地址
    PYTHON_PATH=
    
    ### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
    DATAX_ADMIN_PORT=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    此文件中包括一些默认配置参数,例如:executor.port,json.path,data.path等,具体请查看文件。

    检查文件bootstrap.properties:

    cd ./datax-web
    vi ./modules/datax-admin/conf/bootstrap.properties
    
    • 1
    • 2

    在这里插入图片描述
    datax-web-server分为2模块:admin 、executor。
    检查admin配置修改:

    cd ./datax-web
    sudo vi ./modules/datax-admin/bin/env.properties
    # 修改server port、邮件、java_home等信息
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    检查executor 配置修改:

    
    cd ./datax-web
    sudo vi ./modules/datax-executor/bin/env.properties
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    • 5)启动服务
      运行bin目录下start-all.sh (或者分别启动admin、executor)。
      一键启动所有服务
    ./bin/start-all.sh
    
    • 1

    一键取消所有服务

    ./bin/stop-all.sh
    
    • 1

    汇总命令如下:

    ./bin/start-all.sh # 启动
    ./bin/stop-all.sh # 停止
     
    # 启动后jps,可以看到admin和executor进程
    jps
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6)查看服务
      在Linux环境下使用JPS命令,查看是否出现DataXAdminApplication和DataXExecutorApplication进程,如果存在这表示项目运行成功;
      如果项目启动失败,请检查启动日志:modules/datax-admin/bin/console.out或者modules/datax-executor/bin/console.out;
      在这里插入图片描述

    • 7)运行
      部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip为datax-admin部署所在服务器ip,port为为datax-admin 指定的运行端口);

    http://192.168.1.123:9527/index.html
    
    • 1

    输入用户名 admin 密码 123456 就可以直接访问系统;

    在这里插入图片描述

    4、入门使用

    4.1 DataX自带打印示例测试

    输入DataX的测试命令如下:

    python3 datax.py ../job/job.json
    
    • 1

    在这里插入图片描述
    命令行结果输出:
    在这里插入图片描述
    初步测试成功。

    4.2 DataX生成任务模板文件

    通过命令生成datax任务的模板json文件。

    cd  ./datax/bin/
    python datax.py -r mysqlreader -w mysqlwriter > mysql2mysql.json
    
    • 1
    • 2

    在这里插入图片描述
    查看文件mysql2mysql.json如下:
    在这里插入图片描述

    cat mysql2mysql.json
    
    • 1

    准备数据表如下:
    t_user:
    在这里插入图片描述
    t_user2:
    在这里插入图片描述

    根据各自需求,按照模板修改文件mysql2mysql.json:

    {
       "job": {
           "content": [
                {
                   "reader": {
                       "name":"mysqlreader",
                       "parameter": {
                           "column": ["user_id"],
                           "connection": [
                                {
                                   "jdbcUrl": ["jdbc:mysql://192.168.36.130:3306/test?useSSL=false"],
                                   "table": ["t_user"]
                                }
                            ],
                           "password":"123456",
                           "username":"root"
                        }
                    },
                   "writer": {
                       "name":"mysqlwriter",
                       "parameter": {
                           "column": ["user_id"],
                           "connection": [
                                {
                                   "jdbcUrl":"jdbc:mysql://192.168.36.130:3306/test?useSSL=false",
                                   "table": ["t_user2"]
                                }
                            ],
                           "password":"123456",
                           "username":"root",
                           "writeMode":"insert"
                        }
                    }
                }
            ],
           "setting": {
               "speed": {
                   "channel":"1"
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    ①select中字段个数和writer节点上“column”的个数需保持一致,如果能确保 select中的字段与目标表保持一致,可在writer节点的配置上去掉“column”相关配置。
    ②writer节点的jdbcUrl,不可以同reader节点那样用“[]”括起来。

    启动datax同步任务:

    python ./datax.py ./mysql2mysql.json
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    修改mysql2mysql.json中的字段数据如下:

    "column": ["user_id", "name"],
    
    • 1

    再次执行命令如下:

    python ./datax.py ./mysql2mysql.json
    
    • 1

    数据表结果更新如下:
    在这里插入图片描述

    4.3 DataX-Web创建任务

    • 创建项目
      在这里插入图片描述

    • 创建执行器
      在这里插入图片描述

    • 创建数据源
      在这里插入图片描述

    • 创建任务模板
      此步骤是主要是为了后边构建任务的时候,为任务指定执行器。
      在这里插入图片描述

    • 创建任务
      在这里插入图片描述

    • 生成任务json文件
      在这里插入图片描述

    • 管理任务,执行任务
      在这里插入图片描述

    • 查看日志
      在这里插入图片描述

    5、FAQ

    5.1 DataX-Web连接不上MySQL

    在这里插入图片描述

    • 问题:
      Code:[MYSQLErrCode-02], Description:[数据库服务的IP地址或者Port错误,请检查填写的IP地址和Port或者联系DBA确认IP地址和Port是否正确。如果是同步中心用户请联系DBA确认idb上录入的IP和PORT信息和数据库的当前实际信息是一致的]. - 具体错误信息为:com.mysql.jdbc.excep

    • 回答:
      不建议在没有服务器身份验证的情况下建立SSL连接,根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果没有设置显式选项,则必须默认建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性被设置为“false”。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。

    很简单,在连接数据库的url后面加上参数即可,例如:

    jdbc:mysql://localhost:3306/testdb?useSSL=false
    
    • 1

    使用上述标红的URL,即可解决该警告,标红参数前面为你数据库连接URL,如果有多个参数记得用&连接,例如:

    jdbc:mysql://localhost:3306/testdb?characterEncoding=utf-8&useSSL=false
    
    • 1

    在这里插入图片描述

    5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?

    解决办法:
    修改文件datax/conf/core.json:

    "core": {
            "dataXServer": {
                "address": "http://localhost:7001/api",
                "timeout": 10000,
                "reportDataxLog": false,
                "reportPerfLog": false
            },
            "transport": {
                "channel": {
                    "class": "com.alibaba.datax.core.transport.channel.memory.MemoryChannel",
                    "speed": {
                        "byte": 2000000,
                        "record": -1
                    },
                    "flowControlInterval": 20,
                    "capacity": 512,
                    "byteCapacity": 67108864
                },
                "exchanger": {
                    "class": "com.alibaba.datax.core.plugin.BufferedRecordExchanger",
                    "bufferSize": 32
                }
            },
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    修改core -> transport -> channel -> speed -> “byte”: 2000000,将单个channel的大小改为2MB即可。
    在这里插入图片描述

    5.3 触发任务报错Cannot run program “python”: error=2, No such file or directory

    解决办法:
    因为Ubuntu自带的python没有/usr/bin/python该目录,data-web源码中默认调用/usr/bin/python,解决方法可以搭建软连接

    ln -s /usr/bin/python3 /usr/bin/python
    
    • 1

    或者若安装了python2也可以

    ln -s /usr/bin/python2 /usr/bin/python
    
    • 1

    5.4 基于代码重新打包DataX

    datax和datax web可以使用maven进行编译源码和打包,因此需要先安装maven。
    在Linux系统中,可以使用以下命令安装maven:

    sudo apt-get install maven
    
    • 1

    在这里插入图片描述

    mvn -v
    
    • 1

    在这里插入图片描述

    进入datax源代码目录,执行以下命令进行编译:

    mvn clean package assembly:assembly -Dmaven.test.skip=true 
    
    • 1

    其中,-Dmaven.test.skip=true表示跳过测试。
    (1)找不到依赖包:
    [ERROR] Failed to execute goal on project hdfsreader: Could not resolve dependencies for project com.alibaba.datax:hdfsreader:jar:0.0.1-SNAPSHOT: Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde in nexus-aliyun (https://maven.aliyun.com/repository/central) -> [Help 1]

    解决方法:从提示上看,是hdfsreader的包缺失,相应的hdfswriter也应该是不行的。因为我用不到这两个组件,于是在pom.xml中注释掉。
    在这里插入图片描述
    (2)问题:提示disk空间too little,实际空间有很大?
    解决方法:实际是/tmp目录小于默认的1G,设置小一点就好了。配置文件minimalTmpDirGB设置小一点就正常了。
    logdir datadir tmpdir 都有自己的min value,在/etc/taos/taos.cfg指定。
    然后重启一下涛思服务。

    启动服务进程: systemctl start taosd
    停止服务进程: systemctl stop taosd
    重启服务进程: systemctl restart taosd
    查看服务状态: systemctl status taosd
    
    • 1
    • 2
    • 3
    • 4

    编译完成后,会在target目录下生成datax.tar.gz文件。
    将datax.tar.gz文件解压到任意目录,例如/home/datax:

    tar -zxvf datax.tar.gz -C /home/
    
    • 1

    进入datax目录,编辑job目录下的job.json文件,配置datax的运行参数。

    安装maven并切换阿里镜像源。不然编译的时候会找不到第三方依赖项。
    修改为国内阿里镜像源,找到/usr/share/maven/conf/settings.xml文件,打开并修改以下:

    <mirror>
        <id>aliyunmavenid>
        <mirrorOf>*mirrorOf>
        <name>阿里云公共仓库name>
        <url>https://maven.aliyun.com/repository/publicurl>
    mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    settings.xml文件可能会显示只读。需要修改下权限再保存它。

    sudo chmod 777 /usr/share/maven/conf/settings.xml
    
    • 1

    打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ 。
    在这里插入图片描述

    结语

    如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
    如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
    如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
    感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

  • 相关阅读:
    倍福PLC实现绝对值编码器原点断电保持---bias的使用
    泛微E8 查询分部总部部门信息
    ssh 远程防止断网神器 - screen 命令
    【面试八股】IP协议八股
    vue input输入框限制输入负号、数字、以及两位小数
    Hutool工具说明和使用步骤
    pinia基本使用介绍
    zynq实现视频动态字符叠加OSD,提供2套工程源码和技术支持
    算法通关村第十关青铜挑战——什么是快速排序
    【PyTorch】torch.gather() 用法
  • 原文地址:https://blog.csdn.net/hhy321/article/details/134350407