MySQL学习(3)—MySQL常用命令

数据库50

ps:此随笔基于mysql 5.7.*版本。

准备

  • net start mysql
    启动MySQL服务
  • net stop mysql
    关闭MySQL服务
  • mysql [-h
  • exit/quit
    退出MySQL

注:MySQL的提示符是:mysql> 。MySQL命令结束使用";"或是"\G"。

已知root账户密码进行登录

格式:mysql [-h地址] [-p端口] -u用户名 -p密码

省略不写地址或端口则自动使用默认。(地址:localhost;端口:3306)

两种方式进行登录。方式1:

MySQL学习(3)—MySQL常用命令

方式2:

MySQL学习(3)—MySQL常用命令

忘记root账户密码进行登录(修改root密码)

  1. 以管理员身份打开一个cmd。
  2. 检查MySQL服务是否启动,若已启动则先将其停止服务,输入命令:net stop mysql,回车。
  3. 输入命令:E:,回车,再次输入:cd MySQL\MySQL Server 5.7\bin,切换至mysql安装目录的bin目录下。输入命令:mysqld --defaults-file="E:\MySQL\MySQL_Data\my.ini" --console --skip-grant-tables,回车。

MySQL学习(3)—MySQL常用命令

该命令通过跳过用户权限安全检查,开启MySQL服务,这样连接MySQL时,可以不用输入密码。此时已经开启MySQL服务,保留这个cmd窗口。

注:这里笔者修改了MySQL配置文件my.ini中basedir和datadir各自的路径。

MySQL学习(3)—MySQL常用命令

  1. 同样使用管理员身份,另起一个cmd窗口,尝试连接MySQL。输入命令:mysql -uroot -p,回车,随后出现:Enter password:,这里不用输入密码,直接回车,出现登录成功的信息。

MySQL学习(3)—MySQL常用命令

  1. 执行命令来重置root账户密码:update mysql.user set authentication_string=password('新密码') where user='root';,回车。
  2. 刷新权限。输入命令:flush privileges;,回车。
  3. 然后退出,重新登录。输入命令:quit或exit,回车。
  4. 此时关闭之前的cmd窗口。执行命令来启动MySQL服务:net start mysql,回车。
  5. 再次尝试连接mysql。输入命令:mysql -uroot -p,回车。出现输入密码提示,输入新密码即可登录。

MySQL学习(3)—MySQL常用命令

  1. 至此,忘记root账户密码问题解决。

数据库操作

  • show databases;
    查看所有的数据库,等同于select schema_name from information_schema\G;(注:\G以纵向 报表的形式输出结果,有利于阅读)
  • create database
  • use
  • select database();/status;
    查看当前使用的数据库
  • drop database
  • alter database 数据库名 character set

表操作

注:操作表之前应使用"use

  • show tables [from
  • desc/describe
  • show create table
  • create table
  • create table
  • rename table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • alter table
  • drop table
  • insert into
  • delete from
  • delete from
  • update
  • select * from
  • select [distinct]

用户和权限管理

  • create user '用户名'@'IP地址|域名|%|localhost' [identified by '密码'];(注:%代表通配符,允许客户端以任何IP访问,localhost代表只能通过本机进行登录。如果既有字母,又有数字,则不进行匹配(防止恶意访问))
    单独创建用户
  • grant
  • select user();
    查看当前登录用户
  • show grants;
    查看当前用户权限
  • show grants for '用户名'@'IP地址|域名|%|localhost';
    查看某个用户的权限
  • rename user '旧用户名'@'IP地址|域名|%|localhost' to '新用户名'@'与前者相同';
    重命名用户
  • upadte mysql.user set authentication_string=pasword('新密码') where user='用户名' and host='IP地址|域名|%|localhost';
    修改用户密码
  • flush privileges;
    刷新权限
  • revoke
  • drop user '用户名'@'IP地址|域名|%|localhost';
    删除用户

注:每当调整权限之后需要使用flush privileges;命令刷新更改的权限设置

查询数据库运行状态

  • show status like '%Aborted_connects%';
    查询由于客户端尝试连接,而被MySQL拒绝的连接次数
  • show status like '%Threads_connected%';
    查询当前打开的连接数量
  • show status like 'Qcache%';
    查询缓存情况
  • show variables like 'log_bin';
    查询是否启用binlog日志

备份与恢复

  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h
  • mysqldump [-h

内置函数

数学函数

  • ABS(x):绝对值
  • SIGN(x):返回x的符号,x是负数、0、整数分别返回-1、0、1
  • CEIL()/CEILING(x):向上取整
  • FLOOR(x):向下取整
  • ROUND(x):四舍五入取整
  • MOD(x,y):求余操作(x mod y等同于x%y)
  • LOG(x):返回自然对数(以e为底的对数)
  • LOG10(x):返回以10位为底的对数
  • PI():获取圆周率
  • POW(x,y):乘方操作(x^y)
  • SQRT(x):返回x的平方根

MySQL学习(3)—MySQL常用命令

  • RAND():返回0~1的随机数
  • TRUNCATE(x,y):返回数值x保留到小数点后y位的值(与ROUND最大的区别是不会进行四舍五入)
  • SIN(x):正弦值(参数是弧度)

MySQL学习(3)—MySQL常用命令

  • COS(x):余弦值(参数是弧度)

MySQL学习(3)—MySQL常用命令

  • RADIANS(x):将角度转换为弧度

MySQL学习(3)—MySQL常用命令

  • DEGRESS(x):将弧度转换为角度

日期时间函数

  • NOW()/CURRENT_TIMESTAMP()/LOCALTIME()/SYSDATE()/LOCALTIMESTAMP():返回当前日期和时间

MySQL学习(3)—MySQL常用命令

  • CURDATE/CURRENT_DATE():返回当前日期
  • CURTIME()/CURRENT_TIME():返回当前时间
  • TIME_TO_SEC(t):将时间t转换为秒
  • SEC_TO_TIME(t):将以秒为单位的时间s转换为时分秒的格式

MySQL学习(3)—MySQL常用命令

  • DATEDIFF(D1,D2):计算日期d1->d2之间相隔的天数

MySQL学习(3)—MySQL常用命令

  • ADDDATE(d,n):计算起始日期d加上n天的日期
  • SUBDATE(d,n):日期d减去n天后的日期
  • ADDDATE(d,INTERVAL expr type):计算起始日期d加上一个时间段后的日期

MySQL学习(3)—MySQL常用命令

  • SUBDATE(d,INTERVAL expr type):日期d减去一个时间段后的日期

字符串函数

  • CHAR_LENGTH(s):返回字符串s的字符数

MySQL学习(3)—MySQL常用命令

  • CONCAT(s1,s2,...):将字符串s1,s2等多个字符串合并为一个字符串

MySQL学习(3)—MySQL常用命令

  • CONCAT_WS(x,s1,s2):同CONCAT(s1,s2,...)函数,但是每个字符串之间要加上x(x作为分隔符)

MySQL学习(3)—MySQL常用命令

  • UPPER(s)/UCAASE(s):将字符串s的所有字母变成大写字母
  • LOWER(s)/LCASE(s):将字符串s的所有字母变成小写字母
  • LEFT(s,n):返回字符串s的前n个字符
  • RIGHT(s,n):返回字符串s的后n个字符
  • TRIM(s):去掉字符串s开始和结束处的空格

MySQL学习(3)—MySQL常用命令

  • TRIM(s1 FROM s):去掉字符串开始出和结尾处的字符串s1

MySQL学习(3)—MySQL常用命令

  • REPEAT(s,n):将字符串s重复n次
  • REPLACE(s,s1,s2):将字符串s2替换字符串s中的字符串s1

MySQL学习(3)—MySQL常用命令

  • STRCMP(s1,s2):比较字符串s1和s2

聚合函数

  • COUNT():用来统计记录的条数
  • SUM():求和
  • AVG():求平均值
  • MAX():求最大值
  • MIIN():求最小值

条件判断函数

  • IF(expr,v1,v2):如果表达式expr成立,返回结果v1;否则,返回结果v2

MySQL学习(3)—MySQL常用命令

  • IFNULL(v1,v2):如果v1的值不为NULL,则返回v1;否则,返回v2
  • CASE

系统信息函数

  • VERSION():返回数据库的版本号
  • USER()/SYSTEM_USER()/SESSION_USER()/CURRENT_USER()/CURRENT_USER:返回当前用户
  • CONNECTION_ID():返回服务器的连接数

其他常用函数

  • BIN(x):返回x的二进制编码
  • OCT(x):返回x的八进制编码
  • HEX(x):返回x的十六进制编码

其他

  • show warnings;
    查看SQL执行时的警告

Original: https://www.cnblogs.com/vgshots/p/16620969.html
Author: vgshots_kruskal
Title: MySQL学习(3)---MySQL常用命令



相关阅读1

Title: CentOS7 安装MySQL5.7企业版(商业版)及修改my.cnf默认datadir、socket路径后无法启动的处理方法

一、清理环境

查看是否已安装

rpm -qa |grep -i mysql

rpm -qa |grep -i mariadb --(centos7默认系统自带的查看版本号并进行删除)

rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --删除mariadb

MySQL学习(3)—MySQL常用命令

yum remove mariadb-libs-5.5.56-2.el7.x86_64 -- 删除mariadb

yum install perl perl-devel //安装依赖包,根据各系统环境而定

二、开始安装

--上传mysql rpm安装包到服务器(安装包可以去oracle官网下载)

rpm -ivh mysql-commercial-common-5.7.28-1.1.el7.x86_64.rpm

rpm -ivh mysql-commercial-libs-5.7.28-1.1.el7.x86_64.rpm

rpm -ivh mysql-commercial-libs-compat-5.7.28-1.1.el7.x86_64.rpm

rpm -ivh mysql-commercial-client-5.7.28-1.1.el7.x86_64.rpm

rpm -ivh mysql-commercial-server-5.7.28-1.1.el7.x86_64.rpm

MySQL学习(3)—MySQL常用命令

三、启动&开机自启

systemctl enable mysqld

systemctl start mysqld

systemctl status mysqld

MySQL学习(3)—MySQL常用命令

四、获取随机root密码

grep password /var/log/mysqld.log //日志文件查找临时密码

MySQL学习(3)—MySQL常用命令

mysql -u root -p

Enter password:

五、修改密码

修改当前登录用户

ALTER USER USER() IDENTIFIED BY 'Abc123@#$';

六、用户管理

创建新用户

mysql> use mysql;

_mysql> create user 'admin'@'%' identified by 'Abc123@#$';
Query OK, 0 rows affected (0.00 sec)
授权
grant select ,insert,update on db1.t1 to "admin"@'%' identified by "Abc123@#$";
grant all privileges on db1. to "admin"@'%' identified by "Abc123@#$";
grant all privileges on
.* to "admin"@'%' identified by "Abc123@#$";
_

取消授权

revoke all on db1.t1 from 'admin'@"%";
revoke all on db1. from 'admin'@"%";
revoke all privileges on
.* from 'admin'@'%';

3)设置用户 root 可以在任意 IP 下被访问
grant all privileges on . to root@"%" identified by "Abc123@#$";

MySQL学习(3)—MySQL常用命令

七、my.cnf参数配置调整MySQL数据存储目录datadir、socket

systemctl stop mysqld

cp -rp /var/lib/mysql /data --复制数据文件到新的目录

chown -R mysql:mysql /data/mysql

vi /etc/my.cnf

[root@Centos7 tools]# systemctl start mysqld

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

[root@Centos7 tools]# /usr/bin/mysql start
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/mysql.sock' (2)

调整目录后,MySQL无法启动了,目录权限处理过,还是启动不了

方法一、

临时关闭SELinux:

setenforce 0

永久关闭SELinux:

vi /etc/sysconfig/selinux

然后将配置SELinux=enforcing改为SELinux=disabled

# sestatus ##查看SELinux状态

# systemctl start mysqld --关闭SELinux后MySQL可以正常启动

MySQL学习(3)—MySQL常用命令

datadir、socket路径修改后因为SELinux安全问题导致无法启动,在网上找了几天也没有人有说清楚,说到需关闭SELinux就已经不错了。

其实真正的问题就是datadir、socket、log修改后的新路径文件夹权限只有MySQL用户和用户组,没有其他的用户,所以受SELinux影响无法写入导致启动失败。

方法二、

ls -ldZ /data/mysql ##查看目录的SElinux 标签

yum provides semanage ###安装

yum -y install policycoreutils-python.x86_64 ###安装

chcon -Rv -u system_u -t mysqld_db_t /data/mysql

semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"

restorecon -Rv /data/mysql

ls -ldZ /data/mysql ##再查看目录的SElinux 标签

# systemctl start mysqld ##处理后,MySQL启动正常

八、防火墙端口 开放

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

九、通过客户端远程连接测试。OK完成

Original: https://www.cnblogs.com/cny2022/p/16083112.html
Author: CNY2022
Title: CentOS7 安装MySQL5.7企业版(商业版)及修改my.cnf默认datadir、socket路径后无法启动的处理方法

相关阅读2

B: A请求B待响应 Note right of A:提交数据进行验证 B--
Title: Typora 开始收费,改用好玩的MarkText

收费......

MySQL学习(3)—MySQL常用命令

可以考虑使用: MarkText

简述MarkText

MarkText 这个工具侧重于"命令",导航栏都被收起来了。有些小伙伴感觉反而不好用,其实不然,是未了解该工具的强大之处。

md 文本本身就是侧重命令编写,MarkText 工具通过一些命令和快捷键使得编写md更加便捷,所以导航栏才收起来了。 比如:使用符号【@】就会弹出功能选择框。

下载路径:https://www.electronjs.org/apps/marktext

MySQL学习(3)—MySQL常用命令

可以根据自己的需要选择下载,喜欢使用免安装版本的就下载:marktext-x64-win.zip,解压即可使用,还是挺好的。

功能简单介绍

设置下界面

通过导航栏设置【侧边栏】 或者快捷键:ctrl + j

通过导航栏设置【标签】或者快捷键:ctrl + shift + b

建议记住快捷键

MySQL学习(3)—MySQL常用命令

设置之后的效果:可以查看目录下的多个文件、目录和搜索,这有点VSCode 的味道

MySQL学习(3)—MySQL常用命令

设置自己喜欢的主题

MySQL学习(3)—MySQL常用命令

编辑常用操作

文本操作:选中文字后可以做操作,如图👇 加粗、斜体、高亮、链接、图片等等。

MySQL学习(3)—MySQL常用命令

有些md语法不记得了怎么办?

在空白行输入符号:@ 就可以选择啦,是不是很强大。

部分截图,如图:可以选择表格、数学公式、HTML、代码、块引用。

并且部分功能下边有 语法提示、旁边还有 快捷键提示,用多了语法和快捷键就记得了。

MySQL学习(3)—MySQL常用命令

还有更好玩的功能

表情包语法::名称:

如图,敲了 🅰️ 然后工具就提示了很多表情 ,注意是先敲 :: 再在里面敲名称才会提示。

例子:🤣 🤤

MySQL学习(3)—MySQL常用命令

还可以画图

比如图中选中的 UML图

MySQL学习(3)—MySQL常用命令

例子:画个时序图

```sequence
Title: 时序图标题头
A->B: A请求B待响应
Note right of A:提交数据进行验证
B-->A: B同步响应A
Note left of B:提交数据进行验证
B->>C: B请求C,不等待消息响应
C->C: 数据校验
C-->>A: 异步响应


sequenceDiagram Title: 时序图标题头 A->B: A请求B待响应 Note right of A:提交数据进行验证 B-->A: B同步响应A Note left of B:提交数据进行验证 B->>C: B请求C,不等待消息响应 C->C: 数据校验 C-->>A: 异步响应

光标放在图的源码中,按ESC键可以简单的更改时序图的形状,效果如图👇

![Typora 开始收费,改用好玩的MarkText](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20221221/1209017-20220519122938566-920406928.gif)

> 参考文档:[https://github.com/marktext/marktext/blob/master/docs/README.md​](https://github.com/marktext/marktext/blob/master/docs/README.md%E2%80%8B)

![Typora 开始收费,改用好玩的MarkText](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20221221/1209017-20220518094149238-1964955140.gif)

[自己编写平滑加权轮询算法,实现反向代理集群服务的平滑分配](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247485469&idx=1&sn=d81920b2ce30a1d675c95aa881627bd6&chksm=ec62c880db154196d1f37129cb9dc30f107814fa2da2f130f08a207da814fd25eba54ac3c18a&scene=21#wechat_redirect)

[Java实现平滑加权轮询算法--降权和提权](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247485441&idx=1&sn=db09c8d233c743b3a4bdf7f4d2766b81&chksm=ec62c89cdb15418acf590bbe316a3e9cc9420959eac0d57858a5afb825cc45d8c20bafd2e765&scene=21#wechat_redirect)

[Java实现负载均衡算法--轮询和加权轮询](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247485432&idx=1&sn=81347615fdec6a4e7e2bb2ae74d85f1b&chksm=ec62c765db154e7348c1b34ebeed1e0ec006c68cfbeda17f1321d4e318b155258982d093b898&scene=21#wechat_redirect)

[Java往期文章](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NDM5NDM1NA==&action=getalbum&album_id=2209403024081485826#wechat_redirect)

[Java全栈学习路线、学习资源和面试题一条龙](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247485015&idx=1&sn=862bc2b379726b89cdb396ec0d325cc0&chksm=ec62c6cadb154fdc533111a253d72001534ab92de317cbde5c1c9f575548500bc734c3028484&scene=21#wechat_redirect)

[我心里优秀架构师是怎样的?](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247484980&idx=1&sn=cae79359673b411222f6108e8104e37a&chksm=ec62c6a9db154fbf1a7660547631dbc1ea3c764e1ccf30d223dab897dd7397aa730f3db56bf4&scene=21#wechat_redirect)

[免费下载经典编程书籍](http://mp.weixin.qq.com/s?__biz=MzI5NDM5NDM1NA==&mid=2247485128&idx=1&sn=7ede1feed6c28f3b598095fe2e076a8b&chksm=ec62c655db154f43baea9eb87c9f1b8993adee277eb9e499036795411f788c75f87f8d8b6070&scene=21#wechat_redirect)

更多优质文章,请关注WX公众号:Java全栈布道师

![Typora 开始收费,改用好玩的MarkText](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20221221/1209017-20220518094207835-159432170.jpg)

> Original: https://www.cnblogs.com/dennyLee2025/p/16288113.html
> Author: 渊渟岳
> Title: Typora 开始收费,改用好玩的MarkText

## **相关阅读3**
##  Title: Eureka详解系列(四)--Eureka Client部分的源码和配置

按照原定的计划,我将分三个部分来分析 Eureka 的源码:

今天,我们来研究第二部分的源码。

我的思路是这样子的:先明确 Eureka Client 拥有哪些功能,然后从源码角度分析如何实现,最后,我会补充 Eureka Client 的配置解读。

首先来回顾下 Eureka 的整个交互过程。

从用户的角度来讲,Eureka Client 要能够向 Eureka Server 注册当前实例以及获取注册表。

至于其他的功能,我们需要再思考下。

当我们把当前实例注册到了 Eureka Server 后,并非一劳永逸,如果当前实例故障了,Eureka Server 需要及时将它从注册表中剔除,那么,Eureka Server 怎么知道哪些实例故障了呢?做法比较简单,Application Service 需要定期向 Eureka Server 报告自己的健康状态,如果一直不报告,就认为是故障了。

考虑到性能和可靠性,Application Client 本地会缓存一份服务注册表,并不需要每次用到就从 Eureka Server 重新获取。但是,Application Service "来来去去",Eureka Server 的注册表并非一成不变,所以,Application Client 还需要定期同步注册表。

最后还有一点,我们注册到 Eureka Server 的实例信息,除了实例 IP、端口、服务名等,还有实例 id、附带的元数据等,这些是可更改的,Application Service 需要及时地将这些更改同步到 Eureka Server。

通过上面的分析,我们知道 **一个 Eureka Client 需要具备以下功能**:

知道了 Eureka Client 需要具备哪些功能,接下来我们就从源码的角度来看看怎样实现这些功能。

和之前一样,我更多的会从设计的层面来分析,而不会顺序地去看每个过程的代码,即重设计、轻实现。如果对源码细节有疑问的,可以交流学习下。

那么,还是从一个 UML 图开始吧。有了它,相信大家看源码时会更轻松一些。

通过这个图,我们再来看 Eureka Client 的几个功能:

```java
// 创建ApplicationInfoManager对象
ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(
    new MyDataCenterInstanceConfig(), new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());
// 创建EurekaClient对象,这个时候完成了几件事:
// 1. 注册当前实例到Eureka Server(实例的初始状态一般是STARTING);
// 2. 开启心跳、刷缓存、同步实例信息的定时任务;
// 3. 注册状态监听器到ApplicationInfoManager(不然后面的setInstanceStatus不会生效的)
EurekaClient eurekaClient = new DiscoveryClient(applicationInfoManager, new DefaultEurekaClientConfig());
// 设置当前实例状态为STARTING(原状态也是STARTING,所以这一句没什么用)
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.STARTING);
// 设置当前实例状态为UP触发(监听器触发,执行InstanceInfoReplicator的任务)
applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.UP);
// 和application client交互
// ······
// 关闭客户端,同时也会注销当前实例
eurekaClient.shutdown();

我们会发现, DiscoveryClient初始化化时做了非常多的事情,核心的源码都在它的构造方法里,大家感兴趣的可以自行阅读。

这里提醒下,Eureka 的定时任务有点奇怪,它不是完全交给 ScheduledExecutorService来调度,举个例子, ScheduledExecutorService只会按设定的延迟执行一次心跳任务,然后就不执行了,之所以能够实现定时调度,是因为心跳任务里又提交了一次任务,代码如下:

    public void run() {
        try {
            // ······
        } finally {
            // ······
            if (!scheduler.isShutdown()) {
                scheduler.schedule(this, delay.get(), TimeUnit.MILLISECONDS);
            }
        }
    }

这里我们来讲讲 EurekaInstanceConfigEurekaClientConfig的配置参数。

EurekaInstanceConfig--我是谁?

这些参数大部分用来向 Eureka Server 表明当前实例的身份,但我们会发现,这里混进了两个"异类"--lease.renewalInterval 和 lease.duration,这个不应该放在 EurekaClientConfig里吗?

我一开始也不明白,后来发现很重要的一点, EurekaClientConfig 的参数只能影响当前实例,而不能影响 Eureka Server,它的信息不能向 Eureka Server 传递,而 EurekaInstanceConfig的就可以,所以,除了表明实例的身份, EurekaInstanceConfig还有另外一个功能,就是向 Eureka Server 传递某些重要的交互参数。

# 同一个服务下存在多个实例,这个可以作为唯一标识区分它们。默认为当前实例的主机名
eureka.instanceId=zzs

# 服务名。默认unknown
eureka.name=SampleService

# 当前实例开放服务的端口,默认80
eureka.port=8001

# 当前实例多久向Eureka Server发送一次心跳,单位秒。默认30s
eureka.lease.renewalInterval=30
# 如果没收到心跳,Eureka Server隔多久将当前实例剔除,单位秒。默认90s
eureka.lease.duration=90

# 当前实例的虚拟主机名,通过这个可以直接访问到当前实例。默认:当前主机名+port
eureka.vipAddress=sampleservice.zzs.cn

# 绑定在当前实例的一些自定义信息,它们会被放在一个map里,其他Eureka Client可以拿来用。默认是一个空map
eureka.metadata.name=zzs
eureka.metadata.age=18

# 这几个一般不用,我就不展开了
eureka.appGroup=unknown
#eureka.asgName=
eureka.traffic.enabled=false
eureka.port.enabled=true
eureka.securePort=443
eureka.securePort.enabled=false
eureka.secureVipAddress=zzs:443
eureka.statusPageUrlPath=/Status
eureka.statusPageUrl=http://zzs:8001/Status
eureka.homePageUrlPath=/
eureka.homePageUr=http://zzs:8001/
eureka.healthCheckUrlPath=/healthcheck
eureka.healthCheckUrl=http://zzs:8001/healthcheck
eureka.secureHealthCheckUrl=https://zzs:443/healthcheck

EurekaClientConfig--和谁交互?怎么交互?

关于 Eureka Server 集群的配置,有三种方法:

这里还涉及到 region、zone 的概念,可以理解为:region 表示机器部署在不同的城市,zone 表示机器部署在同一个城市的不同机房里。默认情况下,Eureka Client 会优先选择自己所属 region 的 Eureka Server 来访问。

# 当前实例多久同步一次本地注册表,单位秒。默认30s
eureka.client.refresh.interval=30
# 当前实例多久同步一次实例信息,单位秒。默认30s
eureka.appinfo.replicate.interval=30

# 当前实例是否注册到Eureka Server。默认true
eureka.registration.enabled=true
# 当前实例是否需要从Eureka Server获取服务注册表
eureka.shouldFetchRegistry=true

# 当前实例可以和哪些region的Eureka Server交互
eureka.fetchRemoteRegionsRegistry=beijing,shanghai
# 当前实例所在的region
eureka.region=beijing
# region下有哪些zone
eureka.beijing.availabilityZones=zone-1,zone-2
eureka.shanghai.availabilityZones=zone-3
# zone下有哪些Eureka Server(这种配置可以通过EIP来避免写死IP,但扩展时还是要改,推荐使用DNS的方式)
eureka.serviceUrl.zone-1=http://ec2-552-627-568-165.compute-1.amazonaws.com:7001/eureka/v2/,http://ec2-368-101-182-134.compute-1.amazonaws.com:7001/eureka/v2/
eureka.serviceUrl.zone-2=http://ec2-552-627-568-170.compute-1.amazonaws.com:7001/eureka/v2/
eureka.serviceUrl.zone-3=http://ec2-500-179-285-592.compute-1.amazonaws.com:7001/eureka/v2/

# 当我们使用DNS配置serviceUrl时需要用到的配置(非常推荐使用,可以避免写死IP,且方便扩展)
eureka.shouldUseDns=true
eureka.eurekaServer.domainName=sampleservice.zzs.cn
eureka.eurekaServer.port=8001
eureka.eurekaServer.context=eureka/v2

# 这几个一般不用,我就不展开了
eureka.preferSameZone=true
eureka.appinfo.initial.replicate.time=40
eureka.serviceUrlPollIntervalMs=300
eureka.client.heartbeat.threadPoolSize=5
eureka.client.heartbeat.exponentialBackOffBound=10
eureka.client.cacheRefresh.threadPoolSize=5
eureka.client.cacheRefresh.exponentialBackOffBound=10
#eureka.eurekaServer.proxyHost=
#eureka.eurekaServer.proxyPort=
#eureka.eurekaServer.proxyUserName=
#eureka.eurekaServer.proxyPassword=
eureka.eurekaServer.gzipContent=true
eureka.eurekaServer.readTimeout=8
eureka.eurekaServer.connectTimeout=5
eureka.eurekaServer.maxTotalConnections=200
eureka.eurekaServer.maxConnectionsPerHost=50
eureka.eurekaserver.connectionIdleTimeoutInSeconds=45
#eureka.backupregistry=
eureka.shouldEnforceRegistrationAtInit=false
eureka.shouldEnforceFetchRegistryAtInit=false
eureka.shouldUnregisterOnShutdown=true
eureka.shouldFilterOnlyUpInstances=true
eureka.shouldOnDemandUpdateStatusChange=true
eureka.allowRedirects=true
eureka.printDeltaFullDiff=true
eureka.disableDelta=false
eureka.registryRefreshSingleVipAddress=false
eureka.dollarReplacement=_-
eureka.escapeCharReplacement=__
#eureka.encoderName=
#eureka.decoderName=
eureka.clientDataAccept=full
eureka.experimental.clientTransportFailFastOnInit=true

以上比较宏观地讲完了 Eureka Client 的源码和配置,感谢您的阅读。

Original: https://www.cnblogs.com/ZhangZiSheng001/p/14381169.html
Author: 子月生
Title: Eureka详解系列(四)--Eureka Client部分的源码和配置