MGR基本使用

2023-05-16

第一章:MGR介绍

MGR(MySQL Group Replication)是一个MySQL Server插件,可用于创建弹性,高可用MySQL集群方案。有一个内置的组成员服务,在任何给定的时间点,保持组的视图一致并可供所有服务器使用。服务器可以离开并加入组,视图也会相应更新。当成员离开组,故障检测机制会检测到此情况并通知组视图已更改。

1.1传统的数据主从复制

1.1.1主从复制

在这里插入图片描述

传统的数据主从辅助属于异步复制,从库起IO线程连接主库,获取主库二进制日志写到本地中继日志,并更新master-info文件(存放主库相关信息),从库再利用SQL线程执行中继日志。

1.1.2半同步复制

在这里插入图片描述

半同步复制是建立在基本的主从复制基础上,利用插件完成半同步复制,传统的主从复制,不管从库是否正确获取到二进制日志,主库不断更新,半同步复制则当确认了从库把二进制日志写入中继日志才会允许提交,如果从库迟迟不返回ack,主库会自动将半同步复制状态取消,进入最基本的主从复制模式。

1.2 组复制

在这里插入图片描述

组复制是一种可用于实现容错系统的技术。复制组是一个通过消息传递相互交互的server集群。复制组由多个server成员组成,如上图的master1,master2,master3,所有成员独立完成各自的事务。当客户端先发起一个更新事务,该事务先在本地执行,执行完成之后就要发起对事务的提交操作了。在还没有真正提交之前需要将产生的复制写集广播出去,复制到其他成员。如果冲突检测成功,组内决定该事务可以提交,其他成员可以应用,否则就回滚。最终,这意味着所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。

新成员加入组的简单流程:

  1. 当有新的成员加入组中,组内原有的成员会在二进制日志中插入一个视图切换的事件。
  2. 在组成员内找到一个donor捐赠之前缺失的数据,如果这个donor突然下线了,新成员会从新的donor获取缺失的数据,这时候组还在不断更新,新成员会将新的事件写到内存的一个临时空间
  3. 当获取到视图切换事件的时候,新成员将开始执行保存到内存临时空间的事件

1.3工作模式

  • 单主模式

只有一个server成员接受更新

  • 多主模式

所有的server成员同时接受更新

第二章:MGR部署

2.1前期规划

IP主机名数据库版本信息server-id
192.168.240.203MGR_NODE1MySQL-5.7.25203
192.168.240.204MGR_NODE2MySQL-5.7.25204
192.168.240.205MGR_NODE3MySQL-5.7.25205

2.2 环境准备

关闭防火墙以及selinux(所有机器执行)

# 关闭防火墙
systemctl  stop firewalld
# 临时关闭selinux
setenforce 0

配置主机名,按照先前规划,填写/etc/hosts文件

[root@localhost data]# cat /etc/hosts
192.168.240.203 mgr_node1
192.168.240.204 mgr_node2
192.168.240.205 mgr_node3

修改本机主机名(每台机根据情况修改自己主机名)

hostnamectl  set-hostname mgr_node1

2.3 安装MySQL5.7.25

在与本文档同级目录提供了MySQL5.7.25的rpm包,上传到所有服务器并执行下列命令

# 解压安装包
tar xf mysql-community-5.7.25-rpm.tgz
# 安装依赖包
yum install net-tools -y
# 卸载mariadb-libs包
yum remove mariadb-libs  -y
# 安装MySQL
cd repo.mysql.com/
rpm -ivh ./*

初始化数据库

# 创建存放数据库初始化信息的目录(所有机器都要执行)
mkdir -pv  /data/{data,log,temp}
# 修改数据目录属主属组
chown -R mysql:mysql /data
# 初始化数据库,设置默认密码为空
mysqld --initialize-insecure --datadir=/data/data --user=mysql
# 修改数据目录属主属组
chown -R mysql:mysql /data

查看一下初始化之后的数据目录结构

[root@localhost repo.mysql.com]# tree /data/ -L 1
/data/
├── data   # 存放MySQL数据信息
├── log    # 存放MySQL产生的错误日志,二进制日志信息
└── temp   # 存放MySQL的一些临时文件,比如pid,sock文件

数据目录如此设计,只是为了便于管理

2.4生成MGR组名

在MGR_NODE1节点上修改MySQL配置文件/etc/my.cnf

[mysqld]
user=mysql
port=3306
datadir=/data/data
log-error=/data/log/err.log
pid-file=/data/temp/mysqld.pid
socket=/data/temp/mysql.sock
symbolic-links=0

[client]
socket=/data/temp/mysql.sock

在MGR_NODE1节点上启动MySQL

mysqld  --defaults-file=/etc/my.cnf --daemonize

在MGR_NODE1节点上修改数据库密码

# 修改root密码,执行命令之后输入您要设置的root密码
mysqladmin  -uroot password

在MGR_NODE1节点上生成一个UUID,作为MGR组名

# 执行后输入密码
[root@localhost repo.mysql.com]# mysql -uroot -p -e "SELECT UUID()"
Enter password:
+--------------------------------------+
| UUID()                               |
+--------------------------------------+
| eb5d4f12-5f2f-11e9-8a72-000c29108615 |
+--------------------------------------+

组名为eb5d4f12-5f2f-11e9-8a72-000c29108615

再次修改MGR_NODE1配置文件/etc/my.cnf文件

[mysqld]
user=mysql
port=3306
datadir=/data/data
log-error=/data/log/err.log
pid-file=/data/temp/mysqld.pid
socket=/data/temp/mysql.sock
symbolic-links=0

server_id=203
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/data/log/binlog
binlog_format=ROW

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="eb5d4f12-5f2f-11e9-8a72-000c29108615"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "192.168.240.203:13306"
loose-group_replication_group_seeds= "192.168.240.203:13306,192.168.240.204:13306,192.168.240.205.13306"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=true

[client]
socket=/data/temp/mysql.sock

以上标准版文件需要更改的点有:

  • server_id:不能与其他MySQL实例重复
  • loose-group_replication_group_name:通过SELECT UUID()生成一个UUID作为组名
  • loose-group_replication_local_address:当前节点用于内部通讯的ip:port
  • loose-group_replication_group_seeds:组内成员通讯的ip:port

参数讲解:

基本参数描述
user启动进程的user
port数据库使用的端口
datadir数据库的数据目录位置
log-error数据库的错误日志位置
pid-file数据库的pid文件位置
socket数据库的sock文件位置
symbolic-links禁用符号链接以防止出现各种安全风险
MGR要求的相关参数描述
server_id不同实例必须保证此server_id不同,如果启用了二进制日志记录,则必须指定该选项,否则不允许服务器启动
gtid_mode使用全局事务标识符(GTID)来标识事务。将此选项设置为–gtid-mode=ON 要求 enforce-gtid-consistency设置为ON
enforce_gtid_consistencyON:不允许任何事务违反GTID一致性 OFF:允许事务违反GTID一致性。WARN:允许所有事务违反GTID一致性,但在这种情况下会生成警告
master_info_repository设置从站将主状态和连接信息记录到 FILE(master.info)还是TABLE (mysql.slave_master_info)中
relay_log_info_repository设置从站在中继日志中的位置是写入FILE (relay-log.info)还是 写入TABLE (mysql.slave_relay_log_info)中
binlog_checksum启用后,此变量会使主服务器为二进制日志中的每个事件写入校验和,当binlog_checksum禁用(值 NONE)时,服务器通过编写和检查每个事件的事件长度(而不是校验和)来验证它是否只将完整事件写入二进制日志
log_slave_updates设置从主服务器接受的更新是否写入二进制日志中
log_bin设置二进制日志的位置
binlog_format二进制日志格式,有行模式,语句模式,混合模式,使用MGR必须使用行模式
组复制相关参数描述
transaction_write_set_extraction定义用于生成标识与事务关联的写入的哈希的算法,哈希值将用于分布式冲突检测和处理
loose-group_replication_group_name通知插件它正在加入或创建的组,需要使用SELECT UUID()生成一个UUID
loose-group_replication_start_on_boot指示插件在服务器启动时不自动引导组操作
loose-group_replication_local_address诉插件使用哪个ip:port与组中的其他成员进行内部通信。这里的ip与端口不能与MySQL提供的ip:port 相同,如果使用相同ip则port必须不相同
loose-group_replication_group_seeds设置组成员的主机名和端口
loose-group_replication_bootstrap_group插件是否引导组,此选项只能在任何时候在一个服务器实例上使用,通常是第一次引导组时(或者在整个组关闭并重新备份的情况下)。如果多次引导组,例如当多个服务器实例设置了此选项时,则可以创建一个人工分裂脑情景,其中存在两个具有相同名称的不同组。
loose-group_replication_single_primary_mode单主模式设置为ON,多主模式设置为OFF
loose-group_replication_enforce_update_everywhere_checks在所有节点启用多主数据更新的严格一致性检查

重启数据库

# 关闭数据库,执行后输入root密码
mysqladmin  -uroot -p shutdown
# 启动数据库
mysqld  --defaults-file=/etc/my.cnf --daemonize
2.5启动首个MGR节点
# 登陆数据库
mysql -uroot -p

以下命令是在数据库中执行

# 创建MGR内部消息互通的用户
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'Hal@123';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

# 安装MGR插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
# 检查是否成功安装
SHOW PLUGINS ;

# 使用当前数据库节点引导组,一个组内只有一个节点能引导
# 不允许组内多次引导,这将导致产生两个相同名称的不同组
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

查看是否成功

mysql> SELECT * FROM performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 136fb2a3-5e5b-11e9-bc99-000c2990d255
 MEMBER_HOST: MGR_NODE1
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
1 row in set (0.00 sec)

MEMBER_STATE显示为ONLINE表示成功

2.6让其余节点加入组

从第一个节点复制/etc/my.cnf文件到其他主机进行修改

[mysqld]
user=mysql
port=3306
datadir=/data/data
log-error=/data/log/err.log
pid-file=/data/temp/mysqld.pid
socket=/data/temp/mysql.sock
symbolic-links=0

server_id=203
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/data/log/binlog
binlog_format=ROW

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="eb5d4f12-5f2f-11e9-8a72-000c29108615"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "192.168.240.203:13306"
loose-group_replication_group_seeds= "192.168.240.203:13306,192.168.240.204:13306,192.168.240.205.13306"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=true

[client]
socket=/data/temp/mysql.sock

修改的点如下

  • server_id修改为前期部署规划的值
  • loose-group_replication_local_address修改为该节点用于内部通讯的ip地址

启动数据库

mysqld  --defaults-file=/etc/my.cnf --daemonize

设置数据库root密码

mysqladmin  -uroot password

进入数据库

mysql  -uroot -p

以下操作在数据库中执行

# 创建MGR内部消息互通的用户
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'Hal@123';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

# 安装MGR插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';

# 加入组复制
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Hal@123' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

检查是否成功,数据库中执行

SELECT * FROM performance_schema.replication_group_members

MEMBER_STATE字段都为ONLINE即可

测试

在某个节点的数据库内执行

CREATE DATABASE test;
USE test;
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
INSERT INTO t1 VALUES (1, 'Luis');

在所有节点数据库内查看是否有这条数据

mysql> SELECT * FROM test.t1;
+----+------+
| c1 | c2   |
+----+------+
|  1 | Luis |
+----+------+
1 row in set (0.00 sec)

当所有节点都显示这条数据,则证明搭建成功

第三章:MGR监控

3.1performance_schema.replication_group_members

组成员信息

mysql> SELECT * FROM  performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | b956519d-5e82-11e9-aa61-000c291a4b91 | MGR_NODE3   |        3306 | ONLINE       |
| group_replication_applier | bb4d96d6-5e7c-11e9-829d-000c296df978 | MGR_NODE2   |        3306 | ONLINE       |
| group_replication_applier | e79b0376-5e6f-11e9-8d47-000c2990d255 | MGR_NODE1   |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
MEMBER_STATE描述
ONLINE该成员已准备好,这意味着客户端可以连接并开始执行事务
RECOVERING该成员正在积极成为组成员,目前正在进行恢复过程,从donor那里接收状态信息
OFFLINE插件已加载但该成员不属于任何组
ERROR恢复阶段或应用更改时出现错误,服务器就会进入此状态。
UNREACHABLE每当本地故障检测器怀疑某个服务器无法访问时,例如它被非自愿断开,它就会显示服务器的状态为UNREACHABLE。
CHANNEL_NAME描述
group_replication_recovery此通道用于与分布式恢复阶段相关的复制更改。
group_replication_applier此通道用于接受更新
3.2performance_schema.replication_group_member_stats

组成员状态信息

mysql> SELECT * FROM  performance_schema.replication_group_member_stats\G
*************************** 1. row ***************************
                      CHANNEL_NAME: group_replication_applier
                           VIEW_ID: 15553045738118081:5
                         MEMBER_ID: 48888dd5-5f3b-11e9-9b62-000c2990d255
       COUNT_TRANSACTIONS_IN_QUEUE: 0
        COUNT_TRANSACTIONS_CHECKED: 4
          COUNT_CONFLICTS_DETECTED: 0
COUNT_TRANSACTIONS_ROWS_VALIDATING: 0
TRANSACTIONS_COMMITTED_ALL_MEMBERS: eb5d4f12-5f2f-11e9-8a72-000c29108615:1-8
    LAST_CONFLICT_FREE_TRANSACTION: eb5d4f12-5f2f-11e9-8a72-000c29108615:7
1 row in set (0.00 sec)
参数描述
CHANNEL_NAME通道名称
VIEW_ID事务ID,前缀部分:组初始化时产生,为当时的时间戳,组存活期间该值不会发生变化。所以,该字段可用于区分2个视图是否为同一个组的不同时间点;后缀部分:每次视图更改会触发一次更改,从1开始单调递增
MEMBER_ID实例的UUID,每个成员都有不同的值
COUNT_TRANSACTIONS_IN_QUEUE待处理冲突检测的队列中的事务数。一旦检查了事务的冲突,如果它们通过了检查,它们就会排队等待提交
COUNT_TRANSACTIONS_CHECKED已检查冲突的事务数
COUNT_CONFLICTS_DETECTED未通过冲突检测检查的事务数
COUNT_TRANSACTIONS_ROWS_VALIDATING用于认证但未进行垃圾回收的事务数量
TRANSACTIONS_COMMITTED_ALL_MEMBERS已在复制组的所有成员上成功提交的事务
LAST_CONFLICT_FREE_TRANSACTION已检查的最后一个无冲突事务的事务标识符。
3.3performance_schema.replication_connection_status

显示有关组复制的信息,例如,已从组接收并在应用程序队列中排队的事务(中继日志)

mysql> SELECT * FROM  performance_schema.replication_connection_status\G
*************************** 1. row ***************************
             CHANNEL_NAME: group_replication_applier
               GROUP_NAME: eb5d4f12-5f2f-11e9-8a72-000c29108615
              SOURCE_UUID: eb5d4f12-5f2f-11e9-8a72-000c29108615
                THREAD_ID: NULL
            SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
 RECEIVED_TRANSACTION_SET: eb5d4f12-5f2f-11e9-8a72-000c29108615:1-8
        LAST_ERROR_NUMBER: 0
       LAST_ERROR_MESSAGE:
     LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
1 row in set (0.00 sec)
参数描述
CHANNEL_NAME通道名称
GROUP_NAME组名
SOURCE_UUID源UUID
THREAD_IDI/O线程ID号
SERVICE_STATEON(线程存在且处于活动状态或空闲状态),OFF(线程不再存在)或CONNECTING(线程存在且正在连接到主服务器)
COUNT_RECEIVED_HEARTBEATS:
LAST_HEARTBEAT_TIMESTAMP从库自上次重新启动或重置或发出CHANGE MASTER TO语句以来收到的心跳信号总数
RECEIVED_TRANSACTION_SET从库接收的所有事务对应的GTID集
LAST_ERROR_NUMBER导致I / O线程停止的最新错误的错误号
LAST_ERROR_MESSAGE导致I / O线程停止的最新错误的错误消息
LAST_ERROR_TIMESTAMPYYMMDD HH:MM:SS格式 的时间戳,显示最近的I / O错误发生的时间
3.4 performance_schema.replication_applier_status

显示与组复制相关的通道和线程的状态如果有许多不同的工作线程应用事务,那么工作表也可用于监视每个工作线程正在执行的操作

mysql> SELECT * FROM  performance_schema.replication_applier_status;
+---------------------------+---------------+-----------------+----------------------------+
| CHANNEL_NAME              | SERVICE_STATE | REMAINING_DELAY | COUNT_TRANSACTIONS_RETRIES |
+---------------------------+---------------+-----------------+----------------------------+
| group_replication_applier | ON            |            NULL |                          0 |
+---------------------------+---------------+-----------------+----------------------------+
1 row in set (0.00 sec)
3.5 mysql.slave_relay_log_info

存放从库relay log 信息

mysql> select * from mysql.slave_relay_log_info\G
*************************** 1. row ***************************
  Number_of_lines: 7
   Relay_log_name: ./mgr_node1-relay-bin-group_replication_applier.000002
    Relay_log_pos: 1941
  Master_log_name:
   Master_log_pos: 180
        Sql_delay: 0
Number_of_workers: 0
               Id: 1
     Channel_name: group_replication_applier
1 row in set (0.00 sec)

3.6mysql.slave_master_info

存放master相关信息

mysql> select * from mysql.slave_master_info\G
*************************** 1. row ***************************
       Number_of_lines: 25
       Master_log_name:
        Master_log_pos: 4
                  Host: <NULL>
             User_name:
         User_password:
                  Port: 0
         Connect_retry: 60
           Enabled_ssl: 0
                Ssl_ca:
            Ssl_capath:
              Ssl_cert:
            Ssl_cipher:
               Ssl_key:
Ssl_verify_server_cert: 0
             Heartbeat: 30
                  Bind:
    Ignored_server_ids: 0
                  Uuid:
           Retry_count: 86400
               Ssl_crl:
           Ssl_crlpath:
 Enabled_auto_position: 1
          Channel_name: group_replication_applier
           Tls_version:
1 row in set (0.00 sec)

第四章:组复制要求与限制

4.1要求
  • InnoDB存储引擎。数据必须存储在 InnoDB事务存储引擎中。事务以乐观方式执行,然后在提交时检查冲突。如果存在冲突,为了保持整个组的一致性,将回滚一些事务。这意味着需要事务存储引擎。此外, InnoDB还提供了一些附加功能,可以在与Group Replication一起操作时更好地管理和处理冲突。

  • 主键。必须使用拥有主键或者等效主键,也就是唯一且非空键

  • IPv4网络。 MySQL Group Replication使用的组通信引擎仅支持IPv4。

  • 网络性能。 MySQL Group Replication旨在部署在服务器实例彼此非常接近的集群环境中。网络延迟和网络带宽都会影响组的性能和稳定性。所有小组成员之间必须始终保持双向通信。如果阻止服务器实例的入站或出站通信(例如,通过防火墙或连接问题),则该成员无法在该组中运行,并且组成员(包括有问题的成员)可能无法报告受影响的服务器实例的正确成员状态

4.2限制
  • 启动二进制日志。 设置 --log-bin[=log_file_name]。MySQL Group Replication会复制二进制日志内容,因此二进制日志需要打开才能运行。
  • 二进制日志行格式。 设置--binlog-format=row,查看行格式的二进制日志可以用mysqlbinlog --base64-output='DECODE-ROWS' /data/log/binlog.000002或者在数据库内执行``
  • 从主库获取的日志提交之后记录到本地binlog日志中,设置--log-slave-updates
  • 启用GTID,设置--gtid-mode=ON
  • 设置--master-info-repository=TABLE--relay-log-info-repository=TABLE。复制应用程序需要将master信息和中继日志元数据写入系统表mysql.slave_master_infomysql.slave_relay_log_info系统表。这可确保组复制插件具有一致的可复制性和复制元数据的事务管理
  • 设置 --transaction-write-set-extraction=XXHASH64此标记用于检测冲突。
  • 多线程并行执行事务,相关参数如下
参数描述
–slave-parallel-workers=N并发执行的线程数,0为默认值,单线程模式,并行应用事务可能是无序的因此需要slave_preserve_commit_order=1
slave_preserve_commit_order对于单线程执行事务的模式,这个选项不起作用,对于多线程模式,启用这个选项可以确保事务执行的顺序与从站中继日志中顺序相同,如果设置为1时,slave_parallel_type=LOGICAL_CLOCK
slave_parallel_type并行复制的模式。默认DATABASE,表示库级别的并行复制;LOGICAL_CLOCK:基于组提交的并行复制方式

参考文档

  • https://dev.mysql.com/doc/refman/5.7/en/server-system-variable-reference.html
  • http://mysql.taobao.org/monthly/2017/08/01/
  • https://zhuanlan.zhihu.com/p/40627399
  • https://yq.aliyun.com/articles/571616/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MGR基本使用 的相关文章

  • VMware ESXi 6.7 安装LEDE

    VMware ESXi 6 7 安装LEDE LEDE是Linux嵌入式开发环境项目 xff0c 在众多路由器固件中 xff0c LEDE可玩性最高的 xff0c 但要真的玩得转 xff0c 还是要一定的耐心 很多小伙伴一般都喜欢 爱快做主
  • vncserver 看不到桌面解决办法

    转载 xff1a http www th7 cn system lin 201308 43197 shtml ubuntu13 04安装vncserver后只显示桌面 不显示菜单栏解决 0 背景介绍 xff1a 一般的server操作系统是
  • Mininet教程(七)Mininet Walkthrough

    文章目录 Mininet教程 xff08 七 xff09 Mininet Walkthrough日常使用指令显示mininet开启选项开启Wireshark主机与路由器之间交互测试主机之间连通性运行一个简单的web服务器和客户端清理缓存 高
  • html的基本知识

    1 常用HTML标签 其他 br标签 xff1a 强制换行 lt br gt lt br gt 应用场景 用于强行换行 gt 不参与分类 xff0c 不能设置其他样式 1 xff09 行级标记 文本格式化标签 span标签 无语义标签 xf
  • 用VC++ 6.0 写贪吃蛇界面

    贪吃蛇界面 第一次写博客 xff0c 有点小紧张 xff0c 也有点激动 不多说了emmmm xff0c 自己跟着网上的视频 xff0c 用C语言做了一个贪吃蛇程序 xff0c 为了学年设计 欢迎界面的部分编译 emmmm xff0c 因为
  • 一、固定定位

    元素的位置相对于浏览器窗口是固定位置 即使窗口是滚动的它也不会移动 xff1a 特性 特性 xff1a 1 元素脱离正常文档流 xff0c 不占位 也脱离文本流 xff0c 全脱 2 始终相对于浏览器窗口四个角为原点进行固定定位的 3 不会
  • 定位元素的层级顺序

    层级 语法 z index n 标签添加定位之后 xff0c 可以覆盖在页面的其他标签上 后面加载的定位元素默认会覆盖在先加载的定位元素上 z index属性 xff1a 设置定位元素的叠放次序 特性 xff1a 1 z index的属性值
  • CSS 透明

    透明度属性 1 rgba r g b a 颜色模式 兼容性 xff1a IE6 7 8下不兼容 xff0c IE9 43 支持 使用 xff1a background color属性 color属性 border color属性等中设置透明
  • 数据类型和流程控制语句

    1 回顾 操作标签内容 闭合标签 标签 innerHTML 标签 innerText 标签 innerHTML 61 值 标签 innerText 61 值 表单标签 标签 value 标签 value 61 值 操作标签属性 标签 属性名
  • day02 JS交互

    1 回顾 基于对象和事件驱动的解释性脚本语言 js的组成 ECMAscript js的标准和核心 DOM 文档对象模型 BOM 浏览器对象模型 js的特性 基于对象 事件驱动 解释性 跨平台 js的引入方式 行间引入 在开始标签上加js 结
  • 一. js逻辑

    1 回顾 js的数据类型 5种基本的数据类型 number 数值 string 字符串 boolean 布尔 undefined 未定义 null 空对象 一种特殊的数据类型 复合 引用 对象 object 对象 array 数组 func
  • Git版本控制工具之Windows系统安装

    1 xff1a Git安装 Windows版本Git下载 a xff1a 地址 https git scm com download win 注意 xff1a 我们上面下载的是2 19 0的windows 64位的版本 进行安装如下 a x
  • Keil5:Error: Flash Download failed - Target DLL has been cancelled

    解决方案 xff1a reset复位Download的节点设备
  • Keil报错:Undefined symbol GPIO_Init

    原因是所需要的C文件没有在工程里面 即使在stm32f10x conf h中开启了包含相关头文件 仍然会出现这样的错误
  • KEIL中SW Device没有识别芯片,jlink下载不进去的问题

    参考了以下链接之后 xff0c 未解决 避坑指南 GD32 KEIL中SW Device没有识别芯片 xff0c jlink下载不进去的问题 无风灬幡动的博客 CSDN博客 jlink识别不到芯片 https blog csdn net q
  • CAS单点登录(二)——搭建基础服务

    前一篇文章中 xff0c 我们对CAS及SSO xff08 单点登录 xff09 有了大致的了解 xff0c 今天我们开始讲解如何搭建一个简单的CAS服务认证中心 xff0c 如果你对CAS中单点登录的概念忘记了 xff0c 可以先去复习一
  • 【20220810】STM32控制各类外设芯片的过程就是配置、读、写该外设寄存器的过程

    STM32等 MCU控制各类外设芯片的过程 xff1a 就是配置 读 写该外设寄存器的过程 因此MCU开发最主要关注的是 xff1a 1 外设芯片的各个功能寄存器的用途 2 寄存器数据的逻辑含义 3 MCU与该外设芯片的通信引脚
  • 【20220816】接触新的通讯协议编程时,只需关注通讯协议初始化和数据接收缓存和发送缓存

    接触新的通讯协议编程时 xff0c 只需关注通讯协议初始化和数据接收缓存和发送缓存 因为通讯协议的实现通常是由硬件或软件实现 xff0c 比如以太网的PHY层芯片 43 MCU的ETH接口 xff0c PHY层芯片 43 MCU的ETH内部
  • Keil5修改与“选中文本“相同变量的背景色

  • C语言的运算符优先级表格

    C语言的运算符包括单目运算符 双目运算符 三目运算符 xff0c 优先级如下 xff1a 第1优先级 xff1a 各种括号 xff0c 如 等 成员运算符 xff1b 第2优先级 xff1a 所有单目运算符 xff0c 如 43 43 等

随机推荐

  • 关于单片机运行时程序卡在B.处的解决方法

    程序运行时 xff0c 程序跳转到startup n32g45x s文件中的B 处卡死 解决方法 xff1a 程序卡死在B 处说明有中断没有处理 xff0c 导致程序进入中断后无法跳出
  • node执行npm -install -g npm版本提示升级成功但执行npm -v还是原来的版本解决方法

    C Users 用户名 AppData Roaming npm node modules npm 的npm复制到node js安装目录下的node modules npm给替换掉 前提是执行npm install g npm成功 执行成功会
  • JAVA工具篇--3 maven项目转gradle项目

    前言 xff1a 将已有的Maven 项目转换为Gradle 项目 xff1b 1 项目转换 xff1a 1 1 win 43 r 打开cmd命令窗口 然后进入到maven项目根目录后 xff0c 输入命令 gradle init span
  • 解决高度塌陷的几种方法

    引入 进行页面布局时 xff0c 为了能够达到自适应 xff0c 通常高度是不会进行固定设置的 xff0c 而使用float进行元素的浮动后 xff0c 由于没有内容的高度 xff0c 所以会发生父元素的高度塌陷问题 xff0c 为了解决此
  • Docker镜像、容器操作

    文章目录 一 Docker镜像操作1 搜索镜像2 获取镜像3 查看镜像查看下载到本地的所有镜像查看下载的镜像文件信息查看镜像详细信息 4 为本地的镜像添加新的标签5 镜像导出导入到本地导出镜像 xff0c 将镜像保存为本地文件导入镜像 xf
  • Python 爬虫库以及库函数总结&&踩坑

    1 Re库的基本使用 Re库介绍 xff1a Re库是Python的标准库 xff0c 主要用于字符串匹配 调用方式 xff1a import re 正则表达式的表示类型 xff1a raw string类型 xff08 原生字符串类型 x
  • mysql创建超级用户

    在安装MySql后只有一个超级管理权限的用户ROOT xff0c 而且ROOT限制只能在数据库本机上使用 xff0c 如果我们要远程管理MySql咋办呢 xff1f 那么事实上我们需要添加一个具有超级管理权限并且可能远程访问的超级用户 xf
  • 论文笔记:Diffusion-Convolutional Neural Networks (传播-卷积神经网络)

    Diffusion Convolutional Neural Networks xff08 传播 卷积神经网络 xff09 2018 04 09 21 59 02 1 Abstract 我们提出传播 卷积神经网络 xff08 DCNNs x
  • JavaEE——CSS3选择器

    声明 xff1a 本栏目所使用的素材都是凯哥学堂VIP学员所写 xff0c 学员有权匿名 xff0c 对文章有最终解释权 xff1b 凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记 CSS3选择器 选择器中的属性 xff1a 之前介绍过
  • vscode 调试 webpack

    在vscode生成的launch json配置文件 span class token punctuation span span class token string 34 version 34 span span class token
  • CentOS8安装

    文章目录 下载镜像安装CentOS8总结参考文档 下载镜像 国内有很多镜像站都可以下载到阿里镜像站或者网易镜像站等 这里使用的是网易镜像站链接 xff1a http mirrors 163 com centos 安装CentOS8 注意 x
  • prometheus基于文件的服务发现

    prometheus基于文件的服务发现 prometheus配置文件如下 xff1a span class token key atrule global span span class token punctuation span spa
  • MySQL8.0自定义表空间

    文章目录 MySQL8 0自定义表空间语法创建表空间语法修改表空间语法 示例参考文档 MySQL8 0自定义表空间 从MySQL 8 0开始允许用户自定义表空间 xff0c 不同表的表空间可以设置使用不同磁盘 xff0c 可以做到冷热数据的
  • SSH远程Ulimit不生效

    SSH远程Ulimit不生效 问题描述 操作系统 etc security limits conf文件内容如下 xff1a soft memlock unlimited hard memlock unlimited 使用远程连接工具moba
  • 常见加密算法及常见加密算法原理

    加密算法和协议 对称加密 简介 xff1a 加密和解密使用同一个密钥 常见的算法 xff1a DES xff1a Data Encryption Standard 3DES xff1a Triple DES AES xff1a Advanc
  • Zabbix利用SNMP方式监控

    SNMP简介 简单网络管理协议 xff08 SNMP xff0c Simple Network Management Protocol xff09 构成了互联网工程工作小组 xff08 IETF xff0c Internet Enginee
  • Ansible 利用copy模块复制多个文件

    今天写了一个Ansible自动化安装mysql的脚本 xff0c 用copy模块复制多个文件的时候格式总是出错 错误的内容是格式不对 xff0c 语法有问题 最后通过查看文档解决了 中文文档的循环部分的章节 xff1a http www a
  • xtrabackup恢复单表

    在一般生产环境下可能会删表 xff0c 这时候如果基于数据库恢复 xff0c 然后再把那个表恢复过来 xff0c 就比较麻烦 xff0c 这里提供一个基于物理备份直接恢复单表的方法 在innodb引擎设置独立表空间 xff0c 一般表对应的
  • Linux也支持远程桌面,看来是孤陋寡闻了。

    Linux也支持远程桌面 xff0c 看来是孤陋寡闻了 最近在学习树霉派 xff0c 一个超牛比的东西 xff0c 只有信用卡片般大小 xff0c 却是麻雀虽小 xff0c 五脏俱全 xff0c 里面装了Linux系统 xff0c 又不带显
  • MGR基本使用

    第一章 xff1a MGR介绍 MGR MySQL Group Replication 是一个MySQL Server插件 xff0c 可用于创建弹性 xff0c 高可用MySQL集群方案 有一个内置的组成员服务 xff0c 在任何给定的时