go---bytes.Split

本文介绍了一种使用Go语言处理CSV数据的方法,通过将原始数据转换为字节切片,再将其分割成行和列,实现了对CSV数据的有效解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
        "fmt"
        "bytes"
)

func main() {
        data := []byte("1,2\n3,4\n5,6\n7,89")
        lines := bytes.Split(data, []byte{10})
        line := bytes.Split(lines[0], []byte(","))

        fmt.Println(data)
        fmt.Println(lines)
        fmt.Println(line)

}

结果

[49 44 50 10 51 44 52 10 53 44 54 10 55 44 56 57]
[[49 44 50] [51 44 52] [53 44 54] [55 44 56 57]]
[[49] [50]]
tidb pd启动报错日志:[2025/08/07 10:09:05.941 +08:00] [INFO] [serve.go:103] ["ready to serve client requests"] [2025/08/07 10:09:05.942 +08:00] [INFO] [health.go:61] ["grpc service status changed"] [service=] [status=SERVING] [2025/08/07 10:09:05.943 +08:00] [INFO] [registry.go:69] ["gRPC service already registered"] [prefix=pd-14.22.74.132-2379] [service-name=MetaStorage] [2025/08/07 10:09:05.943 +08:00] [INFO] [registry.go:69] ["gRPC service already registered"] [prefix=pd-14.22.74.132-2379] [service-name=ResourceManager] [2025/08/07 10:09:05.943 +08:00] [INFO] [serve.go:187] ["serving client traffic insecurely; this is strongly discouraged!"] [traffic=grpc+http] [address="[::]:2379"] [2025/08/07 10:09:12.951 +08:00] [ERROR] [etcdutil.go:94] ["failed to get cluster from remote"] [error="[PD:etcd:ErrEtcdGetCluster]etcd get cluster from remote peer failed: coul [2025/08/07 10:09:22.954 +08:00] [ERROR] [health_checker.go:455] ["failed to list members"] [source=server-etcd-client] [error="[PD:etcd:ErrEtcdMemberList]rpc error: code = Deadext deadline exceeded"] [2025/08/07 10:09:22.954 +08:00] [WARN] [health_checker.go:351] ["no available etcd endpoint returned by etcd cluster"] [source=server-etcd-client] [2025/08/07 10:09:22.954 +08:00] [FATAL] [main.go:289] ["run server failed"] [error="[PD:etcd:ErrEtcdMemberList]rpc error: code = DeadlineExceeded desc = context deadline exceedn\t/workspace/source/pd/cmd/pd-server/main.go:289\nmain.createServerWrapper\n\t/workspace/source/pd/cmd/pd-server/main.go:194\ngithub.com/spf13/cobra.(*Command).execute\n\t/rootxecuteC\n\t/root/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1115\ngithub.com/spf13/cobra.(*Command).Execute\n\t/root/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go/go/src/runtime/proc.go:272"] [2025/08/07 10:09:38.159 +08:00] [INFO] [meminfo.go:213] ["use physical memory hook"] [cgroupMemorySize=9223372036854771712] [physicalMemorySize=66998362112] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:98] ["Welcome to Placement Driver (PD)"] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:99] [PD] [release-version=v8.5.1] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:100] [PD] [edition=Community] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:101] [PD] [git-hash=5036cc277fc8c0e7fa1219265ae407de80b950b7] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:102] [PD] [git-branch=HEAD] [2025/08/07 10:09:38.159 +08:00] [INFO] [versioninfo.go:103] [PD] [utc-build-time="2025-01-10 06:52:08"] [2025/08/07 10:09:38.159 +08:00] [INFO] [metricutil.go:86] ["disable Prometheus push client"] [2025/08/07 10:09:38.159 +08:00] [INFO] [server.go:250] ["PD config"] [config="{\"client-urls\":\"http://0.0.0.0:2379\",\"peer-urls\":\"http://0.0.0.0:2380\",\"advertise-client-me\":\"pd-14.22.74.132-2379\",\"data-dir\":\"/u01/tidb/tidb-data/pd-2379\",\"force-new-cluster\":false,\"enable-grpc-gateway\":true,\"initial-cluster\":\"pd-14.22.74.132-2379=htster\",\"join\":\"\",\"lease\":3,\"log\":{\"level\":\"info\",\"format\":\"text\",\"disable-timestamp\":false,\"file\":{\"filename\":\"/u01/tidb/tidb-deploy/pd-2379/log/pd.log\",se,\"disable-stacktrace\":false,\"disable-error-verbose\":true,\"sampling\":null,\"error-output-path\":\"\"},\"max-concurrent-tso-proxy-streamings\":5000,\"tso-proxy-recv-from-cms\",\"enable-local-tso\":false,\"metric\":{\"job\":\"pd-14.22.74.132-2379\",\"address\":\"\",\"interval\":\"15s\"},\"schedule\":{\"max-snapshot-count\":64,\"max-pending-peer-co1h0m0s\",\"switch-witness-interval\":\"1h0m0s\",\"enable-one-way-merge\":\"false\",\"enable-cross-table-merge\":\"true\",\"patrol-region-interval\":\"10ms\",\"max-store-down-timchedule-policy\":\"count\",\"region-schedule-limit\":2048,\"witness-schedule-limit\":4,\"replica-schedule-limit\":64,\"merge-schedule-limit\":8,\"hot-region-schedule-limit\":4,\-ratio\":0.8,\"high-space-ratio\":0.7,\"region-score-formula-version\":\"v2\",\"scheduler-max-waiting-operator\":5,\"enable-remove-down-replica\":\"true\",\"enable-replace-offlirue\",\"enable-location-replacement\":\"true\",\"enable-debug-metrics\":\"false\",\"enable-joint-consensus\":\"true\",\"enable-tikv-split-region\":\"true\",\"enable-heartbeat-br[{\"type\":\"balance-region\",\"args\":null,\"disable\":false,\"args-payload\":\"\"},{\"type\":\"balance-leader\",\"args\":null,\"disable\":false,\"args-payload\":\"\"},{\"type\w-store\",\"args\":null,\"disable\":false,\"args-payload\":\"\"}],\"hot-regions-write-interval\":\"10m0s\",\"hot-regions-reserved-days\":7,\"max-movable-hot-peer-size\":512,\"enratio-threshold\":0.3,\"store-limit-version\":\"v1\",\"patrol-region-worker-count\":1},\"replication\":{\"max-replicas\":3,\"location-labels\":\"host\",\"strictly-match-label\":olation-level\":\"\"},\"pd-server\":{\"use-region-storage\":\"true\",\"max-gap-reset-ts\":\"24h0m0s\",\"key-type\":\"table\",\"runtime-services\":\"\",\"metric-storage\":\"\",\"\":\"1s\",\"server-memory-limit\":0,\"server-memory-limit-gc-trigger\":0.7,\"enable-gogc-tuner\":\"false\",\"gc-tuner-threshold\":0.6,\"block-safe-point-v1\":\"false\"},\"cluste:\"periodic\",\"auto-compaction-retention-v2\":\"1h\",\"tick-interval\":\"500ms\",\"election-interval\":\"3s\",\"enable-prevote\":true,\"max-request-bytes\":157286400,\"securityABytes\":null,\"SSLCertBytes\":null,\"SSLKEYBytes\":null,\"redact-info-log\":false,\"encryption\":{\"data-encryption-method\":\"plaintext\",\"data-key-rotation-period\":\"168h0m,\"path\":\"\"}}},\"label-property\":null,\"dashboard\":{\"tidb-cacert-path\":\"\",\"tidb-cert-path\":\"\",\"tidb-key-path\":\"\",\"public-path-prefix\":\"\",\"internal-proxy\":alse},\"replication-mode\":{\"replication-mode\":\"majority\",\"dr-auto-sync\":{\"label-key\":\"\",\"primary\":\"\",\"dr\":\"\",\"primary-replicas\":0,\"dr-replicas\":0,\"wait-skeyspace\":{\"pre-alloc\":null,\"wait-region-split\":true,\"wait-region-split-timeout\":\"30s\",\"check-region-split-interval\":\"50ms\"},\"micro-service\":{\"enable-scheduling-ration\":\"30s\",\"ltb-token-rpc-max-delay\":\"1s\",\"request-unit\":{\"read-base-cost\":0.125,\"read-per-batch-base-cost\":0.5,\"read-cost-per-byte\":0.0000152587890625,\"writeu-ms-cost\":0.3333333333333333},\"enable-controller-trace-log\":\"false\"}}"] [2025/08/07 10:09:38.165 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/pd/api/v1] [2025/08/07 10:09:38.165 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/pd/api/v2/] [2025/08/07 10:09:38.165 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/autoscaling] [2025/08/07 10:09:38.165 +08:00] [INFO] [distro.go:51] ["using distribution strings"] [strings={}] [2025/08/07 10:09:38.166 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/dashboard/api/] [2025/08/07 10:09:38.166 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/dashboard/] [2025/08/07 10:09:38.166 +08:00] [INFO] [registry.go:97] ["restful API service registered successfully"] [prefix=pd-14.22.74.132-2379] [service-name=MetaStorage] [2025/08/07 10:09:38.166 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/resource-manager/api/v1/] [2025/08/07 10:09:38.166 +08:00] [INFO] [registry.go:97] ["restful API service registered successfully"] [prefix=pd-14.22.74.132-2379] [service-name=ResourceManager] [2025/08/07 10:09:38.166 +08:00] [WARN] [config.go:687] ["Running http and grpc server on single port. This is not recommended for production."] [2025/08/07 10:09:38.166 +08:00] [INFO] [etcd.go:128] ["configuring peer listeners"] [listen-peer-urls="[http://0.0.0.0:2380]"] [2025/08/07 10:09:38.166 +08:00] [INFO] [systimemon.go:30] ["start system time monitor"] [2025/08/07 10:09:38.167 +08:00] [INFO] [etcd.go:136] ["configuring client listeners"] [listen-client-urls="[http://0.0.0.0:2379]"] [2025/08/07 10:09:38.167 +08:00] [INFO] [etcd.go:620] ["pprof is enabled"] [path=/debug/pprof] [2025/08/07 10:09:38.167 +08:00] [INFO] [etcd.go:310] ["starting an etcd server"] [etcd-version=3.5.15] [git-sha="Not provided (use ./build instead of go build)"] [go-version=goed=true] [name=pd-14.22.74.132-2379] [data-dir=/u01/tidb/tidb-data/pd-2379] [wal-dir=] [wal-dir-dedicated=] [member-dir=/u01/tidb/tidb-data/pd-2379/member] [force-new-cluster=fanapshot-count=100000] [max-wals=5] [max-snapshots=5] [snapshot-catchup-entries=5000] [initial-advertise-peer-urls="[http://14.22.74.132:2380]"] [listen-peer-urls="[http://0.0.0..0.0.0:2379]"] [listen-metrics-urls="[]"] [cors="[*]"] [host-whitelist="[*]"] [initial-cluster=] [initial-cluster-state=new] [initial-cluster-token=] [quota-backend-bytes=858993ial-corrupt-check=false] [corrupt-check-time-interval=0s] [compact-check-time-enabled=false] [compact-check-time-interval=1m0s] [auto-compaction-mode=periodic] [auto-compaction-grade-check-interval=5s] [2025/08/07 10:09:38.167 +08:00] [WARN] [server.go:344] ["exceeded recommended request limit"] [max-request-bytes=157286400] [max-request-size="157 MB"] [recommended-request-byt [2025/08/07 10:09:38.167 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379\" exist, but the permission is \"drwxrwxrwx\".data"] [2025/08/07 10:09:38.167 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379/member/snap\" exist, but the permission is \"dcess to the data"] [2025/08/07 10:09:38.169 +08:00] [INFO] [backend.go:81] ["opened backend db"] [path=/u01/tidb/tidb-data/pd-2379/member/snap/db] [took=1.618732ms] [2025/08/07 10:09:38.173 +08:00] [INFO] [server.go:532] ["No snapshot found. Recovering WAL from scratch!"] [2025/08/07 10:09:38.179 +08:00] [INFO] [raft.go:530] ["restarting local member"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [commit-index=4680] [2025/08/07 10:09:38.181 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 switched to configuration voters=()"] [2025/08/07 10:09:38.181 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 became follower at term 2340"] [2025/08/07 10:09:38.181 +08:00] [INFO] [raft] [zap_raft.go:77] ["newRaft 9f2c47b40885d021 [peers: [], term: 2340, commit: 4680, applied: 0, lastindex: 4680, lastterm: 2340]"] [2025/08/07 10:09:38.181 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379/member\" exist, but the permission is \"drwxrwto the data"] [2025/08/07 10:09:38.184 +08:00] [WARN] [store.go:1241] ["simple token is not cryptographically signed"] [2025/08/07 10:09:38.186 +08:00] [INFO] [kvstore.go:418] ["kvstore restored"] [current-rev=1] [2025/08/07 10:09:38.188 +08:00] [INFO] [quota.go:117] ["enabled backend quota"] [quota-name=v3-applier] [quota-size-bytes=8589934592] [quota-size="8.6 GB"] [2025/08/07 10:09:38.190 +08:00] [INFO] [server.go:867] ["starting etcd server"] [local-member-id=9f2c47b40885d021] [local-server-version=3.5.15] [cluster-version=to_be_decided] [2025/08/07 10:09:38.190 +08:00] [INFO] [server.go:767] ["starting initial election tick advance"] [election-ticks=6] [2025/08/07 10:09:38.190 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/snap] [suffix=snap.db] [max=5] [interval=30s] [2025/08/07 10:09:38.190 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/snap] [suffix=snap] [max=5] [interval=30s] [2025/08/07 10:09:38.190 +08:00] [INFO] [health.go:61] ["grpc service status changed"] [service=] [status=SERVING] [2025/08/07 10:09:38.190 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/wal] [suffix=wal] [max=5] [interval=30s] [2025/08/07 10:09:38.191 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 switched to configuration voters=(11469621189568483361)"] [2025/08/07 10:09:38.191 +08:00] [INFO] [cluster.go:421] ["added member"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [added-peer-id=9f2c47b40885d021] [adde [2025/08/07 10:09:38.191 +08:00] [INFO] [cluster.go:584] ["set initial cluster version"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [cluster-version=3.5] [2025/08/07 10:09:38.191 +08:00] [INFO] [capability.go:75] ["enabled capabilities for version"] [cluster-version=3.5] [2025/08/07 10:09:38.193 +08:00] [INFO] [etcd.go:279] ["now serving peer/client/metrics"] [local-member-id=9f2c47b40885d021] [initial-advertise-peer-urls="[http://14.22.74.132:22:2379]"] [listen-client-urls="[http://0.0.0.0:2379]"] [listen-metrics-urls="[]"] [2025/08/07 10:09:38.193 +08:00] [INFO] [etcd.go:599] ["serving peer traffic"] [address="[::]:2380"] [2025/08/07 10:09:38.193 +08:00] [INFO] [etcd.go:571] [cmux::serve] [address="[::]:2380"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 is starting a new election at term 2340"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 became pre-candidate at term 2340"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 received MsgPreVoteResp from 9f2c47b40885d021 at term 2340"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 became candidate at term 2341"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 received MsgVoteResp from 9f2c47b40885d021 at term 2341"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 became leader at term 2341"] [2025/08/07 10:09:43.183 +08:00] [INFO] [raft] [zap_raft.go:77] ["raft.node: 9f2c47b40885d021 elected leader 9f2c47b40885d021 at term 2341"] [2025/08/07 10:09:43.186 +08:00] [INFO] [server.go:2118] ["published local member to cluster through raft"] [local-member-id=9f2c47b40885d021] [local-member-attributes="{Name:pd0885d021/attributes] [cluster-id=668837b4654a6c36] [publish-timeout=11s] [2025/08/07 10:09:43.186 +08:00] [INFO] [serve.go:103] ["ready to serve client requests"] [2025/08/07 10:09:43.186 +08:00] [INFO] [health.go:61] ["grpc service status changed"] [service=] [status=SERVING] [2025/08/07 10:09:43.187 +08:00] [INFO] [registry.go:69] ["gRPC service already registered"] [prefix=pd-14.22.74.132-2379] [service-name=MetaStorage] [2025/08/07 10:09:43.187 +08:00] [INFO] [registry.go:69] ["gRPC service already registered"] [prefix=pd-14.22.74.132-2379] [service-name=ResourceManager] [2025/08/07 10:09:43.187 +08:00] [INFO] [serve.go:187] ["serving client traffic insecurely; this is strongly discouraged!"] [traffic=grpc+http] [address="[::]:2379"] [2025/08/07 10:09:48.194 +08:00] [ERROR] [etcdutil.go:94] ["failed to get cluster from remote"] [error="[PD:etcd:ErrEtcdGetCluster]etcd get cluster from remote peer failed: coul [2025/08/07 10:09:58.196 +08:00] [ERROR] [health_checker.go:455] ["failed to list members"] [source=server-etcd-client] [error="[PD:etcd:ErrEtcdMemberList]rpc error: code = Deadext deadline exceeded"] [2025/08/07 10:09:58.196 +08:00] [WARN] [health_checker.go:351] ["no available etcd endpoint returned by etcd cluster"] [source=server-etcd-client] [2025/08/07 10:09:58.196 +08:00] [ERROR] [health_checker.go:455] ["failed to list members"] [source=election-etcd-client] [error="[PD:etcd:ErrEtcdMemberList]rpc error: code = Dentext deadline exceeded"] [2025/08/07 10:09:58.196 +08:00] [WARN] [health_checker.go:351] ["no available etcd endpoint returned by etcd cluster"] [source=election-etcd-client] [2025/08/07 10:09:58.196 +08:00] [FATAL] [main.go:289] ["run server failed"] [error="[PD:etcd:ErrEtcdMemberList]rpc error: code = DeadlineExceeded desc = context deadline exceedn\t/workspace/source/pd/cmd/pd-server/main.go:289\nmain.createServerWrapper\n\t/workspace/source/pd/cmd/pd-server/main.go:194\ngithub.com/spf13/cobra.(*Command).execute\n\t/rootxecuteC\n\t/root/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1115\ngithub.com/spf13/cobra.(*Command).Execute\n\t/root/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go/go/src/runtime/proc.go:272"] [2025/08/07 10:10:13.404 +08:00] [INFO] [meminfo.go:213] ["use physical memory hook"] [cgroupMemorySize=9223372036854771712] [physicalMemorySize=66998362112] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:98] ["Welcome to Placement Driver (PD)"] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:99] [PD] [release-version=v8.5.1] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:100] [PD] [edition=Community] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:101] [PD] [git-hash=5036cc277fc8c0e7fa1219265ae407de80b950b7] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:102] [PD] [git-branch=HEAD] [2025/08/07 10:10:13.404 +08:00] [INFO] [versioninfo.go:103] [PD] [utc-build-time="2025-01-10 06:52:08"] [2025/08/07 10:10:13.404 +08:00] [INFO] [metricutil.go:86] ["disable Prometheus push client"] [2025/08/07 10:10:13.404 +08:00] [INFO] [server.go:250] ["PD config"] [config="{\"client-urls\":\"http://0.0.0.0:2379\",\"peer-urls\":\"http://0.0.0.0:2380\",\"advertise-client-me\":\"pd-14.22.74.132-2379\",\"data-dir\":\"/u01/tidb/tidb-data/pd-2379\",\"force-new-cluster\":false,\"enable-grpc-gateway\":true,\"initial-cluster\":\"pd-14.22.74.132-2379=htster\",\"join\":\"\",\"lease\":3,\"log\":{\"level\":\"info\",\"format\":\"text\",\"disable-timestamp\":false,\"file\":{\"filename\":\"/u01/tidb/tidb-deploy/pd-2379/log/pd.log\",se,\"disable-stacktrace\":false,\"disable-error-verbose\":true,\"sampling\":null,\"error-output-path\":\"\"},\"max-concurrent-tso-proxy-streamings\":5000,\"tso-proxy-recv-from-cms\",\"enable-local-tso\":false,\"metric\":{\"job\":\"pd-14.22.74.132-2379\",\"address\":\"\",\"interval\":\"15s\"},\"schedule\":{\"max-snapshot-count\":64,\"max-pending-peer-co1h0m0s\",\"switch-witness-interval\":\"1h0m0s\",\"enable-one-way-merge\":\"false\",\"enable-cross-table-merge\":\"true\",\"patrol-region-interval\":\"10ms\",\"max-store-down-timchedule-policy\":\"count\",\"region-schedule-limit\":2048,\"witness-schedule-limit\":4,\"replica-schedule-limit\":64,\"merge-schedule-limit\":8,\"hot-region-schedule-limit\":4,\-ratio\":0.8,\"high-space-ratio\":0.7,\"region-score-formula-version\":\"v2\",\"scheduler-max-waiting-operator\":5,\"enable-remove-down-replica\":\"true\",\"enable-replace-offlirue\",\"enable-location-replacement\":\"true\",\"enable-debug-metrics\":\"false\",\"enable-joint-consensus\":\"true\",\"enable-tikv-split-region\":\"true\",\"enable-heartbeat-br[{\"type\":\"balance-region\",\"args\":null,\"disable\":false,\"args-payload\":\"\"},{\"type\":\"balance-leader\",\"args\":null,\"disable\":false,\"args-payload\":\"\"},{\"type\w-store\",\"args\":null,\"disable\":false,\"args-payload\":\"\"}],\"hot-regions-write-interval\":\"10m0s\",\"hot-regions-reserved-days\":7,\"max-movable-hot-peer-size\":512,\"enratio-threshold\":0.3,\"store-limit-version\":\"v1\",\"patrol-region-worker-count\":1},\"replication\":{\"max-replicas\":3,\"location-labels\":\"host\",\"strictly-match-label\":olation-level\":\"\"},\"pd-server\":{\"use-region-storage\":\"true\",\"max-gap-reset-ts\":\"24h0m0s\",\"key-type\":\"table\",\"runtime-services\":\"\",\"metric-storage\":\"\",\"\":\"1s\",\"server-memory-limit\":0,\"server-memory-limit-gc-trigger\":0.7,\"enable-gogc-tuner\":\"false\",\"gc-tuner-threshold\":0.6,\"block-safe-point-v1\":\"false\"},\"cluste:\"periodic\",\"auto-compaction-retention-v2\":\"1h\",\"tick-interval\":\"500ms\",\"election-interval\":\"3s\",\"enable-prevote\":true,\"max-request-bytes\":157286400,\"securityABytes\":null,\"SSLCertBytes\":null,\"SSLKEYBytes\":null,\"redact-info-log\":false,\"encryption\":{\"data-encryption-method\":\"plaintext\",\"data-key-rotation-period\":\"168h0m,\"path\":\"\"}}},\"label-property\":null,\"dashboard\":{\"tidb-cacert-path\":\"\",\"tidb-cert-path\":\"\",\"tidb-key-path\":\"\",\"public-path-prefix\":\"\",\"internal-proxy\":alse},\"replication-mode\":{\"replication-mode\":\"majority\",\"dr-auto-sync\":{\"label-key\":\"\",\"primary\":\"\",\"dr\":\"\",\"primary-replicas\":0,\"dr-replicas\":0,\"wait-skeyspace\":{\"pre-alloc\":null,\"wait-region-split\":true,\"wait-region-split-timeout\":\"30s\",\"check-region-split-interval\":\"50ms\"},\"micro-service\":{\"enable-scheduling-ration\":\"30s\",\"ltb-token-rpc-max-delay\":\"1s\",\"request-unit\":{\"read-base-cost\":0.125,\"read-per-batch-base-cost\":0.5,\"read-cost-per-byte\":0.0000152587890625,\"writeu-ms-cost\":0.3333333333333333},\"enable-controller-trace-log\":\"false\"}}"] [2025/08/07 10:10:13.410 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/pd/api/v1] [2025/08/07 10:10:13.410 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/pd/api/v2/] [2025/08/07 10:10:13.411 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/autoscaling] [2025/08/07 10:10:13.411 +08:00] [INFO] [distro.go:51] ["using distribution strings"] [strings={}] [2025/08/07 10:10:13.412 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/dashboard/api/] [2025/08/07 10:10:13.412 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/dashboard/] [2025/08/07 10:10:13.412 +08:00] [INFO] [registry.go:97] ["restful API service registered successfully"] [prefix=pd-14.22.74.132-2379] [service-name=MetaStorage] [2025/08/07 10:10:13.412 +08:00] [INFO] [apiutil.go:437] ["register REST path"] [path=/resource-manager/api/v1/] [2025/08/07 10:10:13.412 +08:00] [INFO] [registry.go:97] ["restful API service registered successfully"] [prefix=pd-14.22.74.132-2379] [service-name=ResourceManager] [2025/08/07 10:10:13.413 +08:00] [WARN] [config.go:687] ["Running http and grpc server on single port. This is not recommended for production."] [2025/08/07 10:10:13.413 +08:00] [INFO] [etcd.go:128] ["configuring peer listeners"] [listen-peer-urls="[http://0.0.0.0:2380]"] [2025/08/07 10:10:13.413 +08:00] [INFO] [systimemon.go:30] ["start system time monitor"] [2025/08/07 10:10:13.413 +08:00] [INFO] [etcd.go:136] ["configuring client listeners"] [listen-client-urls="[http://0.0.0.0:2379]"] [2025/08/07 10:10:13.413 +08:00] [INFO] [etcd.go:620] ["pprof is enabled"] [path=/debug/pprof] [2025/08/07 10:10:13.413 +08:00] [INFO] [etcd.go:310] ["starting an etcd server"] [etcd-version=3.5.15] [git-sha="Not provided (use ./build instead of go build)"] [go-version=goed=true] [name=pd-14.22.74.132-2379] [data-dir=/u01/tidb/tidb-data/pd-2379] [wal-dir=] [wal-dir-dedicated=] [member-dir=/u01/tidb/tidb-data/pd-2379/member] [force-new-cluster=fanapshot-count=100000] [max-wals=5] [max-snapshots=5] [snapshot-catchup-entries=5000] [initial-advertise-peer-urls="[http://14.22.74.132:2380]"] [listen-peer-urls="[http://0.0.0..0.0.0:2379]"] [listen-metrics-urls="[]"] [cors="[*]"] [host-whitelist="[*]"] [initial-cluster=] [initial-cluster-state=new] [initial-cluster-token=] [quota-backend-bytes=858993ial-corrupt-check=false] [corrupt-check-time-interval=0s] [compact-check-time-enabled=false] [compact-check-time-interval=1m0s] [auto-compaction-mode=periodic] [auto-compaction-grade-check-interval=5s] [2025/08/07 10:10:13.413 +08:00] [WARN] [server.go:344] ["exceeded recommended request limit"] [max-request-bytes=157286400] [max-request-size="157 MB"] [recommended-request-byt [2025/08/07 10:10:13.413 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379\" exist, but the permission is \"drwxrwxrwx\".data"] [2025/08/07 10:10:13.413 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379/member/snap\" exist, but the permission is \"dcess to the data"] [2025/08/07 10:10:13.415 +08:00] [INFO] [backend.go:81] ["opened backend db"] [path=/u01/tidb/tidb-data/pd-2379/member/snap/db] [took=1.667902ms] [2025/08/07 10:10:13.419 +08:00] [INFO] [server.go:532] ["No snapshot found. Recovering WAL from scratch!"] [2025/08/07 10:10:13.425 +08:00] [INFO] [raft.go:530] ["restarting local member"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [commit-index=4682] [2025/08/07 10:10:13.426 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 switched to configuration voters=()"] [2025/08/07 10:10:13.426 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 became follower at term 2341"] [2025/08/07 10:10:13.426 +08:00] [INFO] [raft] [zap_raft.go:77] ["newRaft 9f2c47b40885d021 [peers: [], term: 2341, commit: 4682, applied: 0, lastindex: 4682, lastterm: 2341]"] [2025/08/07 10:10:13.426 +08:00] [WARN] [fileutil.go:53] ["check file permission"] [error="directory \"/u01/tidb/tidb-data/pd-2379/member\" exist, but the permission is \"drwxrwto the data"] [2025/08/07 10:10:13.428 +08:00] [WARN] [store.go:1241] ["simple token is not cryptographically signed"] [2025/08/07 10:10:13.430 +08:00] [INFO] [kvstore.go:418] ["kvstore restored"] [current-rev=1] [2025/08/07 10:10:13.432 +08:00] [INFO] [quota.go:117] ["enabled backend quota"] [quota-name=v3-applier] [quota-size-bytes=8589934592] [quota-size="8.6 GB"] [2025/08/07 10:10:13.434 +08:00] [INFO] [server.go:867] ["starting etcd server"] [local-member-id=9f2c47b40885d021] [local-server-version=3.5.15] [cluster-version=to_be_decided] [2025/08/07 10:10:13.434 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/snap] [suffix=snap.db] [max=5] [interval=30s] [2025/08/07 10:10:13.434 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/snap] [suffix=snap] [max=5] [interval=30s] [2025/08/07 10:10:13.434 +08:00] [INFO] [server.go:767] ["starting initial election tick advance"] [election-ticks=6] [2025/08/07 10:10:13.434 +08:00] [INFO] [health.go:61] ["grpc service status changed"] [service=] [status=SERVING] [2025/08/07 10:10:13.434 +08:00] [INFO] [purge.go:50] ["started to purge file"] [dir=/u01/tidb/tidb-data/pd-2379/member/wal] [suffix=wal] [max=5] [interval=30s] [2025/08/07 10:10:13.435 +08:00] [INFO] [raft] [zap_raft.go:77] ["9f2c47b40885d021 switched to configuration voters=(11469621189568483361)"] [2025/08/07 10:10:13.435 +08:00] [INFO] [cluster.go:421] ["added member"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [added-peer-id=9f2c47b40885d021] [adde [2025/08/07 10:10:13.435 +08:00] [INFO] [cluster.go:584] ["set initial cluster version"] [cluster-id=668837b4654a6c36] [local-member-id=9f2c47b40885d021] [cluster-version=3.5] [2025/08/07 10:10:13.435 +08:00] [INFO] [capability.go:75] ["enabled capabilities for version"] [cluster-version=3.5] [2025/08/07 10:10:13.437 +08:00] [INFO] [etcd.go:599] ["serving peer traffic"] [address="[::]:2380"] [2025/08/07 10:10:13.437 +08:00] [INFO] [etcd.go:571] [cmux::serve] [address="[::]:2380"] [2025/08/07 10:10:13.437 +08:00] [INFO] [etcd.go:279] ["now serving peer/client/metrics"] [local-member-id=9f2c47b40885d021] [initial-advertise-peer-urls="[http://14.22.74.132:22:2379]"] [listen-client-urls="[http://0.0.0.0:2379]"] [listen-metrics-urls="[]"]
最新发布
08-08
<think>我们正在处理PD启动失败的问题,报错信息为:"failed to get cluster from remote" 和 "rpc error: code = DeadlineExceeded desc = context deadline exceeded"。 这些错误通常与PD节点之间的通信问题或集群初始化问题有关。以下将分步骤排查。 步骤1:检查PD节点之间的网络连通性 由于PD节点需要相互通信(通过peer_port,默认为2380),请确保: - 各PD节点之间可以互相访问对方的peer_port(例如2380)和client_port(例如2379)。 - 使用telnet或nc命令测试其他PD节点的这两个端口。 步骤2:检查集群初始化状态 如果是首次启动,可能因为集群未正确初始化。但如果是重启,则可能是数据损坏或节点间通信问题。 步骤3:查看PD日志 日志位置通常在部署目录下的log子目录中,例如:/opt/tidb-c1/pd-12379/log/pd*.log 重点查找错误日志,特别是与连接其他节点失败相关的日志。 步骤4:检查集群ID和初始配置 报错信息中提到了集群ID,确保所有节点使用相同的集群ID。在PD的数据目录下有一个cluster_id文件,记录了集群ID。检查各节点是否一致。 步骤5:检查时间同步 PD节点需要时间同步,否则会导致rpc超时。使用`ntpstat`或`chronyc sources`检查时间同步状态。 步骤6:检查PD配置文件 检查每个PD节点的配置文件(pd.toml)中的以下配置: - `initial-cluster`:在初始启动时指定集群的所有PD节点(格式:pd1=http://ip1:2380,pd2=http://ip2:2380,...- `advertise-peer-urls` 和 `advertise-client-urls`:确保这些地址是其他节点可以访问的。 步骤7:恢复PD集群(如果之前运行过) 如果之前集群运行过,现在重启失败,可能需要使用pd-recover工具恢复(如引用[1]所示): - 首先,从日志中获取集群ID(或者从数据目录的cluster_id文件获取)。 - 选择一个最大的alloc-id(通常比当前最大的alloc-id大一个数量级,比如10000)。 - 执行pd-recover命令(注意:此操作有一定风险,需谨慎): $ tiup pd-recover -endpoints http://<pd_client_ip>:2379 -cluster-id <your_cluster_id> -alloc-id <alloc_id> - 然后重启PD集群。 步骤8:检查磁盘空间和inode 使用`df -h`和`df -i`检查磁盘空间和inode是否充足。 步骤9:检查防火墙和SELinux 确保防火墙开放了PD节点之间的2379和2380端口,以及SELinux没有阻止通信。 步骤10:重新启动PD服务 在修复问题后,尝试重启PD服务: $ tiup cluster restart <cluster-name> -N <pd_host>:2379 根据上述步骤进行排查,重点在于网络通信、配置一致性和集群初始化状态。 相关问题: 1. PD集群启动时如何正确配置initial-cluster参数? 2. 如何安全地使用pd-recover工具恢复损坏的PD集群? 3. TiDB集群中PD节点的时间不同步会导致哪些问题? 4. 如何检查PD节点之间的网络连通性? 5. PD节点启动时出现“context deadline exceeded”错误通常有哪些原因?</think>### PD 启动失败排查与解决方案(报错:`failed to get cluster from remote` 和 `rpc error: code = DeadlineExceeded`) #### 1. **核心问题诊断** 这两个报错表明 PD 节点无法从 etcd 集群获取集群信息,且 RPC 请求超时。常见原因: - **网络隔离**:PD 节点间通信受阻(2379/2380 端口) - **配置不一致**:集群初始化参数错误 - **节点状态冲突**:未清理的旧集群数据导致 ID 冲突 - **时间不同步**:节点间系统时间差超过 1 秒(TiDB 强依赖时间同步) #### 2. **关键解决步骤** ##### (1) 验证节点间通信 ```bash # 在目标节点执行(替换实际IP) telnet 192.168.12.21 2379 # client_port telnet 192.168.12.21 2380 # peer_port ``` - 🔴 不通 → 检查防火墙/SELinux: ```bash sudo firewall-cmd --add-port={2379,2380}/tcp --permanent && sudo firewall-cmd --reload sudo setenforce 0 # 测试时临时禁用SELinux ``` ##### (2) 检查集群初始化状态 ```bash # 查看 PD 数据目录 ls -l /opt/tidb-c1/data/pd-12379/member/ # 正常应有 snap/wal 文件,若空需重新初始化 ``` - 若目录为空,需初始化集群: ```bash tiup cluster deploy <cluster-name> v5.4.0 topology.yaml --user tidb -i ``` ##### (3) 解决集群 ID 冲突(常见根源) ```bash # 查看日志获取集群ID(通常在报错行) grep "cluster id" /opt/tidb-c1/pd-12379/log/pd*.log # 示例输出:cluster id: 7016973815389845033 ``` 使用 `pd-recover` 修复(如引用[1]): ```bash tiup pd-recover -endpoints http://192.168.12.21:2379 \ -cluster-id 7016973815389845033 \ # 替换实际ID -alloc-id 6000 # 建议取>1000的值 ``` 成功后重启: ```bash tiup cluster restart tidb-test -N 192.168.12.21:2379 # 如引用[1][^1] ``` ##### (4) 强制时间同步 ```bash sudo timedatectl set-ntp true sudo systemctl restart chronyd chronyc sources # 验证时间源 ``` #### 3. 配置文件验证(`topology.yaml`) ```yaml pd_servers: - host: 192.168.12.21 client_port: 2379 peer_port: 2380 deploy_dir: /opt/tidb-c1/pd-12379 data_dir: /opt/tidb-c1/data/pd-12379 # 单节点部署需启用以下配置 config: replication.enable-placement-rules: false # 关闭多副本规则 schedule.max-merge-region-size: 0 # 禁用自动合并 ``` #### 4. 完整修复流程 ```mermaid graph TD A[发现PD启动失败] --> B{检查端口连通性} B -->|不通| C[开放防火墙端口] B -->|通| D[检查数据目录] D -->|空目录| E[重新初始化集群] D -->|有数据| F[检查集群ID] F --> G[使用pd-recover修复] G --> H[重启PD服务] H --> I[验证状态 tiup cluster display] ``` #### 5. 日志分析要点 检查 PD 日志 (`/opt/tidb-c1/pd-12379/log/pd*.log`): ```log # 正常启动日志 [INFO] [server.go:205] ["etcd started"] [...] # 异常示例 [ERROR] [grpclog.go:37] ["grpc: addrConn.createTransport failed"] [error="context deadline exceeded"] ``` > 📌 **关键提示**:所有操作需用 `tidb` 用户执行(避免权限问题),修复后执行 `tiup cluster display` 确认 PD 状态为 `Up`[^1]。 --- ### 相关问题 1. **PD 节点报错 `context deadline exceeded` 时如何快速定位网络问题?** 2. **使用 `pd-recover` 修复集群时如何确定正确的 `alloc-id` 值?** 3. **TiDB 单节点部署时为什么需要禁用 `placement-rules` 和 `region-merge`?** 4. **如何验证 PD 节点之间的时间同步精度是否满足要求?** 5. **PD 数据目录中哪些文件损坏会导致集群无法启动?** [^1]: 引用来源:TiDB 官方部署文档及故障恢复案例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值