mysql 管理_Mysql的管理及使用

本文详细介绍了MySQL的管理,包括连接管理、数据库启动流程、关闭与启动命令、配置文件的使用,以及多实例配置。重点讲解了配置my.cnf文件以影响服务器启动,并展示了如何创建和管理用户权限。此外,还提供了忘记密码的解决方法和MySQL客户端的常用命令。内容涵盖从基础操作到更高级的用户管理和多实例配置,适合MySQL管理员和开发者学习。
摘要由CSDN通过智能技术生成

第1章 Mysql的管理

1.1 连接管理mysql

mysql[options] #Linux或UNIX shell提示符(终端窗口)

mysql--help #查看帮助信息

mysql--version/-V #查看客户端程序的版本

01.常见的选项语法格式:

长格式(--)

简易格式(-)

02.通过指定的主机进行连接:

本地连接到在同一主机上运行的服务器

远程连接到在其他主机上运行的服务器

03.常见特定于客户机的连接选项

-u或--host=

-p

-h或--host=

--protocol=#协议-P或--port=

-S或--socket=

1.2 数据库启动流程介绍

1 [root@db02 ~]# file /application/mysql/bin/mysqld2

3 /application/mysql/bin/mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

提示:单进程mysqld 其属性LSB即二进制的可执行文件,mysql.server便于我们通过SYS-V启动关闭的脚本

说明:support-files/mysql.server及mysqld_safe都是脚本文件,最后都调用mysqld二进制文件启动

1.3 mysql数据库的关闭与启动

01.数据库关闭命令

1 /etc/init.d/mysqld stop

2 mysqladmin -uroot -poldboy123 shutdown

注意:生产环境下禁止使用下述方式关闭mysql软件

kill -9#利用系统进程管理命令关闭MySQL

kill pid # pid即数据库服务对应的进程号

l killall mysqld #mysqld即数据库服务对应的进程名

l pkill mysqld #mysqld即数据库服务对应的进程名

02.数据库启动命令

1 /etc/init.d/mysqld start

2 application/mysql/bin/mysqld_safe [--user=mysql] &

1.3.1 perror查看错误详细内容

在mysql使用过程中,由于操作系统引起的文件目录不存在或sql语句错误引起的报错,这些error会有相应的代码如errorN、ErrcodeN,这里"N"代表具体的错误号

1 [root@db02 ~]# perror 126 127 135

2 OS error code 126: Required key not available3 MySQL error code 126: Index file iscrashed4 OS error code 127: Key has expired5 MySQL error code 127: Record file iscrashed6 MySQL error code 135: No more room in record file

1.4 Mysql初始化配置文件

即在数据库启动之前通过/etc/my.cnf告诉启动程序一系列预设置的选项

配置文件功能:影响服务器进程的启动;影响到客户端程序

实例01

1 ./mysqld_safe --basedir=/application/mysql --datadir=/application/mysql/data --socket=/tmp/mysql.sock --user=mysql #指定mysql启动参数

注意:由于指定了socket导致无法找到该文件,此时mysql无法进行正常连接,故使用mysql -uroot -poldboy123 -S /tmp/mysql.sock即可

1.4.1 配置my.cnf的方法

使用不同的"标签/模块"明确指定影响哪部分功能,代表一类程序

实例02

1 vim /etc/my.cnf2

3 [mysqld]4 basedir=/application/mysql5 datadir=/application/mysql/data6 socket=/tmp/mysql.sock7 log-error=/var/log/mysql.log8 port=3307#其中,用户无需指定9

10 [mysql]11 socket=/tmp/mysql.sock12 user=root13 password=oldboy123 #此处通过socket登录,无需配置端口14 /etc/init.d/mysqld restart #重启生效

说明:此时检查进程信息,可以看到与我们手动配置的my.cnf一致

1 [root@db02 ~]# ps -ef |grep [my]sql2

3 root 3411 1918 0 15:52 pts/1 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe4

5 mysql 3548 3411 0 15:52 pts/1 00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307

1.4.2 配置文件读取顺序

/etc/my.cnf

↓ ↓ ↓/etc/mysql/my.cnf

$MYSQL_HOME/my.cnf

defaults-extra-file~/.my.cnf

说明:假设4个配置文件都存在, 同时使用 --defaults-extra-file指定了参数文件,这时如果有一个"参数变量"在5个配置文件中都出现了,那么后面的配置文件中的参数变量值会覆盖前面配置文件中的参数变量值,就是说会使用 ~/. my.cnf中设置的值

注意:若使用 ./bin/mysqld_safe守护进程启动mysql数据库时,使用了 --defaults-file=参数,这时只会使用这个参数指定的配置文件

1.5 Mysql多实例配置

多个mysqld+多套my.cnf+多套数据=>生产环境无用

思路:

01.初始化两套数据到不同目录mysql_install_db/data/3306

/data/3308

02.两套配置文件/data/3306/my.cnf/data/3308/my.cnf03.两个socket

socket=/data/3306/mysql.sock

socket=/data/3308/mysql.sock04.两套实例/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf05.设计启动脚本

1.5.1 实例配置文件及程序脚本

注意:需首先关闭当前mysql服务,防止造成端口冲突/etc/init.d/mysqld stop

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 [root@db02 ~]# vim /data/3306/my.cnf2 [client]3 port = 3306

4 socket = /data/3306/mysql.sock5

6 [mysqld]7 user =mysql8 port = 3306

9 socket = /data/3306/mysql.sock10 basedir = /application/mysql11 datadir = /data/3306/data12 log-bin = /data/3306/mysql-bin13 server-id = 6

14

15 [mysqld_safe]16 log-error=/data/3306/oldboy_3306.err17 pid-file=/data/3306/mysqld.pid

my.cnf

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[root@db02 ~]# vim /data/3306/mysql

#!/bin/sh

port=3306mysql_user="root"CmdPath="/application/mysql/bin"mysql_sock="/data/${port}/mysql.sock"mysqld_pid_file_path=/data/3306/3306.pid

start(){if [ ! -e "$mysql_sock"];then

printf"Starting MySQL...\n"

/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &sleep3

elseprintf"MySQL is running...\n"exit1fi

}

stop(){if [ ! -e "$mysql_sock"];then

printf"MySQL is stopped...\n"exit1

elseprintf"Stoping MySQL...\n"mysqld_pid=`cat "$mysqld_pid_file_path"`if (kill -0 $mysqld_pid 2>/dev/null)

then

kill $mysqld_pid

sleep2fi

fi

}

restart(){

printf"Restarting MySQL...\n"stop

sleep2start

}case "$1" instart)

start

;;

stop)

stop

;;

restart)

restart

;;*)

printf"Usage: /data/${port}/mysql {start|stop|restart}\n"esac

mysql

1.5.2 创建3308端口配置文件

1 \cp /data/3306/my.cnf /data/3308/

2 \cp /data/3306/mysql /data/3308/

3 sed -i 's/3306/3308/g' /data/3308/my.cnf4 sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf5 sed -i 's/3306/3308/g' /data/3308/mysql

1.5.3 创建数据目录授权

1 mkdir -p /data/{3306,3308}/data2 chown -R mysql.mysql /data/

3 chmod 700 /data/{3306,3308} #增加其安全性

1.5.4 初始化数据并创建错误日志文件

1 cd /application/mysql/scripts2 ./mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql3 ./mysql_install_db --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data --user=mysql4

5

6 touch /data/3306/oldboy_3306.err7 touch /data/3308/oldboy_3308.err

说明:5.6.36特殊性即不会自动创建错误日志文件

1.5.5 启动数据库并进行测试

1 /data/3306/mysql start

2 /data/3308/mysql start

3

4 sleep 5

注意:由于mysql服务的默认端口为3306,故在启动之前需先将mysql服务停止运行并关闭开机自启动

1 [root@db02 scripts]# netstat -lntup|grep 330

2 tcp 0 0 :::3306 :::* LISTEN 1793/mysqld3 tcp 0 0 :::3308 :::* LISTEN 2001/mysqld4

5 [root@db02 ~]# ps -ef |grep [m]ysql6 root 1217 1 0 22:40 ? 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid7 mysql 1403 1217 0 22:40 ? 00:00:01 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/oldboy_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306

8

9 root 1426 1 0 22:40 ? 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf --pid-file=/data/3308/3308.pid10 mysql 1611 1426 0 22:40 ? 00:00:01 /application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3308/oldboy_3308.err --pid-file=/data/3308/3308.pid --socket=/data/3308/mysql.sock --port=3308

1.5.5.1  加入开机自启

1 vim /etc/rc.local

2

3 /data/3306/mysql start

4 /data/3308/mysql start

1.5.6 mysql多实例登录

1 mysql -S /data/3306/mysql.sock

2 mysql -S /data/3308/mysql.sock #或mysql -h 10.0.0.52 -P 3306

第2章Mysql用户管理

2.1 用户的介绍

01.定义:用户名+主机域(host指定要登陆本机的用户主机,而非本机)

02.功能作用:连接数据库、管理数据库对象及数据

03.连接数据库:

A.定义用户:用户名+主机域、密码

B.定义权限:对不同对象进行权限(角色)定义

grant 权限 on 权限范围(对象) to 用户 identified by '密码';

04.权限(角色):

对数据库的读、写等操作,如create、select、insert、update等

数据库定义好的一组权限的定义,如all privileges、replication slave

05.权限范围:

全库级别:*.*(所有数据库对象)

单库级别:banana.*(oldboy单库下所有对象)

单表级别:banana.test (单表级别)

注意:当在多个权限范围上设置了同一个用户的权限时,以综合最大权限为准。故在一般情况下不要在多个权限范围内设置权限,如库级别oldboy.*、表级别oldboy.test

06.用户:

repl@localhost

repl@'10.0.0.53'repl@'10.0.0.%'(%为通配符,匹配所有)或10.0.0.0/255.0.0.0repl@'10.0.0.5%'

#网段带匹配符%则必须加' ',用户可加可不加

2.2 用户权限实例

查看当前所有用户(选择)

select user,password,host from mysql.user;

创建用户

语法:CREATE USER '用户'@'主机' IDENTIFIED BY '密码';

实例:create user'banana'@'10.0.0.%' identified by '123';

授权用户

语法:GRANT ALL ON *.* TO '用户'@'主机';

实例:grant all on banana.* to banana@'172.16.1.%';

其他实例

grant all on *.* to banana@'172.16.1.%' identified by '123'; #创建用户,同时进行授权

grant all on*.* to banana@'localhost' identified by '123'with grant option; #授权单表root一样的权限

grantselect,create,insert,update on banana.* to banana@'10.0.0.%' identified by '123'; #只对banana数据库下的对象进行增insert create、改update、查select

收回用户权限

语法:REVOKE INSERT ON *.* FROM '用户'@'主机';

实例:revoke drop on banana.* from 'banana'@'10.0.0.%';

查看用户对应权限

语法:SHOW GRANTS FOR '用户'@'主机';

实例:show grantsfor banana@'10.0.0.%';

注意:mysql内自带的命令可以大写,而自身定义的用户管理需区分大小写;尽量不要修改授权表

说明:使用数据库自带的命令无需修改授权表如drop、grant,而使用如delete、update等命令则需修改授权表,如下

删除用户

语法:drop user 'user'@'主机域;

实例:drop user banana@'10.0.0.52';

deletefrom mysql.user where user='banana' and host='localhost'; #强制删除用户(危险)

flush privileges;

总结说明:可以授权的用户权限create, select, insert, update, delete, drop, reload, shutdown, process, file, references, index, alter, show databases, super, create temporary tables, lock tables, execute, replication slave, replication client, create view, show view, create routine, alter routine, create user, event, trigger, create tablespace

2.3 Mysql忘记密码的解决方法

01.停止mysql服务

1 /etc/init.d/mysqld stop

02.添加参数启动服务

1 /application/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking --user=mysql &

说明:在此模式下启动情况为:无密码登陆、网络用户无法登陆(只能本地登录)、与授权有关的命令均无法执行,如grant,revoke,drop user,create user

03.修改密码

1 mysql2

3 mysql>use mysql4 mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost'; #只针对5.6

5 mysql> flush privileges;

04.重启mysql服务

1 /etc/init.d/mysqld restart

05.登录验证

1 mysql -uroot -p123

至此,密码修改成功

第3章 MySQL客户端

3.1 Mysql客户端命令

SQL是用户用来管理及控制数据库的专用语言

mysql:

用于数据库连接管理;将用户SQL语句发送到服务器

mysqladmin:

命令行管理工具

mysqldump:

备份数据库和表的内容

3.1.1 ①mysql客户端接口自带功能

\h 或 help 或 ?#获取帮助信息,如help grant

\G #格式化输出(行转列),如select* frommysql.user\G

\T 或 tee #记录操作日志,如tee/tmp/mysql.log 正误均记录

\c 或 CTRL+c #退出,如CTRL+d,exit,\q,quit等

\s 或 status #查看数据库负载、版本及连接等状态信息

\. 或 source #调用SQL脚本,如source world.sql;

\u 或use #进入/切换数据库,如use world

快捷键

上下翻页

tab 补全表名

ctrl+C 退出

ctrl+ L 清屏

3.1.2 ②mysqladmin命令

命令帮助:mysqladmin --help

语法:mysqladmin-u -pcommands

实例:

mysqladmin version

mysqladmin processlist

mysqladmin status

mysqladmin ping

mysqladmin shutdown

mysqladmin variables

3.1.3 ③mysqldump命令

命令帮助:mysqldump --help

基本语法:

Usage: mysqldump [OPTIONS] database [tables]

OR mysqldump [OPTIONS]--databases [OPTIONS] DB1 [DB2 DB3...]

OR mysqldump [OPTIONS]--all-databases [OPTIONS]

3.2 SQL语句

3.2.1 DDL 数据定义语言

定义对象:库(名字、特性)、表(表名字、列信息)

对于库定义:创建、删除、修改(本身和库中的对象->表,视图,存储过程,函数,触发器)

表定义:创建(定义表结构)、删除(对于表本身)、修改(只针对表结构非表内容)

3.2.1.1  库定义

查看库

show databases;

show databases like'%ban%'; #模糊匹配

创建库定义

语法:CREATE DATABASE db_name CHARACTER SET charset_name COLLATE collation_name;

实例:create database banana;

create database banana_tong characterset gbk collate gbk_chinese_ci; #指定字符集建库

说明:在一些SQL语句的结尾处要使用";"分号或者使用"\g"或"\G"来结束语句的运行

修改库字符编码

语法:ALTER DATABASE [db_name] CHARACTER SET charset_name COLLATE collation_name;

实例:alter database banana charset gbk;

删除库

drop database banana;

切库

use baanana;

3.2.1.2  表定义

表属性:字段、数据类型、索引 ==>默认:字符集、引擎

表定义(列->必须定义,至少一列):

表名、列名、列属性(数据类型、列约束)

列定义的范围说明:

1)数据类型->字符/数字

2)约束条件->子健、外键、唯一

3)列属性->比较特殊的定义

定义表之前需先进入数据库

use world;

创建表

语法:CREATE TABLE 表名 (列名 列定义)

实例:create table test(idint);

create table student(idcardint ,name char(30),sex char(4)); #创建多列

查看表结构

desc student;

查看建表语句

show create table student;

修改表定义(表名)

rename table student to test1;

alter table test1 rename to people;

添加表特性

alter table people add addr char(40) NOT NULL;

alter table people add ageint(4) after name;

alter table people add tel varchar(15) first;

#同时添加多个列定义

alter table people add idint(10) first,add sex char(4) after name;

删除表结构(列字段)

alter table people drop sex;

修改表定义/数据类型

alter table people modify name char(20);

alter table people change name people_namechar(30);

3.2.2 DCL 数据库控制语言

用户授权:grant

语法:GRANT ALL ON *.* TO 'user'@'localhost';

实例:grantselect,create,insert,update on banana.* to 'banana'@'10.0.0.%' identified by '123'; #创建用户的同时进行授权

回收权限:revoke

语法:REVOKE INSERT ON *.*FROM sys@localhost;

实例:revoke drop,delete onbanana.* from sys@localhost;

3.2.3 DML 数据操作语言

插入数据

语法:insert into [([,..])] values (值1 )[,(值n )]

实例:insert into banana values(1,'boy'); #插入一行数据

insert into banana values(1,'boy'), (2,'girl'); #插入多行数据

#只针对某一列插入数据

insert into test(id,name) values(1,'boy');

更新/修改表(切记要有where条件)

update test2 set name='haha' where name='girl';

删除表内容(切记要有where条件)

delete from test where id=1; # 逻辑删除,一行一行删。

truncate table test; # 物理删除,pages(block) ,效率高

insert into `test` values(1,'apple'),(2,'pear'),(3,'banana'), (4,'lemon'), (5,'orange')

3.2.3.1  [企业案例]生产环境中d伪删除

01.为表添加一个state列

TINYINT说明:即字段类型,若设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数

1 mysql> alter table test2 add state tinyint(2) not null default 1;2 mysql>desc test2;3

4 +-------+----------+------+-----+---------+-------+

5 | Field | Type | Null | Key | Default | Extra |

6 +-------+------------+------+-----+---------+-------+

7 | id | int(11) | YES| | NULL | |

8 | name | varchar(20)| YES| | NULL | |

9 | state | tinyint(2) | NO | | 1 | |

10 +-------+-------------+------+-----+------+---+

02.查看当前的state状态

1 mysql> select * fromtest2;2

3 +----+---------+-------+

4 | id | name | state |

5 +----+---------+-------+

6 | 1 | boy | 1 |

7 | 2 | girl | 1 |

8 | 3 | inca | 1 |

9 | 4 | zuma | 1 |

03.更新并修改state数据为0

1 mysql> update test2 set state=0 where name='boy';2 mysql> select * fromtest2;3

4 +----+---------+-------+

5 | id | name | state |

6 +----+---------+-------+

7 | 1 | boy | 0 |

8 | 2 | girl | 1 |

9 | 3 | inca | 1 |

10 | 4 | zuma | 1 |

04.当查询时使用where条件,此时只会显示state=1的记录,其效果与删除类似

1 mysql> select * from test2 where state=1;2

3 +----+---------+-------+

4 | id | name | state |

5 +----+---------+-------+

6 | 2 | girl | 1 |

7 | 3 | inca | 1 |

8 | 4 | zuma | 1 |

3.2.3.2  mysql安全模式(防止不加条件误删)

1 [root@db02 ~]# mysql -uroot -p123 -U2

3 mysql> update test2 set name='oldgirl';4

5 ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

说明:mysql命令加上选项-U后,当发出没有where或limit关键字的update或delete时,mysql程序拒绝执行

3.2.4 DQL数据查询语言

语法:SELECT FROM WHERE

其中,select、from、where是不能随便改的,是关键字,支持大小写

查看用户的连接信息

select user,password,host frommysql.user;

#模糊查询数据select user,password,host from mysql.user where user like 'sy%';

查看test2表中的信息

select * fromsys.test2; #查看所有信息select id,name from sys.test2;

特殊信息查询

select id,name from test2 where id=2;select id,name from test2 where id>2 and id<4; #查看id大于2且小于4的记录select id,name from test2 where name='sys';select id,name fromtest2 order by id asc; #提取记录排序select id,name from test2 order by limit 1,3; #显示跳过第一行后的三行(需要与排序配合使用)

注意:select必须同from搭配使用

此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值