mysql高级知识之集群

news2024/11/15 10:35:54

一、安装

        源码编译MySQL,若需要MySQLtar包可私信我

#创建数据目录
mkdir /data/mysql -p

#安装相关依赖
yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm
yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y

#解压MySQL包,并进入其目录
tar zxf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44/

#进行源码安装
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/

#有几个核就j几
make -j2

#安装
make install

#拷贝启动文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/

#修改配置文件
vim /etc/my.cnf
[mysqld]	
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0

#设置环境变量
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
source ~/.bash_profile

#建立mysql用户
useradd -s /sbin/nologin -M mysql

#将mysql数据目录归属于mysql用户
chown mysql.mysql -R /data/mysql/

#清空数据目录,注意非实验环境需先备份其中内容
rm -rf /data/mysql/*

#MySQL初始化,注意初始化之后会产生一个临时密码,在第一次登陆后需改密码
mysqld --user mysql --initialize

#登录MySQL,并修改root密码,第一次登录不修改密码使用不了
mysql -uroot -p'j;t/EZJ*g1y7'
alter user root@localhost identified by 'Mysql@123';

#设置MySQL开机自启动
yum install chkconfig -y
chkconfig mysqld on ###不设定启动级别,默认2345
chkconfig --list

在三台主机上安装MySQL,具体如下 

主机 主机名 角色
192.168.220.10 node1
192.168.220.20 node2
192.168.220.30 node3

 二、主从复制

1、干净数据库主从复制

步骤如下

        1)分别在主库从库设定不同的server-id以区分不同的数据库
        注:设定server-id后从机设定了read_only=1也可以写入,在设定server-id之后不让从机写入需设定super_read_only=on

        2)设定数据库开始二进制日志

        3)在主库上创建主从复制的用户,并给予权限

        4)配置从库

#主库node1--配置server-id和开启二进制日志(注,修改完配置文件需要重启数据库)
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1            #server-id
log-bin=mysql-bin      #二进制日志

#主库--创建用户并授权(登录数据库自己解决)
create user repl@'%' identified by 'Mysql@123';        #创建用户
grant replication slave on *.* to repl@'%';            #授权

#配置完成之后可查看master状态
mysql> show master status ;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      595 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#从库node2--配置server-id和开启二进制日志(注,修改完配置文件需要重启数据库)
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=2            #server-id
log-bin=mysql-bin      #二进制日志

#从库node2--配置主从
change master to master_host='192.168.220.10',master_user='repl',master_password='Mysql@123',master_log_file='mysql-bin.000001',master_log_pos=595;
start slave;

#可以查看slave状态
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.220.10
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 595
               Relay_Log_File: node2-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes        #看到IO线程Yes
            Slave_SQL_Running: Yes        #看到SQL线程Yes则说明主从配置成功

2、有数据的数据库主从复制

步骤如下

        1)分别在主库从库设定不同的server-id以区分不同的数据库
        注:设定server-id后从机设定了read_only=1也可以写入,在设定server-id之后不让从机写入需设定super_read_only=on

        2)设定数据库开始二进制日志

        3)在主库上创建主从复制的用户,并给予权限

        4)导出主库数据,传到从库做还原

        注:在企业搭建主从复制拉平数据时,需要先将主库锁起来

        5)配置从库

#主库node1--配置server-id和开启二进制日志(注,修改完配置文件需要重启数据库)
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1            #server-id
log-bin=mysql-bin      #二进制日志

#主库--创建用户并授权(登录数据库自己解决)
create user repl@'%' identified by 'Mysql@123';        #创建用户
grant replication slave on *.* to repl@'%';            #授权

#配置完成之后可查看master状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1481 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#主库和从库之间拉平数据,主库要先锁表
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

#验证表是否锁住
mysql> insert into db1.tb1 values('3','力迅');
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock

#导出主库数据(注:企业中不能将数据库密码显示输入)
mysqldump -uroot -p'Mysql@123' -B db1 > mysql.sql

#将sql传至新的node节点
scp /root/mysql.sql root@node3:/root

#从库node3--配置server-id和开启二进制日志(注,修改完配置文件需要重启数据库)
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=3            #server-id
log-bin=mysql-bin      #二进制日志

#从库导入主库数据(注:需要先登录数据库)
mysql> source /root/mysql.sql

#从库node3--配置主从
change master to master_host='192.168.220.10',master_user='repl',master_password='Mysql@123',master_log_file='mysql-bin.000001',master_log_pos=595;
start slave;

#可以查看slave状态
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.220.10
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1481
               Relay_Log_File: node3-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes            #看到两个线程双Yes则配置成功

#主从搭建好之后把主库解表
mysql> unlock tables;

3、SQL_delay(延迟复制,给主库上一个保险)

        延迟复制时用来控制sql 线程的,和 i/o 线程无关
        这个延迟复制不是i/o 线程过段时间来复制, i/o 是正常工作的
        是日志已经保存在slave 端了,那个 sql 要等多久进行回放

步骤如下

        1)先停止从库SQL线程

        2)设置master_delay

        3)重新启动SQL线程 

#将node3配置为延迟复制从库
#停止SQL线程
STOP SLAVE SQL_THREAD;

#修改master_delay时间
CHANGE MASTER TO MASTER_DELAY=60;

#开启SQL线程
START SLAVE SQL_THREAD;

#在show slave status;内容里看到以下内容就配置成功
    SQL_Delay: 60

4、慢查询日志

  •  慢查询,顾名思义,执行很慢的查询
  • 当执行 SQL 超过 long_query_time 参数设定的时间阈值(默认 10s )时,就被认为是慢查询,这个 SQL语句就是需要优化的
  • 慢查询被记录在慢查询日志里
  • 慢查询日志默认是不开启的
  • 如果需要优化 SQL 语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。
#慢查询日志默认不开启
mysql> show variables like "slow%";
+---------------------+----------------------------+
| Variable_name       | Value                      |
+---------------------+----------------------------+
| slow_launch_time    | 2                          |
| slow_query_log      | OFF                        |
| slow_query_log_file | /data/mysql/node1-slow.log |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

#慢查询默认查询时间为10s
mysql> show variables like "long%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

#开启慢查询日志,两种方法,一种通过命令行,一种通过修改配置参数,以下是命令行
set global slow_query_log=on

#验证慢查询日志是否开启
mysql> show variables like "slow%";
+---------------------+----------------------------+
| Variable_name       | Value                      |
+---------------------+----------------------------+
| slow_launch_time    | 2                          |
| slow_query_log      | ON                         |
| slow_query_log_file | /data/mysql/node1-slow.log |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

#慢查询日志记录在slow_query_log_file所对应的位置/data/mysql/node1-slow.log里

5、并行复制

        默认情况下slave 中使用的是 sql 单线程回放 ,在master 中时多用户读写,如果使用 sql 单线程回放那么会造成组从延迟严重,开启MySQL 的多线程回放可以解决上述问题
#查看默认情况下slave的线程情况
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
|  2 | root        | localhost | db1  | Query   |    0 | starting                                               | show processlist |
|  5 | system user |           | NULL | Connect | 4022 | Waiting for master to send event                       | NULL             |
|  7 | system user |           | NULL | Connect | 2911 | Slave has read all relay log; waiting for more updates | NULL             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

#将node2设定为多线程回放
slave-parallel-type=LOGICAL_CLOCK  #基于组提交
slave-parallel-workers=16          #开启的线程数量
master_info_repository=TABLE       #将master信息记录在表中,默认记录/data/mysql/master_info
relay_log_info_repository=TABLE    #将回放日志信息记录在表中,默认记录在/data/mysql目录下
relay_log_recovery=ON              #日志回放恢复功能开启

#查看修改过后slave的线程情况
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
|  1 | system user |           | NULL | Connect |    5 | Waiting for master to send event                       | NULL             |
|  2 | system user |           | NULL | Connect |    5 | Slave has read all relay log; waiting for more updates | NULL             |
|  3 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  4 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  5 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  7 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  8 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  9 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 10 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 11 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 12 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
11 rows in set (0.00 sec)

6、gtid模式

        思维引导:为什么需要gtid模式?

        在master 端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端与master端一定会延迟, 这种延迟在 slave 端的延迟可能会不一致,当 master 挂掉后 slave 接管,一般会挑选一个和master延迟日志最接近的充当新的master,其余的slave主机重新指向新的master主机, 这时候按照之前的配置我们需要知道新的 master 上的 pos id ,但是我们无法确定新的 master slave 间差多少,于是我们就需要一个全局的日志,gtid

配置过程

  1. 在所有节点上开启gtid模式
  2. 停止所有的slave
  3. 重新配置从库change master to
  4. 启动所有slave节点
#在所有节点上开启gtid
[root@node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=1
gtid-mode=on                #以下两行内容,开始gtid
enforce-gtid-consistency=on

#从库操作皆以node2为例
mysql> stop slave;
mysql> change master to master_host='192.168.220.10',master_user='repl',master_password='Mysql@123',master_auto_position=1;
mysql> start slave;


#检验
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.220.10
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: node2-relay-bin.000002
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes            #出现双Yes代表主从没问题
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 574
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 7ead7e03-687d-11ef-8256-000c298c629a
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 1            #出现这个则表示gtid模式成功开启
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

7、异步主从架构

        实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中,会基于3 个线程来操作, 一个主库线程,两个从库线程。

三个线程
  • 二进制日志转储线程( Binlog dump thread )是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event )的时候,会在 Binlog 上加锁,读取完成之后,再将锁释放掉。
  • 从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog 。这时从库的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++入门day3-面向对象编程(中)

前言:C入门day2-面向对象编程(上)-CSDN博客 运算符重载 我们接触过函数重载,就是同名的函数有不同的功能。那么运算符重载,顾名思义也是赋予运算符其他的功能。在这里,我个人以为,运算符就是特…

C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 函数是语言的基本组成部分,也是面向对象编程的基石,他体现了封装的思想,代码的复用的功能。欢迎点赞 收藏 关注,本人将会持续更新 文章目录 函数什么是函数&am…

彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项

近日,由中国教育发展战略学会人工智能与机器人教育专业委员会指导,北京教育信息化产业联盟主办的第一届人工智能教育应用论坛暨 AI 教育科技成果展在北京隆重举办。本次活动以“ AI 强校大时代 —— 用新质生产力打造金钥匙强校”为主题,汇聚…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

数据结构(单向链表)

单向链表代码 #ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node {DataType data;struct node *pnext; }Link_Node_t;typedef struct link {Link_Node_t *phead;int clen; }Link_t;extern Link_t *link_creat(); extern int push_link_head(Link_t *…

智慧公厕技术应用、系统架构、应用功能有哪些?@卓振思众

智慧公厕的标准涵盖了多个方面,包括技术应用、系统架构、应用功能以及环保节能等。以下是【卓振思众】整理的一些标准要点: 技术应用‌物联网技术‌:通过无线传感器、监控设备等实时采集公厕内部环境数据。‌大数据与云计算‌:对数…

2157. 优秀的拆分(power)

代码 #include<bits/stdc.h> using namespace std; int a[10001]; int main() {int n,t1,k0;bool flagfalse;cin>>n;if(n%21) {cout<<-1;return 0;}while(n>0){if(n%21){k;a[k]t; }nn/2;tt*2;}if(k>1) {flagtrue;for(int ik;i>1;i--)cout<&l…

lit-llama代码解析

https://github.com/Lightning-AI/lit-llama/blob/main/README.md 下载的时候会报错误&#xff0c;因为网不行&#xff0c;一种方法就是多次尝试&#xff0c;另一种方法是终端连上代理下载 pycharm连接hugging face等网站_hugging face怎么连接-CSDN博客 根据指引下载权重 下…

springboot,maven多模块开发,子模块获取不到父模块添加的依赖,有多个root模块问题解决

错误示范 我以为放进去然后重载一下就是子模块了 导致后续在外层加的依赖&#xff0c;其article都接收不到 解决方案 需要在父模块的modules注册子模块 修改前后对比 此时子模块也能获取父模块的依赖

DDD设计方法-2-聚合、实体、值对象

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计方法-2-聚合、实体、值对象&a…

基于mspm0g3507的智能送药小车(21年电赛f题,openmv寻迹,k210数字识别,并行pid调制)项目实验报告

2024年全国大学生电子设计竞赛&#xff08;TI杯&#xff09; 2024年7月17日 摘要&#xff1a;本项目由微处理器MSPM0G3507&#xff0c;编码器电机驱动&#xff0c;OPENMV、K210视觉处理单元&#xff0c;红外药品检测单元&#xff0c;ZIGBEE无限透传单元&#xff0c;OLED显示&am…

Docker数据卷和Dockerfile

1、什么是Docker数据卷 前言&#xff1a; 在下载的镜像中&#xff0c;我们不能够去改变它内部的一些配置&#xff0c;因为docker的镜像文件是已经配置好的&#xff0c;无法改变&#xff0c;我们只能改变镜像启动后的容器里面的内容&#xff0c;但是又因为&#xff0c;容器本来…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器&#xff1a; (2)拦截器的…

【VMware】麒麟系统网络连接配置

在VMware配置页面点击编辑&#xff0c;进入虚拟网络编辑器将默认的 VMnet0删除&#xff0c;新建网络&#xff0c;设置桥接模式为Intel 打开主机cmd,查看主机IP地址&#xff0c;获取子网掩码&#xff0c;默认网关及DNS服务器 4.在主机寻找可用IP地址&#xff0c;ping不通的为未…

探秘发酵过程:酵母菌如何为白酒赋予不同风味?

在白酒酿造的神秘世界里&#xff0c;发酵过程如同一位隐形的艺术家&#xff0c;用其不同的笔触为白酒勾勒出千变万化的风味。而在这背后&#xff0c;酵母菌作为发酵的主角&#xff0c;发挥着至关重要的作用。今天&#xff0c;就让我们一起探秘发酵过程&#xff0c;了解酵母菌如…

shell 学习笔记:变量、字符串、注释

目录 1. 变量 1.1 定义使用变量 1.2 变量命名规则 1.3 只读变量 1.4 删除变量 1.5 变量类型 1.5.1 字符串变量 1.5.2 整数变量 1.5.3 数组变量 1.5.3.1 整数索引数组 1.5.3.2 关联数组 1.4 环境变量 1.5 特殊变量 2. 字符串 2.1 单引号字符串 2.2 双引…

erlang学习:用OTP构建系统23.12练习题

练习要求 制作一个名为prime_tester_server的gen_server&#xff0c;让它测试给定的数字是否是质数。 你可以使用lib_primes.erl里的is_prime/2函数来处理&#xff08;或者自己实现一个更好的质数测试函 数&#xff09;。把它添加到sellaprime_supervisor.erl的监控树里。 质…

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度&#xff1a;统计以该节点为起始点箭头指向外面的边的条数 入度&#xff1a;统计箭头指向该节点的边数 度为1的节点为悬挂节点&#xff0c;边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…

ARP协议(原理,特点,报文格式,具体过程),ARP缓存(有效时间,为什么),ARP欺骗(定向断网,成为中间人),RARP简单介绍

目录 ARP协议 引入 介绍 原理 arp请求/响应 特点 报文格式 硬件类型 协议类型 硬件/协议地址长度 op(操作码) 过程 发送请求并处理 返回响应并处理 总结 arp缓存 介绍 arp表项的有效时间 解释 arp欺骗 介绍 定向断网 基于arp的成为中间人的方式 多向…

跟李沐学AI:序列模型

目录 序列数据 自回归模型 马尔可夫假设 潜变量模型 序列模型总结 序列数据 实际中很多数据是时序结构的&#xff0c;如&#xff1a;电影的评价随时间的变化而变化&#xff1a;拿奖后评分上升、电影整体质量提升&#xff0c;人们要求变高。。。等等 除此之外&#xff0c;音…