[转帖]如何使用 minio 进行 BR 备份
https://tidb.net/blog/ada69456#5.%20%E4%BD%BF%E7%94%A8%20minio%20%E8%BF%9B%E8%A1%8C%20BR%20%E5%A4%87%E4%BB%BD%E7%9A%84%E6%9D%83%E9%99%90%E8%AF%B4%E6%98%8E/5.1%20%E5%88%9B%E5%BB%BA%20bucket%20test-bucket-br-dir
From tidb doc https://docs.pingcap.com/zh/tidb/v5.0/backup-and-restore-storages#scheme
Scheme
TiDB 迁移工具支持以下存储服务:
| 服务 | Scheme | 示例 |
|---|---|---|
| 本地文件系统(分布在各节点上) | local | local:///path/to/dest/ |
| Amazon S3 及其他兼容 S3 的服务 | s3 | s3://bucket-name/prefix/of/dest/ |
| GCS | gcs, gs | gcs://bucket-name/prefix/of/dest/ |
| 不写入任何存储(仅作为基准测试) | noop | noop:// |
其中 local 的模式我们可以直接使用本地挂载的硬盘,也可以使用 nfs。
2. 使用 local 模式存在的问题
From tidb doc:使用 BR 命令行进行备份恢复

目前官方并不建议在 BR 备份恢复中使用 local storage。在实际使用中,local storage 也可能存在一些问题:
通过 BR 备份的数据会分散到每个 TiKV 上
通过 BR 恢复时,需要将每个 TiKV 上的 sst 收集到一起,全量的 sst 文件要复制到每个 TiKV 下
大量的小文件在 server 中复制,很容易造成丢包,任何一个 sst 文件的异常,都可能导致恢复失败
大量小文件的传输时间远远高于一个同体积的大文件传输时间
BR 备份的 sst 文件打包压缩,体积并没有明显减小,压缩与解压时间依然消耗巨大
一般来说,我们建议使用 NFS 网盘,或者直接备份到 S3 上。
当我们使用 NFS 网盘恢复的时候,很有可能因为大量的 server 同时读取 NFS,即便我们使用 ratelimit 进行了限速,也会抛出 i/o timeout 的异常。这是一个比较迷惑的报错,从用户的角度上来看,硬盘的 io 不够最多只应该导致性能问题,而不应该导致功能上不可用。
3. 使用 minio 模拟 S3 的对象存储及 API
S3 的好处一大堆,但不选用 S3 的理由也很简单:对不起,我没有。
对于大部分技术人员来说,IDC 的物理设备虽然也有成本的,但下意识还是认为是免费的。如果真的需要申请购买 S3 的存储,流程审核多半通过不了。为了解决这个问题,我们可以考虑通过 IDC 的设备模拟 S3 的协议,搭建一套对象存储系统。目前比较流行的兼容 S3 协议的文件或对象存储有 ceph 和 minio。简单打个比方,同样是拍照,minio 像手机,ceph 像单反。minio 操作简单,运维成本低,不支持在线动态扩容。ceph 功能强大,支持数千结点,支持动态增减结点,自动平衡分布。据了解,阿里云和华为云都是基于 ceph 做的云存储。但是伴随强大的功能,维护成本高到可怕。我在研究 MySQL + 分布式存储的时候,考虑过 MySQL + ceph 的方案。但是高昂的运维成本使我迟迟不敢上线。一般来说,我更建议由专门的团队来维护 ceph。
对于大部分中小型企业,如果不选择存储上云,那么 minio 是一个不错的选择。麻雀虽小,五脏俱全。或者对于大中型企业的某一个独立的业务,minio 也足够能支撑起业务的要求。minio 不仅可以作为对象存储使用,也可以作为云上对象存储服务的网管,无缝对接到 Amazon S3、MicroSoft Azure。
4. 使用 minio S3 接口进行 BR 备份的方案落地
4.1 环境介绍
4.1.1 操作系统环境
在本例中,使用 CentOS Stream release 8 版本。
[root@r60 ~]# cat /etc/redhat-release
CentOS Stream release 8
[root@r60 ~]# uname -r
4.18.0-294.el8.x86_64
4.1.2 硬件环境及机器分配
| HOSTNAME | IP | COMPONENT | COMMENT |
|---|---|---|---|
| r60 | 192.168.232.60 | TiUP | |
| r61 | 192.168.232.61 | TiDB Cluster 1 [tidb-c1] | 1 * TiDB, 1 * PD, 1 * TiKV |
| r62 | 192.168.232.62 | TiDB Cluster 2 [tidb-c2] | 1 * TiDB, 1 * PD, 1 * TiKV |
| r63 | 192.168.232.63 | minio client | |
| r64 | 192.168.232.64 | minio server | |
| r65 | 192.168.232.65 | minio server |
4.2 搭建 minio 环境
4.2.1 minio 目录
目录结构
[root@r64 ~]# mkdir -p /opt/minio/{data,conf,bin,scripts}
[root@r65 ~]# mkdir -p /opt/minio/{data,conf,bin,scripts}
数据目录
本例中的 minio 集群由 2 台服务器构成(官方推荐集群最小为 4 台服务器),每台服务器上挂在两个磁盘目录,最小的数据挂载点为 4 个。
[root@r64 ~]# mkdir -p /data/minio/{data1,data2}
[root@r65 ~]# mkdir -p /data/minio/{data3,data4}
[root@r64 ~]# ln -s /data/minio/data1 /opt/minio/data/data1
[root@r64 ~]# ln -s /data/minio/data2 /opt/minio/data/data2
[root@r65 ~]# ln -s /data/minio/data3 /opt/minio/data/data3
[root@r65 ~]# ln -s /data/minio/data4 /opt/minio/data/data4
4.2.2 下载 minio server 与 client 执行文件
[root@r64 bin]# wget https://dl.minio.io/server/minio/release/linux-amd64/minio
[root@r64 bin]# wget https://dl.minio.io/client/mc/release/linux-amd64/mc
[root@r64 bin]# chmod +x /opt/minio/bin/*
[root@r64 bin]# scp /opt/minio/bin/* root@r65:/opt/minio/bin
4.2.3 创建 minio 启动脚本
[root@r64 scripts]# cat run_minio.sh
#!/bin/bash
export MINIO_ACCESS_KEY=myminioid
export MINIO_SECRET_KEY=myminiopasswd
/opt/minio/bin/minio server --config-dir /opt/minio/conf \"
http://192.168.232.64/opt/minio/data/data1 http://192.168.232.64/opt/minio/data/data2 \"
http://192.168.232.65/opt/minio/data/data3 http://192.168.232.65/opt/minio/data/data4
[root@r64 scripts]# scp run_minio.sh root@r65:/opt/minio/scripts/
4.2.4 创建 minio 服务文件
[root@r64 ~] cat /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/opt/minio/
ExecStart=/opt/minio/run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
[root@r64 ~] scp /usr/lib/systemd/system/minio.service root@r65: /usr/lib/systemd/system/minio.service
4.2.5 启动 minio 并测试 minio 服务
启动 minio 服务
[root@r64 ~] systemctl daemon-reload && systemctl start minio
[root@r65 ~] systemctl daemon-reload && systemctl start minio
测试 minio 服务
浏览器中输入 http://192.168.232.64:9000 或 http://192.168.232.65:9000


4.2.6 minio 客户端命令测试
在下载了 minio 客户端 mc 的机器上可以进行以下的测试
在 mc 客户端添加主机信息
[root@r63 soft]# ./mc config host add myminio http://192.168.232.65:9000 myminioid myminiopasswd
Added `myminio` successfully.
查看 mc 客户端已经添加的主机信息
[root@r63 soft]# ./mc config host ls
gcs
URL : https://storage.googleapis.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v2
Path : dns
local
URL : http://localhost:9000
AccessKey :
SecretKey :
API :
Path : auto
myminio
URL : http://192.168.232.65:9000
AccessKey : myminioid
SecretKey : myminiopasswd
API : s3v4
Path : auto
play
URL : https://play.min.io
AccessKey : Q3AM3UQ867SPQQA43P2F
SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
API : S3v4
Path : auto
s3
URL : https://s3.amazonaws.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v4
Path : dns
在 minio 中创建 buket
[root@r63 soft]# ./mc mb myminio/test-dir
Bucket created successfully `myminio/test-dir`.
上传文件到 buket 中
[root@r63 soft]# echo 'test-upload' > minio-test-upload
[root@r63 soft]# ./mc cp minio-test-upload myminio/test-dir
minio-test-upload: 12 B / 12 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 909 B/s 0s
下载 buket 中的文件
[root@r63 soft]# ./mc cp myminio/test-dir/minio-test-upload /tmp/
...:9000/test-dir/minio-test-upload: 12 B / 12 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 561 B/s 0s
[root@r63 soft]# cat /tmp/minio-test-upload
test-upload
在 minio 中查看创建的 buket
[root@r63 soft]# ./mc ls myminio
[2021-08-03 22:00:05 CST] 0B test-dir/
[root@r63 soft]# ./mc ls myminio/test-dir
[2021-08-03 22:03:05 CST] 12B minio-test-upload
4.3 创建 TiDB 集群
4.3.1 使用以下的 yaml 文件创建两套 TiDB 集群
其中 tidb-c1 集群 pd,tidb,tikv 混部在 192.168.232.61 上,tidb-c2 集群 pd,tidb,tikv 混部在 192.168.232.62 上。
[root@r60 .tiup]# cat tidb-c1.yaml
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/opt/tidb-c1/"
data_dir: "/opt/tidb-c1/data/"
pd_servers:
- host: 192.168.232.61
ssh_port: 22
name: "pd-2"
client_port: 12379
peer_port: 12380
deploy_dir: "/opt/tidb-c1/pd-12379"
data_dir: "/opt/tidb-c1/data/pd-12379"
log_dir: "/opt/tidb-c1/log/pd-12379"
config: {}
tidb_servers:
- host: 192.168.232.61
ssh_port: 22
port: 14000
status_port: 12080
deploy_dir: "/opt/tidb-c1/tidb-14000"
log_dir: "/opt/tidb-c1/log/tidb-14000"
config: {}
tikv_servers:
- host: 192.168.232.61
ssh_port: 22
port: 12160
status_port: 12180
deploy_dir: "/opt/tidb-c1/tikv-12160"
data_dir: "/opt/tidb-c1/data/tikv-12160"
log_dir: "/opt/tidb-c1/log/tikv-12160"
config: {}
4.3.2 检查 TiDB 集群
[root@r60 .tiup]# tiup cluster list
Starting component `cluster`: /root/.tiup/components/cluster/v1.5.3/tiup-cluster list
Name User Version Path PrivateKey
---- ---- ------- ---- ----------
tidb-c1 tidb v5.1.1 /root/.tiup/storage/cluster/clusters/tidb-c1 /root/.tiup/storage/cluster/clusters/tidb-c1/ssh/id_rsa
tidb-c2 tidb v5.1.1 /root/.tiup/storage/cluster/clusters/tidb-c2 /root/.tiup/storage/cluster/clusters/tidb-c2/ssh/id_rsa
4.3.3 tidb-c1 集群上生成用于备份的数据
[root@r60 ~]# mysql -uroot -P14000 -hr61 -e "create database br-test"
[root@r60 ~]# mysql -uroot -P14000 -hr61 -e "create table brtest.t1(id int, name varchar(20))"
[root@r60 ~]# for i in `seq 1 10000`; do mysql -uroot -P14000 -hr31 -e "insert into brtest.t1 values($i, 'AAAAA')"; done;
4.4 使用 BR 将数据备份到 minio 上
相关文档参考 使用 BR 命令行进行备份恢复
[tidb@r61 tmp]$ export AWS_ACCESS_KEY_ID=myminioid
[tidb@r61 tmp]$ export AWS_SECRET_ACCESS_KEY=myminiopasswd
[tidb@r61 tmp]$ ./br backup full --pd "r61:12379" --storage "s3://br-dir" --send-credentials-to-tikv=true --s3.endpoint "http://192.168.232.65:9000" --log- file backupfull.log
Detail BR log in backupfull.log
Full backup <-------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <----------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/08/03 20:01:37.304 +08:00] [INFO] [collector.go:66] ["Full backup success summary"] [total-ranges=21] [ranges-succeed=21] [ranges-failed=0] [backup-c hecksum=16.098966ms] [backup-fast-checksum=2.284638ms] [backup-total-ranges=51] [backup-total-regions=51] [total-take=713.02994ms] [total-kv=12773] [total- kv-size=539.7kB] [average-speed=976.9kB/s] ["backup data size(after compressed)"=158kB] [BackupTS=426768360174256131]
4.5 使用 BR 从 minio 恢复数据
[tidb@r62 tmp]$ export AWS_ACCESS_KEY_ID=myminioid
[tidb@r62 tmp]$ export AWS_SECRET_ACCESS_KEY=myminiopasswd
[tidb@r62 tmp]$ ./br restore full --pd "r62:12379" --storage "s3://br-dir" --send-credentials-to-tikv=true --s3.endpoint "http://192.168.232.65:9000" --log -file restorefull.log
Detail BR log in restorefull.log
Full restore <------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/08/03 20:27:27.013 +08:00] [INFO] [collector.go:66] ["Full restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-reg ion=26.225236ms] [restore-checksum=6.044077ms] [restore-ranges=1] [total-take=1.727646683s] ["restore data size(after decompressed)"=93.05kB] [total-kv=100 00] [total-kv-size=379.9kB] [average-speed=7.09MB/s]
检查 tidb-c2 集群中的数据
[root@r60 ~]# mysql -uroot -P14000 -hr62 -e "select count(*) from brtest.t1"
+----------+
| count(*) |
+----------+
| 10000 |
+----------+
4.6 参数及变量对应说明
以 BR 备份的命令为例
./br backup full --pd "r61:12379" \"
--storage "s3://br-dir" \"
--send-credentials-to-tikv=true \"
--s3.endpoint "http://192.168.232.65:9000" \"
--log-file backupfull.log
其中 --storage “s3://br-dir” 表示使用 S3 存储。
br-dir 使我们在 myminio 下创建的 buket
如果 --storage 后面的参数值为 “s3://myminio/br-dir” 会有以下报错
[root@r63 soft]# ./mc mb myminio/test-dir-2
Bucket created successfully `myminio/test-dir-2`.
[tidb@r61 tmp]$ export AWS_ACCESS_KEY_ID=myminioid
[tidb@r61 tmp]$ export AWS_SECRET_ACCESS_KEY=myminiopasswd
[tidb@r61 tmp]$ ./br backup full --pd "r61:12379" --storage "s3://myminio/test-dir-2" --send-credentials-to-tikv=true --s3.endpoint "http://192.168.232.65:9000" --log-file backupfull.log
Detail BR log in backupfull.log
[2021/08/03 22:36:49.367 +08:00] [INFO] [collector.go:66] ["Full backup failed summary"] [total-ranges=0] [ranges-succeed=0] [ranges-failed=0]
Error: Bucket myminio is not accessible: NotFound: Not Found
status code: 404, request id: 1697D2A802D68D43, host id: : [BR:ExternalStorage:ErrStorageInvalidConfig]invalid external storage config
[tidb@r61 tmp]$ ./br backup full --pd "r61:12379" --storage "s3://test-dir-2" --send-credentials-to-tikv=true --s3.endpoint "http://192.168.232.65:9000" --log-file backupfull.log
Detail BR log in backupfull.log
Full backup <----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/08/03 22:38:04.105 +08:00] [INFO] [collector.go:66] ["Full backup success summary"] [total-ranges=21] [ranges-succeed=21] [ranges-failed=0] [backup-checksum=10.686351ms] [backup-fast-checksum=2.559501ms] [backup-total-ranges=51] [backup-total-regions=51] [total-take=648.760226ms] [total-kv-size=539.7kB] [average-speed=1.051MB/s] ["backup data size(after compressed)"=158kB] [BackupTS=426770820880400385] [total-kv=12773]
5. 使用 minio 进行 BR 备份的权限说明
minio 默认为我们提供了五中权限:
consoleAdmin
diagnostics
readonly
Readwrite
writeonly
在大多数情况下,这些权限不足以满足复杂的业务需求。在上面的实验中,我们使用了 admin 用户 myminioid。在实际的业务中,我们要针对不同的角色分配不同的用户与 quota。
比如说备份与恢复的场景。我们可以定义 backup-user 与 restore-user。对于 backup-user,我们可以赋予某一个 bucket 的 readwrite 权限。而对于 restore-user,我们赋予 readonly 权限。
在下面的例子中,我们完成了以下的操作
创建了用于 BR 备份回复的 bucket test-bucket-br-dir
针对于备份操作
创建针对 test-bucket-br-dir 的 readwrite 权限 policy-readwrite-brbucket
创建 user test-user-br-backup
给 test-use-br-backupr 赋予 policy-readwrite-brbucket 权限
针对于恢复操作
创建针对 test-bucket-br-dir 的 readonly 权限 policy-readonly-brbucket
创建 user test-user-br-restore
给 test-user -br-restore赋予 policy-readonly-brbucket 权限
5.1 创建 bucket test-bucket-br-dir
[root@r63 soft]# export MINIO_ACCESS_KEY=myminioid
[root@r63 soft]# export MINIO_SECRET_KEY=myminiopasswd
[root@r63 soft]# ./mc mb myminio/test-bucket-br-dir
Bucket created successfully `myminio/test-bucket-br-dir`.
5.2 针对于备份操作,创建一下的权限与用户
5.2.1 创建针对 test-bucket-br-dir 的 readwrite 权限 policy-readwrite-brbucket
模仿 readwrite 权限,我们可以修改只针对与 test-bucket-br-dir,在本例中,我们可以将 “arn:aws:s3:::*” 中的通配符 * 替换成指定的 bucket test-bucket-br-dir
[root@r63 soft]# export MINIO_ACCESS_KEY=myminioid
[root@r63 soft]# export MINIO_SECRET_KEY=myminiopasswd
[root@r63 soft]# ./mc admin policy info myminio readwrite
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
[root@r63 soft]# cat policy-readwrite-br-bucket.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::test-bucket-br-dir"
]
}
]
}
通过 policy-readwrite-br-bucket.json 文件,我们可以创建 policy-readwrite-br-bucket 权限
[root@r63 soft]# export MINIO_ACCESS_KEY=myminioid
[root@r63 soft]# export MINIO_SECRET_KEY=myminiopasswd
[root@r63 soft]# ./mc admin policy add myminio policy-readwrite-br-bucket policy-readwrite-br-bucket.json
Added policy `policy-readwrite-br-bucket` successfully.
[root@r63 soft]# ./mc admin policy info myminio policy-readwrite-br-bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::test-bucket-br-dir"
]
}
]
}
5.2.2 创建 user test-user-br-backup
[root@r63 soft]# ./mc admin user add myminio test-user-br-backup test12345678
Added user `test-user-br-backup` successfully.
6.2.3 给 test-user-br-backup 赋予 policy-readwrite-brbucket 权限
[root@r63 soft]# ./mc admin policy set myminio policy-readwrite-br-bucket user=test-user-br-backup
Policy `policy-readwrite-br-bucket` is set on user `test-user-br-backup`
[转帖]如何使用 minio 进行 BR 备份的更多相关文章
- [转帖]tar高级教程:增量备份、定时备份、网络备份
tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...
- FC8下备份linux系统
linux系统可以使用tar来备份.<br><br> 我在FC8上装好了totem, mplayer, audacious, 并搞定了wifi后,我觉得该备份一下FC8系统.& ...
- PHP备份数据库的原理和方法 57
1.PHP备份数据库的原理查找所有表--查找所有字段(需要列出所有字段名, 字段类型等相关信 息)---查找所有数据(读取数据出来注意 特殊符号的转换 addslashes ())--生成SQL(把数 ...
- 利用Velero对K8S备份还原与集群迁移实战
一.简介 Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份.恢复和迁移 Kubernetes 集群资源 ...
- 自动化部署之jenkins及简介
一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...
- 了解ORACLE培训OCA-OCP-OCM课程表
了解ORACLE培训OCA-OCP-OCM课程表考试号: OCA 1Z0-007$125 Oracle Database 10g:SQL Fundamentals 本课程培养学生必要的SQ ...
- 自动化部署 jenkins 插件简介
一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...
- linux 搭建jenkins
一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...
- 使用k8s && minio 进行 postgres 数据库自动备份
通过k8s 的定时任务job,我们可以方便的进行定时任务应用的开发,通过minio s3 兼容的cloud native 存储 我们可以方便的通过http 请求进行数据文件的备份,以下简单演示下如 ...
- [转帖]PG的简单备份恢复 找时间进行测试
转帖PG的简单使用 https://blog.csdn.net/lk_db/article/details/77971634 一: 纯文件格式的脚本: 示例:1. 只导出postgres数据库的数据, ...
随机推荐
- JavaScript异步编程3——Promise的链式使用
目录 概述 详论 1️⃣回调地狱 2️⃣Promise实现 参考 概述 在上一篇文章<JavaScript异步编程2--结合XMLHttpRequest使用Promise>中,简要介绍了A ...
- react路由权限v6
方法 1.模拟vue的路由拦截(未尝试) 2.进入页面拦截(模拟后台管理系统) route v6常用属性 页面梳理 路由表 公共路由 权限路由 layout(+权限判定) 登录 页面布局 路由表 点击 ...
- Python图像处理丨图像的灰度线性变换
摘要:本文主要讲解灰度线性变换. 本文分享自华为云社区<[Python图像处理] 十五.图像的灰度线性变换>,作者:eastmount. 一.图像灰度线性变换原理 图像的灰度线性变换是通过 ...
- 治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 某企业实时数仓团队通过数据收集.整合.计算和存储构建实时数据仓库,为企业提供快速.准确.可靠的实时数据分析和 ...
- 数据飞轮拆解车企数据驱动三板斧:数据分析、市场画像、A/B 实验
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台(VeDI)2023 数据飞轮汽车行业研讨会在上海举办,活动聚焦汽车行业数字化转型痛点,从字 ...
- 大数据-业务数据采集-FlinkCDC DebeziumSourceFunction via the 'serverTimezone' configuration property
Caused by: org.apache.kafka.connect.errors.ConnectException: Error reading MySQL variables: The serv ...
- 【软件安装记录篇】本地虚拟机Centos7快速安装MySQL
安装 采用Installing MySQL on Linux Using the MySQL Yum Repository的方式进行安装. 1. 首先下载服务器版本对应的rpm文件,下载地址:[链接] ...
- Linux CentOS 8 安装DHCP服务
DHCP 如果虚拟机没有 /etc/dhcp/dhcpd.conf 文件,这可能是因为 DHCP 服务器软件包尚未安装,或者安装后配置文件未创建. 要创建 DHCP 服务器配置文件 dhcpd.con ...
- 它来了!真正的 python 多线程
哈喽大家好,我是咸鱼 几天前,IBM 工程师 Martin Heinz 发文表示 python 3.12 版本回引入"Per-Interpreter GIL",有了这个 Per-I ...
- 给科研人的 ML 开源发布工具包
什么是开源发布工具包? 恭喜你的论文成功发表,这是一个巨大的成就!你的研究成果将为学界做出贡献. 其实除了发表论文之外,你还可以通过发布研究的其他部分,如代码.数据集.模型等,来增加研究的可见度和采用 ...