热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TiDB部署文档

文章目录

文章目录

    • 一、安装TiUP
    • 二、TiDB部署

一、安装TiUP

使用普通用户登录中控机,以 tidb 用户为例,后续安装 TiUP 及集群管理操作均通过该用户完成:

1、执行如下命令安装 TiUP 工具:

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

2、按如下步骤设置 TiUP 环境变量:

重新声明全局环境变量:

source .bash_profile

确认 TiUP 工具是否安装:

which tiup

3、安装 TiUP cluster 组件

tiup cluster

如果已经安装,则更新 TiUP cluster 组件至最新版本:

tiup update --self && tiup update cluster

预期输出 “Update successfully!” 字样。

4、验证当前 TiUP cluster 版本信息。执行如下命令查看 TiUP cluster 组件版本:

[tidb@db01 ~]$ tiup --binary cluster
/home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster

二、TiDB部署

1、编辑配置文件

# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
pd_servers:
- host: 192.168.137.129
- host: 192.168.137.130
- host: 192.168.137.131
tidb_servers:
- host: 192.168.137.129
- host: 192.168.137.130
- host: 192.168.137.131
tikv_servers:
- host: 192.168.137.129
- host: 192.168.137.130
- host: 192.168.137.131
monitoring_servers:
- host: 192.168.137.129
grafana_servers:
- host: 192.168.137.129
alertmanager_servers:
- host: 192.168.137.129

2、安装TiDB

通过 TiUP 进行集群部署可以使用密钥或者交互密码方式来进行安全认证:

  • 如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径;
  • 如果是密码方式,可以通过 -p 进入密码交互窗口;
  • 如果已经配置免密登陆目标机,则不需填写认证。

一般情况下 TiUP 会在目标机器上创建 topology.yaml 中约定的用户和组,以下情况例外:

  • topology.yaml 中设置的用户名在目标机器上已存在。
  • 在命令行上使用了参数 --skip-create-user 明确指定跳过创建用户的步骤。

[tidb@db01 ~]$ tiup cluster deploy tidb-test v4.0.0 ./topology.yaml --user root -p
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster deploy tidb-test v4.0.0 ./topology.yaml --user root -p
Please confirm your topology:
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v4.0.0
Type Host Ports OS/Arch Directories
---- ---- ----- ------- -----------
pd 192.168.137.129 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379
pd 192.168.137.130 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379
pd 192.168.137.131 2379/2380 linux/x86_64 /tidb-deploy/pd-2379,/tidb-data/pd-2379
tikv 192.168.137.129 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160
tikv 192.168.137.130 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160
tikv 192.168.137.131 20160/20180 linux/x86_64 /tidb-deploy/tikv-20160,/tidb-data/tikv-20160
tidb 192.168.137.129 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000
tidb 192.168.137.130 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000
tidb 192.168.137.131 4000/10080 linux/x86_64 /tidb-deploy/tidb-4000
prometheus 192.168.137.129 9090 linux/x86_64 /tidb-deploy/prometheus-9090,/tidb-data/prometheus-9090
grafana 192.168.137.129 3000 linux/x86_64 /tidb-deploy/grafana-3000
alertmanager 192.168.137.129 9093/9094 linux/x86_64 /tidb-deploy/alertmanager-9093,/tidb-data/alertmanager-9093
Attention:
1. If the topology is not what you expected, check your yaml file.
2. Please confirm there is no port/directory conflicts in same host.
Do you want to continue? [y/N]: y
Input SSH password:
+ Generate SSH keys ... Done
+ Download TiDB components
- Download pd:v4.0.0 (linux/amd64) ... Done
- Download tikv:v4.0.0 (linux/amd64) ... Done
- Download tidb:v4.0.0 (linux/amd64) ... Done
- Download prometheus:v4.0.0 (linux/amd64) ... Done
- Download grafana:v4.0.0 (linux/amd64) ... Done
- Download alertmanager:v0.17.0 (linux/amd64) ... Done
- Download node_exporter:v0.17.0 (linux/amd64) ... Done
- Download blackbox_exporter:v0.12.0 (linux/amd64) ... Done
+ Initialize target host environments
- Prepare 192.168.137.129:22 ... Done
- Prepare 192.168.137.130:22 ... Done
- Prepare 192.168.137.131:22 ... Done
+ Copy files
- Copy pd -> 192.168.137.129 ... Done
- Copy pd -> 192.168.137.130 ... Done
- Copy pd -> 192.168.137.131 ... Done
- Copy tikv -> 192.168.137.129 ... Done
- Copy tikv -> 192.168.137.130 ... Done
- Copy tikv -> 192.168.137.131 ... Done
- Copy tidb -> 192.168.137.129 ... Done
- Copy tidb -> 192.168.137.130 ... Done
- Copy tidb -> 192.168.137.131 ... Done
- Copy prometheus -> 192.168.137.129 ... Done
- Copy grafana -> 192.168.137.129 ... Done
- Copy alertmanager -> 192.168.137.129 ... Done
- Copy node_exporter -> 192.168.137.130 ... Done
- Copy node_exporter -> 192.168.137.131 ... Done
- Copy node_exporter -> 192.168.137.129 ... Done
- Copy blackbox_exporter -> 192.168.137.129 ... Done
- Copy blackbox_exporter -> 192.168.137.130 ... Done
- Copy blackbox_exporter -> 192.168.137.131 ... Done
+ Check status
Enabling component pd
Enabling instance pd 192.168.137.131:2379
Enabling instance pd 192.168.137.129:2379
Enabling instance pd 192.168.137.130:2379
Enable pd 192.168.137.131:2379 success
Enable pd 192.168.137.129:2379 success
Enable pd 192.168.137.130:2379 success
Enabling component node_exporter
Enabling component blackbox_exporter
Enabling component node_exporter
Enabling component blackbox_exporter
Enabling component node_exporter
Enabling component blackbox_exporter
Enabling component tikv
Enabling instance tikv 192.168.137.131:20160
Enabling instance tikv 192.168.137.129:20160
Enabling instance tikv 192.168.137.130:20160
Enable tikv 192.168.137.129:20160 success
Enable tikv 192.168.137.131:20160 success
Enable tikv 192.168.137.130:20160 success
Enabling component tidb
Enabling instance tidb 192.168.137.131:4000
Enabling instance tidb 192.168.137.129:4000
Enabling instance tidb 192.168.137.130:4000
Enable tidb 192.168.137.129:4000 success
Enable tidb 192.168.137.131:4000 success
Enable tidb 192.168.137.130:4000 success
Enabling component prometheus
Enabling instance prometheus 192.168.137.129:9090
Enable prometheus 192.168.137.129:9090 success
Enabling component grafana
Enabling instance grafana 192.168.137.129:3000
Enable grafana 192.168.137.129:3000 success
Enabling component alertmanager
Enabling instance alertmanager 192.168.137.129:9093
Enable alertmanager 192.168.137.129:9093 success
Cluster `tidb-test` deployed successfully, you can start it with command: `tiup cluster start tidb-test`

TiUP 支持管理多个 TiDB 集群,该命令会输出当前通过 TiUP cluster 管理的所有集群信息,包括集群名称、部署用户、版本、密钥信息等:

[tidb@db01 ~]$ tiup cluster list
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster list
Name User Version Path PrivateKey
---- ---- ------- ---- ----------
tidb-test tidb v4.0.0 /home/tidb/.tiup/storage/cluster/clusters/tidb-test /home/tidb/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa

执行如下命令检查 tidb-test 集群情况,预期输出包括 tidb-test 集群中实例 ID、角色、主机、监听端口和状态(由于还未启动,所以状态为 Down/inactive)、目录信息:

[tidb@db01 ~]$ tiup cluster display tidb-test
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v4.0.0
SSH type: builtin
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.137.129:9093 alertmanager 192.168.137.129 9093/9094 linux/x86_64 inactive /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093
192.168.137.129:3000 grafana 192.168.137.129 3000 linux/x86_64 inactive - /tidb-deploy/grafana-3000
192.168.137.129:2379 pd 192.168.137.129 2379/2380 linux/x86_64 Down /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.130:2379 pd 192.168.137.130 2379/2380 linux/x86_64 Down /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.131:2379 pd 192.168.137.131 2379/2380 linux/x86_64 Down /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.129:9090 prometheus 192.168.137.129 9090 linux/x86_64 inactive /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
192.168.137.129:4000 tidb 192.168.137.129 4000/10080 linux/x86_64 Down - /tidb-deploy/tidb-4000
192.168.137.130:4000 tidb 192.168.137.130 4000/10080 linux/x86_64 Down - /tidb-deploy/tidb-4000
192.168.137.131:4000 tidb 192.168.137.131 4000/10080 linux/x86_64 Down - /tidb-deploy/tidb-4000
192.168.137.129:20160 tikv 192.168.137.129 20160/20180 linux/x86_64 N/A /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.137.130:20160 tikv 192.168.137.130 20160/20180 linux/x86_64 N/A /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.137.131:20160 tikv 192.168.137.131 20160/20180 linux/x86_64 N/A /tidb-data/tikv-20160 /tidb-deploy/tikv-20160

预期结果输出 Started cluster tidb-test successfully 标志启动成功。

[tidb@db01 ~]$ tiup cluster start tidb-test
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster start tidb-test
Starting cluster tidb-test...
+ [ Serial ] - SSHKeySet: privateKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [ Serial ] - StartCluster
Starting component pd
Starting instance pd 192.168.137.131:2379
Starting instance pd 192.168.137.129:2379
Starting instance pd 192.168.137.130:2379
Start pd 192.168.137.131:2379 success
Start pd 192.168.137.129:2379 success
Start pd 192.168.137.130:2379 success
Starting component node_exporter
Starting instance 192.168.137.129
Start 192.168.137.129 success
Starting component blackbox_exporter
Starting instance 192.168.137.129
Start 192.168.137.129 success
Starting component node_exporter
Starting instance 192.168.137.130
Start 192.168.137.130 success
Starting component blackbox_exporter
Starting instance 192.168.137.130
Start 192.168.137.130 success
Starting component node_exporter
Starting instance 192.168.137.131
Start 192.168.137.131 success
Starting component blackbox_exporter
Starting instance 192.168.137.131
Start 192.168.137.131 success
Starting component tikv
Starting instance tikv 192.168.137.131:20160
Starting instance tikv 192.168.137.129:20160
Starting instance tikv 192.168.137.130:20160
Start tikv 192.168.137.131:20160 success
Start tikv 192.168.137.129:20160 success
Start tikv 192.168.137.130:20160 success
Starting component tidb
Starting instance tidb 192.168.137.131:4000
Starting instance tidb 192.168.137.129:4000
Starting instance tidb 192.168.137.130:4000
Start tidb 192.168.137.129:4000 success
Start tidb 192.168.137.131:4000 success
Start tidb 192.168.137.130:4000 success
Starting component prometheus
Starting instance prometheus 192.168.137.129:9090
Start prometheus 192.168.137.129:9090 success
Starting component grafana
Starting instance grafana 192.168.137.129:3000
Start grafana 192.168.137.129:3000 success
Starting component alertmanager
Starting instance alertmanager 192.168.137.129:9093
Start alertmanager 192.168.137.129:9093 success
+ [ Serial ] - UpdateTopology: cluster=tidb-test
Started cluster `tidb-test` successfully

通过 TiUP 检查集群状态,预期结果输出,注意 Status 状态信息为 Up 说明集群状态正常

[tidb@db01 ~]$ tiup cluster display tidb-test
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v4.0.0
SSH type: builtin
Dashboard URL: http://192.168.137.131:2379/dashboard
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.137.129:9093 alertmanager 192.168.137.129 9093/9094 linux/x86_64 Up /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093
192.168.137.129:3000 grafana 192.168.137.129 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000
192.168.137.129:2379 pd 192.168.137.129 2379/2380 linux/x86_64 Up|L /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.130:2379 pd 192.168.137.130 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.131:2379 pd 192.168.137.131 2379/2380 linux/x86_64 Up|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.137.129:9090 prometheus 192.168.137.129 9090 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
192.168.137.129:4000 tidb 192.168.137.129 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.168.137.130:4000 tidb 192.168.137.130 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.168.137.131:4000 tidb 192.168.137.131 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.168.137.129:20160 tikv 192.168.137.129 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.137.130:20160 tikv 192.168.137.130 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.137.131:20160 tikv 192.168.137.131 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
Total nodes: 12

连接TiDB

[tidb@db01 ~]$ mysql -u root -h 192.168.137.129 -P 4000
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-TiDB-v4.0.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@mysql 19:51: [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
+--------------------+
5 rows in set (0.00 sec)
root@mysql 19:51: [(none)]> use test;
Database changed
root@mysql 19:51: [test]> show tables;
Empty set (0.00 sec)
root@mysql 19:51: [test]> select user,host from mysql.user;
+------+------+
| user | host |
+------+------+
| root | % |
+------+------+
1 row in set (0.00 sec)
root@mysql 19:51: [test]> ^DBye

停止TiDB

[tidb@db01 ~]$ tiup cluster stop tidb-test
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster stop tidb-test
+ [ Serial ] - SSHKeySet: privateKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/home/tidb/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.129
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.131
+ [Parallel] - UserSSH: user=tidb, host=192.168.137.130
+ [ Serial ] - StopCluster
Stopping component alertmanager
Stopping instance 192.168.137.129
Stop alertmanager 192.168.137.129:9093 success
Stopping component grafana
Stopping instance 192.168.137.129
Stop grafana 192.168.137.129:3000 success
Stopping component prometheus
Stopping instance 192.168.137.129
Stop prometheus 192.168.137.129:9090 success
Stopping component tidb
Stopping instance 192.168.137.131
Stopping instance 192.168.137.129
Stopping instance 192.168.137.130
Stop tidb 192.168.137.129:4000 success
Stop tidb 192.168.137.131:4000 success
Stop tidb 192.168.137.130:4000 success
Stopping component tikv
Stopping instance 192.168.137.131
Stopping instance 192.168.137.129
Stopping instance 192.168.137.130
Stop tikv 192.168.137.129:20160 success
Stop tikv 192.168.137.130:20160 success
Stop tikv 192.168.137.131:20160 success
Stopping component pd
Stopping instance 192.168.137.131
Stopping instance 192.168.137.129
Stopping instance 192.168.137.130
Stop pd 192.168.137.129:2379 success
Stop pd 192.168.137.130:2379 success
Stop pd 192.168.137.131:2379 success
Stopping component node_exporter
Stopping component blackbox_exporter
Stopping component node_exporter
Stopping component blackbox_exporter
Stopping component node_exporter
Stopping component blackbox_exporter
Stopped cluster `tidb-test` successfully


版权声明:本文为qq_42979842原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42979842/article/details/112849430
推荐阅读
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文详细探讨了Linux系统中的文件权限设置,包括常见的755、700等权限模式,以及这些权限在实际应用中的具体含义和作用。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
author-avatar
妈妈的话CPC-8_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有