6种MySQL高可用方案对比分析

大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。

MySQL的高可用方案有多种,常见的包括以下几种:

1. 主从复制(Master-Slave Replication)

  • 原理:主库进行写操作,数据通过异步或半同步复制到从库。可以通过从库进行读操作,实现读写分离。
  • 优点:实现简单,适用于读多写少的场景。
  • 缺点:主库故障时,手动提升从库为主库,切换较慢。可以借助管理工具,如MHA(Master High Availability)来自动切换主从。

**主从复制(Master-Slave Replication)**是一种常见的MySQL高可用方案,主要用于数据读写分离、备份、故障恢复等场景。以下是适合的业务场景和实现步骤的详细介绍。

一、主从复制适合的业务场景

  1. 读多写少的业务

    • 在一些业务场景中,数据库的读操作远多于写操作。通过将读操作分发到从库,减轻主库的压力。
    • 例如:电商平台中的商品展示页面,读操作远多于写操作。
  2. 数据备份

    • 主从复制可以为数据提供实时备份,从库上的数据几乎实时同步主库。即便主库故障或出现问题,也可以通过提升从库为主库来确保业务的持续运行。
  3. 故障恢复

    • 主库故障时,可以快速切换到从库,提供一定程度上的高可用性。
  4. 数据分析

    • 数据分析或报表生成往往对实时性要求不高,可以从从库中读取数据进行分析,避免影响主库的性能。

二、主从复制的实现步骤

1. 准备工作
  • 环境要求:假设有两台服务器,分别作为主库(Master)和从库(Slave)。IP地址假设为:
    • 主库IP:192.168.1.100
    • 从库IP:192.168.1.101
  • 安装MySQL:确保主库和从库都已经安装了MySQL,并进行基础配置。
2. 主库(Master)配置
  1. 修改主库的MySQL配置文件
    • 编辑主库的MySQL配置文件my.cnfmy.ini(路径根据系统不同有所差异,一般在/etc/my.cnf/etc/mysql/my.cnf)。
     [mysqld]# 开启二进制日志 (Master必须开启)log-bin=mysql-bin# 设置server-id,确保在集群中唯一server-id=1# 设置binlog格式,推荐ROWbinlog_format=ROW# 可选:限制binlog大小max_binlog_size=100M# 可选:保留二进制日志的天数expire_logs_days=7
  1. 重启MySQL服务

    在修改配置文件后,需要重启MySQL服务以使配置生效:

   sudo systemctl restart mysqld
  1. 创建用于复制的用户

    在主库上为从库创建一个专门用于复制的用户,并授予复制权限:

   CREATE USER 'replica'@'192.168.1.101' IDENTIFIED BY 'replica_password';GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.1.101';FLUSH PRIVILEGES;
  1. 锁定数据库并获取二进制日志文件和位置

    由于复制需要基于二进制日志来同步数据,所以需要锁定表来确保数据的一致性:

   FLUSH TABLES WITH READ LOCK;SHOW MASTER STATUS;

运行SHOW MASTER STATUS;命令后,MySQL会返回类似如下信息:

   +------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 |      120 |              |                  |+------------------+----------+--------------+------------------+

记录下FilePosition的值,例如:mysql-bin.000001120。它们将在配置从库时使用。

  1. 备份主库数据

    使用mysqldump进行全量备份,将数据导出并导入从库:

   mysqldump -u root -p --all-databases --master-data > master_backup.sql
  1. 解锁表

    完成备份后,解除数据库锁定:

   UNLOCK TABLES;
3. 从库(Slave)配置
  1. 修改从库的MySQL配置文件
    • 编辑从库的MySQL配置文件my.cnfmy.ini
     [mysqld]# 设置server-id,确保在集群中唯一server-id=2# 从库不需要开启二进制日志,除非需要级联复制log-bin=mysql-slave-bin# 其他可选配置relay-log=relay-bin
  1. 重启从库MySQL服务

    使配置生效:

   sudo systemctl restart mysqld
  1. 导入主库数据

    将在主库导出的备份文件导入到从库:

   mysql -u root -p < master_backup.sql
  1. 配置复制

    使用主库的二进制日志文件名和位置,配置从库的复制:

   CHANGE MASTER TOMASTER_HOST='192.168.1.100',MASTER_USER='replica',MASTER_PASSWORD='replica_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;
  1. 启动复制

    配置完成后,启动从库的复制进程:

   START SLAVE;
  1. 检查复制状态

    通过以下命令查看从库的复制状态:

   SHOW SLAVE STATUS\G;

需要确认以下两个字段为Yes,表明复制正常运行:

   Slave_IO_Running: YesSlave_SQL_Running: Yes
4. 读写分离配置(可选)
  1. 应用层处理读写分离

    • 应用程序可以通过代码配置,将写操作定向到主库,将读操作定向到从库。
    • 例如:在Java Spring中,使用AbstractRoutingDataSource来根据操作类型选择不同的数据库连接。
  2. 使用中间件(例如Mycat、ProxySQL)

    • 可以使用数据库中间件,将读写分离的逻辑下沉到中间件层,实现更灵活的负载均衡。

三、维护和监控

  1. 监控主从同步延迟

    • 通过Seconds_Behind_Master字段监控从库的延迟,确保数据同步及时。
  2. 定期备份从库

    • 虽然从库的数据是实时同步的,但仍需定期备份从库,防止意外数据丢失。
  3. 故障切换

    • 当主库故障时,可以手动提升从库为主库:
     STOP SLAVE;RESET SLAVE ALL;

主从复制可以为读多写少的业务场景提供一个简单而有效的解决方案,既提升了读操作的性能,也增强了数据库的可靠性。

2. 半同步复制(Semi-Synchronous Replication)

  • 原理:在主库提交事务之前,至少一个从库确认收到数据,才算提交成功。相比于异步复制,有一定的延迟但更安全。
  • 优点:保证数据一致性较强,适用于对数据一致性要求高的业务。
  • 缺点:相比异步复制延迟较大,尤其在网络状况不佳时。

**半同步复制(Semi-Synchronous Replication)**是介于异步复制和全同步复制之间的一种高可用方案。它在写操作时不仅要求主库将数据写入二进制日志文件,还要求至少一个从库确认收到数据后,主库才认为提交成功。相比异步复制,它提供了更好的数据一致性保障,但又不像全同步复制那样带来较大的性能开销。以下将详细介绍它的适用业务场景和具体实现步骤。

一、半同步复制适合的业务场景

  1. 对数据一致性要求较高的业务

    • 半同步复制适用于那些对数据一致性要求较高的业务场景。例如,金融系统、银行交易系统或电子商务平台,这些业务对数据的一致性要求非常严格,需要确保主库上的数据已经被至少一个从库接收到。
  2. 高并发写操作下保证数据的安全

    • 如果某个业务场景具有大量的写操作,同时不能容忍数据丢失,半同步复制可以确保主库在提交事务时至少有一个从库已经收到数据,从而保证在主库崩溃时,数据依然是安全的。
  3. 低容忍度的故障恢复

    • 在需要快速故障恢复的场景下,半同步复制可以确保数据在主库发生故障时不会丢失,这样可以快速地将从库提升为主库,以确保业务的连续性。
  4. 跨地域分布的数据库

    • 当主库和从库位于不同数据中心时,半同步复制可以确保至少一个从库位于不同地理位置,保证在单个数据中心故障时,数据仍然可用。

二、半同步复制的实现步骤

1. 准备工作
  • 假设我们有两台服务器,一台作为主库(Master),另一台作为从库(Slave)。我们将配置半同步复制,确保在事务提交时,至少一个从库已经收到数据。
  • 假设主库的IP为192.168.1.100,从库的IP为192.168.1.101
2. 主库(Master)配置
  1. 修改主库的MySQL配置文件
    • 编辑主库的MySQL配置文件my.cnfmy.ini
     [mysqld]# 启用二进制日志(必须开启)log-bin=mysql-bin# 设置server-id,必须在主从库中唯一server-id=1# 设置binlog格式,推荐ROW格式binlog_format=ROW# 启用半同步复制的插件plugin-load=rpl_semi_sync_master=semisync_master.so# 启用半同步复制,并设置半同步超时时间rpl_semi_sync_master_enabled=1rpl_semi_sync_master_timeout=10000 # 以毫秒为单位,超时时间为10秒
  1. 重启MySQL服务
    • 使配置生效:
     sudo systemctl restart mysqld
  1. 启用半同步复制插件
    • 如果没有在配置文件中加载插件,也可以通过以下命令动态加载:
     INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';SET GLOBAL rpl_semi_sync_master_enabled = 1;
  1. 创建复制用户
    • 在主库上创建一个专门用于复制的用户,并授予REPLICATION SLAVE权限:
     CREATE USER 'replica'@'192.168.1.101' IDENTIFIED BY 'replica_password';GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.1.101';FLUSH PRIVILEGES;
  1. 查看主库状态
    • 确认主库的半同步插件是否已启用:
     SHOW VARIABLES LIKE 'rpl_semi_sync%';

确认rpl_semi_sync_master_enabledON

3. 从库(Slave)配置
  1. 修改从库的MySQL配置文件
    • 编辑从库的MySQL配置文件my.cnfmy.ini
     [mysqld]# 设置server-id,确保唯一server-id=2# 启用半同步复制的插件plugin-load=rpl_semi_sync_slave=semisync_slave.so# 启用半同步复制rpl_semi_sync_slave_enabled=1
  1. 重启MySQL服务
    • 使配置生效:
     sudo systemctl restart mysqld
  1. 启用半同步复制插件
    • 如果没有在配置文件中加载插件,也可以动态加载:
     INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';SET GLOBAL rpl_semi_sync_slave_enabled = 1;
  1. 配置复制
    • 配置从库的复制,首先确保从库与主库同步。在从库上执行以下命令:
     CHANGE MASTER TOMASTER_HOST='192.168.1.100',MASTER_USER='replica',MASTER_PASSWORD='replica_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;

这里的MASTER_LOG_FILEMASTER_LOG_POS的值可以从主库上通过SHOW MASTER STATUS获得。

  1. 启动复制
    • 在从库上启动复制进程:
     START SLAVE;
  1. 检查复制状态
    • 通过以下命令查看复制状态,确保Slave_IO_RunningSlave_SQL_RunningYes
     SHOW SLAVE STATUS\G;
4. 验证半同步复制状态
  1. 检查主库的复制状态
    • 使用以下命令查看主库上的半同步复制状态:
     SHOW STATUS LIKE 'Rpl_semi_sync_master%';

关键字段:

  • Rpl_semi_sync_master_status: ON 表示主库启用了半同步复制。
  • Rpl_semi_sync_master_clients: 表示当前确认半同步复制的从库数量。
  1. 检查从库的复制状态
    • 在从库上执行以下命令,查看半同步复制是否正常:
     SHOW STATUS LIKE 'Rpl_semi_sync_slave%';

关键字段:

  • Rpl_semi_sync_slave_status: ON 表示从库启用了半同步复制。

三、半同步复制中的细节配置

  1. 超时时间配置

    • rpl_semi_sync_master_timeout 控制主库等待从库确认的超时时间。默认值是10秒,如果从库在该时间内未响应,主库将退回到异步模式,继续执行写操作。
    • 根据业务需求,可以调整该时间来平衡性能和一致性。
  2. 读写分离

    • 半同步复制一般配合读写分离的架构。主库负责写操作,而从库负责读操作。这种模式可以有效减轻主库的压力,并且在半同步模式下从库能保持与主库的数据高度一致。
  3. 多从库配置

    • 在实际部署中,可能会有多个从库。半同步复制要求至少一个从库确认写入日志后,主库才能认为事务成功。因此,即使有多个从库,只要一个从库响应,写操作就可以继续执行。

四、半同步复制的优势与注意事项

优势
  1. 数据安全性提高:半同步复制在主库提交事务之前,至少有一个从库已经收到数据,确保数据不会丢失。
  2. 故障切换更快速:因为从库已经接收到了主库的最新数据,当主库发生故障时,从库可以立即切换为主库,而不会有数据不一致的问题。
  3. 适合跨数据中心架构:当主库和从库位于不同数据中心时,可以减少因单个数据中心故障导致的数据丢失风险。
要注意的事
  1. 性能损耗:因为主库必须等待从库的确认响应,写操作的性能会有所下降,特别是在网络延迟较大的情况下。
  2. 超时机制:如果从库无法在规定的超时时间内响应,主库会退回到异步复制,这可能会导致短时间内的数据不一致性。

通过配置半同步复制,业务可以在数据安全性与性能之间找到一个较好的平衡。它适用于对数据一致性要求高,但又不想完全牺牲性能的场景,是金融、银行等关键业务系统中的常见选择

3. Galera Cluster

  • 原理:是一种多主集群架构,支持多点读写。每个节点同步数据并维持一致性。
  • 优点:数据实时同步、没有单点故障,适合高可用和高一致性要求的场景。
  • 缺点:复杂度较高,对网络质量要求较高,适用于小范围分布式架构。

Galera Cluster是一种基于多主(Multi-master)复制的高可用数据库集群方案,提供了高并发、高可用性、强一致性和容错能力。它允许多个节点同时进行读写操作,并确保所有节点的数据一致性。下面详细介绍它适合的业务场景以及实现步骤。

一、Galera Cluster适合的业务场景

  1. 高并发读写的业务场景

    • Galera Cluster允许多个节点同时进行读写操作,适合具有高并发读写需求的业务场景。例如,社交平台、在线支付系统等高并发场景,多个节点可以同时处理请求,大大提升系统的并发处理能力。
  2. 需要高可用性和容灾的业务

    • Galera Cluster通过多主节点架构提供高可用性。当任意一个节点发生故障时,集群中的其他节点可以继续处理请求,保证业务不间断运行。这对那些对高可用性要求较高的业务至关重要,如金融系统、电子商务平台等。
  3. 地理分布的数据库集群

    • Galera Cluster可以支持多个数据中心的数据库同步,适合跨地理区域部署,确保数据在不同地区保持一致。例如,跨区域的业务系统,如全球范围内的物流管理系统,能够在不同地区保持数据实时一致。
  4. 对强一致性要求较高的业务

    • Galera Cluster使用同步复制技术,保证了集群中所有节点的数据强一致性。适合数据一致性要求较高的业务场景,如银行系统、交易平台等,这些场景中的数据一致性至关重要。

二、Galera Cluster的实现步骤

1. 准备工作
  • 假设我们要搭建一个包含3个节点的Galera Cluster,节点IP如下:
    • 节点1:192.168.1.101
    • 节点2:192.168.1.102
    • 节点3:192.168.1.103
  • 系统要求:确保每个节点上已经安装了MySQL(或Percona、MariaDB等兼容Galera的数据库版本),并且它们可以相互通信(通常通过开放3306端口)。
  • 时间同步:确保所有节点的系统时间同步,可以使用ntpchrony服务来保持各节点时间的一致性。
2. 安装Galera插件和数据库
  1. 安装数据库
    • 在每个节点上安装MySQL或MariaDB,推荐使用MariaDBPercona XtraDB,因为它们对Galera的支持较好。
    • 以MariaDB为例,安装命令如下:
     sudo apt-get updatesudo apt-get install mariadb-server
  1. 安装Galera插件
    • MariaDB和Percona通常会自带Galera插件。如果没有,手动安装Galera插件:
     sudo apt-get install galera-4
3. 配置MySQL节点
  1. 修改MySQL配置文件

    • 在每个节点上编辑MySQL配置文件my.cnf(路径可能是/etc/mysql/my.cnf/etc/my.cnf,根据系统的不同有所差异)。

    • [mysqld]部分添加以下配置:

     [mysqld]# 服务器唯一IDserver-id=1# 开启二进制日志(但Galera不使用它,兼容性需求)log-bin# 在所有节点启用同步复制功能binlog_format=ROW# 必须启用的选项default_storage_engine=InnoDBinnodb_autoinc_lock_mode=2innodb_flush_log_at_trx_commit=0# 启用Galera同步协议wsrep_on=ON# 连接到集群的URLwsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"# 指定Galera库wsrep_provider=/usr/lib/galera/libgalera_smm.so# 集群名称,所有节点应保持一致wsrep_cluster_name="my_galera_cluster"# 节点名称,确保在集群中唯一wsrep_node_name="node1"# 节点的IP地址wsrep_node_address="192.168.1.101"# 数据库用户名和密码,供节点间认证使用wsrep_sst_auth="sst_user:sst_password"# SST(State Snapshot Transfer)时使用的方式wsrep_sst_method=rsync  # 可选择rsync或xtrabackup
  • 在其他节点上重复此操作,注意修改server-idwsrep_node_namewsrep_node_address,以保证每个节点的配置唯一。
  1. 创建SST传输用户

    • SST用于在节点间传输数据。在主节点上为SST传输创建一个用户:
     CREATE USER 'sst_user'@'%' IDENTIFIED BY 'sst_password';GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sst_user'@'%';FLUSH PRIVILEGES;
  1. 防火墙设置

    • 确保集群节点间的通信端口是开放的,主要端口包括:
      • 4567:节点间的数据复制通信端口。
      • 4568:增量状态转移(IST)时使用的端口。
      • 4444:状态快照传输(SST)时使用的端口。

    可以使用以下命令开放这些端口:

   sudo ufw allow 3306/tcpsudo ufw allow 4567/tcpsudo ufw allow 4568/tcpsudo ufw allow 4444/tcp
4. 启动Galera Cluster
  1. 启动第一个节点

    • 第一个节点的启动稍有不同,因为它需要引导整个集群。使用以下命令在第一个节点上启动MySQL:
     sudo galera_new_cluster
  • 这将会引导整个集群,后续的节点将会连接到这个节点。
  1. 启动其他节点

    • 在其他节点上,正常启动MySQL服务,它们会自动连接到第一个节点并同步数据:
     sudo systemctl start mysql
  1. 验证集群状态

    • 在每个节点上运行以下命令,确认节点是否成功加入集群:
     SHOW STATUS LIKE 'wsrep_cluster_size';

如果一切顺利,wsrep_cluster_size的值应该为3,表示集群中有3个节点。

5. 读写操作的配置
  1. 负载均衡

    • 在多节点的Galera Cluster中,可以通过数据库中间件(例如ProxySQL)实现读写分离或负载均衡,确保不同的读写操作能够均匀地分布在不同的节点上,进一步提高性能。
  2. 多主读写

    • Galera支持多主读写,所有节点都可以同时处理读写请求。在应用程序层面,可以通过负载均衡策略将读写操作分发到不同节点。
6. 监控和维护
  1. 监控集群健康状态

    • 通过监控wsrep_status的几个重要字段来确保集群健康:
      • wsrep_cluster_size: 当前集群的节点数。
      • wsrep_cluster_status: 应为Primary,表示集群处于正常状态。
      • wsrep_ready: 应为ON,表示节点可以处理请求。
  2. 节点故障恢复

    • 如果某个节点发生故障,可以简单地重新启动该节点,它将自动加入集群并恢复数据。如果节点数据过多,可以使用xtrabackup替代rsync进行SST传输以减少影响。

三、Galera Cluster的优势与注意事项

优势
  1. 强一致性:Galera Cluster通过同步复制提供了数据的强一致性,保证集群中所有节点数据的准确同步。
  2. 多主架构:多个节点可以同时处理读写请求,极大地提高了并发性能。
  3. 高可用性:即使某个节点宕机,其他节点也能继续工作,保证系统的高可用性和容错能力。
  4. 自动故障恢复:节点崩溃后可以自动加入集群并恢复数据,不需要人工干预。
注意事项
  1. 性能损耗:由于Galera使用同步复制技术,所有节点都需要在事务提交时进行数据同步,因此延迟较大,可能会影响。这在地理上分散的节点部署时尤为明显。

  2. 网络要求:Galera Cluster对网络延迟较为敏感,要求节点间的网络连接稳定且带宽充足。如果集群节点分布在不同的数据中心或地理位置上,确保低延迟的网络连接非常重要。

  3. 写扩展性有限:虽然Galera Cluster允许多主写操作,但因为所有写操作需要同步到其他节点,写操作的扩展性有限。在高写入负载的场景下,Galera的性能可能不如其他基于异步复制的方案。

  4. SST和IST操作:当新节点加入集群或发生节点故障时,Galera使用SST(State Snapshot Transfer)或IST(Incremental State Transfer)来同步数据。SST会导致性能损耗,因为它需要进行全量数据传输。为了避免大规模的SST操作,可以使用xtrabackup等更高效的工具,并确保节点尽量避免长时间离线。

  5. 事务冲突处理:由于多主复制,可能会发生事务冲突。Galera采用乐观并发控制(OCC),当两个节点同时尝试修改相同的数据时,后提交的事务会回滚。因此,虽然多主写操作提供了更高的并发性,但在高写入冲突的场景下可能导致回滚次数增多,影响整体性能。

四、小结一下

Galera Cluster 是一种适用于高可用、高一致性、高并发读写业务场景的数据库集群解决方案。通过多主节点和同步复制机制,Galera能够确保数据的一致性和集群的高可用性,特别适合那些对数据一致性要求高且需要处理大量读写请求的业务。

噢了,现在你可以成功部署一个稳定、高效的Galera Cluster,满足大规模、跨地域、高一致性业务场景的需求。

4. MySQL Group Replication

  • 原理:MySQL自带的多主复制技术,基于Paxos算法的集群一致性协议。
  • 优点:提供数据强一致性,自动故障恢复,多主模式。
  • 缺点:性能和扩展性较受限于集群规模,适合对一致性要求极高的场景。

MySQL Group Replication是MySQL 5.7及以上版本提供的一种原生高可用性解决方案。它采用多主复制的架构,支持强一致性和高可用性。以下是MySQL Group Replication适合的业务场景,以及具体的实现步骤。

一、MySQL Group Replication适合的业务场景

  1. 高可用性需求的业务

    • 对于金融、电子商务等对可用性要求极高的系统,MySQL Group Replication可以确保在节点故障的情况下,其他节点能够继续提供服务。
  2. 高并发的读写操作

    • 在需要高并发读写操作的业务场景中(如社交平台、在线游戏等),Group Replication允许多个节点同时处理请求,提高了系统的并发性能。
  3. 跨地域的数据库应用

    • MySQL Group Replication可以支持跨地理位置的数据库复制,适用于国际化的业务系统。这对于需要在不同地区保持数据一致性的企业至关重要。
  4. 数据一致性要求高的应用

    • 对数据一致性要求严格的应用,如在线支付、库存管理等,MySQL Group Replication通过保证所有节点的强一致性,满足这些场景的需求。
  5. 自动故障恢复

    • MySQL Group Replication具有自动故障恢复能力,适合对系统可用性和自动化管理要求高的业务。

二、MySQL Group Replication的实现步骤

1. 准备工作
  • 假设我们要搭建一个包含3个节点的MySQL Group Replication集群,节点IP如下:

    • 节点1:192.168.1.101
    • 节点2:192.168.1.102
    • 节点3:192.168.1.103
  • 系统要求:确保每个节点上已经安装了MySQL(5.7或以上版本)。

  • 时间同步:使用ntpchrony确保所有节点的系统时间一致。

2. 安装MySQL
  • 在每个节点上安装MySQL(5.7或以上版本)。以Ubuntu为例,安装命令如下:
  sudo apt-get updatesudo apt-get install mysql-server
  • 确认MySQL版本:
  mysql --version
3. 配置MySQL节点
  1. 修改MySQL配置文件

    • 在每个节点上编辑MySQL配置文件my.cnf(路径通常是/etc/mysql/my.cnf/etc/my.cnf)。

    • [mysqld]部分添加以下配置:

     [mysqld]server-id=1  # 每个节点的唯一ID,依次为1, 2, 3log_bin=binlog  # 启用二进制日志binlog_format=ROW  # 设置二进制日志格式为ROWgtid_mode=ON  # 启用GTIDenforce-gtid-consistency=true  # 强制GTID一致性transaction_write_set_extraction=FULL  # 设置事务写集提取为FULL# 启用Group Replicationplugin-load=group_replication.so  # 加载Group Replication插件group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  # 设置组的UUIDgroup_replication_start_on_boot=on  # 启动时自动启动Group Replicationgroup_replication_ssl_mode=DISABLED  # 禁用SSL(如需使用SSL,可更改配置)group_replication_group_seeds="192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061"  # 所有节点的地址group_replication_local_address="192.168.1.101:33061"  # 当前节点的地址(根据实际节点修改)
  • 在其他节点上重复此操作,确保server-id唯一,并修改group_replication_local_address
  1. 创建复制用户

    • 在每个节点上创建用于Group Replication的复制用户:
     CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;
  1. 防火墙设置

    • 确保集群节点间的通信端口是开放的,主要端口包括:
      • 3306:MySQL默认端口。
      • 33061:Group Replication协议的端口。

    可以使用以下命令开放这些端口:

   sudo ufw allow 3306/tcpsudo ufw allow 33061/tcp
4. 启动MySQL服务
  • 在每个节点上启动MySQL服务:
  sudo systemctl start mysql
5. 配置Group Replication
  1. 启动Group Replication

    • 在每个节点上执行以下命令启动Group Replication:
     START GROUP REPLICATION;
  1. 验证集群状态

    • 在任意一个节点上,运行以下命令确认Group Replication是否正常运行:
     SELECT * FROM performance_schema.replication_group_members;
  • 此命令将返回当前Group Replication的成员列表,包括每个节点的状态。
  1. 监控Group Replication状态

    • 监控Group Replication状态的关键字段:
     SHOW STATUS LIKE 'group_replication%';
  • 重要字段说明:
    • group_replication_members: 集群中节点的数量。
    • group_replication_state: 集群状态,正常情况下应为ONLINE
    • group_replication_primary_member: 当前主节点的ID。
6. 读写操作配置
  • 通过负载均衡策略(如使用ProxySQL)实现读写分离,以提高性能和响应速度。所有节点都可以同时进行读写操作。
7. 监控和维护
  1. 监控集群健康状态

    • 通过监控各节点的健康状态和性能指标,确保系统正常运行。
  2. 节点故障处理

    • 如果某个节点发生故障,Group Replication会自动检测并调整状态,其他节点会继续提供服务。
  3. 节点恢复

    • 当故障节点恢复后,可以通过以下命令重新加入集群:
     STOP GROUP REPLICATION;START GROUP REPLICATION;

三、MySQL Group Replication的优势与注意事项

优势
  1. 强一致性:Group Replication确保所有节点的强一致性,适合需要确保数据准确性的业务。
  2. 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
  3. 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
  4. 原生集成:MySQL Group Replication是MySQL的原生功能,易于安装和配置。
注意事项
  1. 网络延迟敏感:Group Replication对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
  2. 性能考量:虽然Group Replication支持高并发,但在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
  3. 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。MySQL Group Replication使用乐观并发控制(OCC)来处理冲突。
  4. 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。

四、小结一下

MySQL Group Replication是一种非常灵活且强大的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。

5. MySQL InnoDB Cluster

  • 原理:由MySQL Group Replication、MySQL Shell 和MySQL Router组成的高可用集群解决方案。
  • 优点:官方支持,集成度高,自动化程度高,方便维护。
  • 缺点:运维管理上需要一定的技术门槛,适用于中大型企业环境。

MySQL InnoDB Cluster是MySQL 5.7及以上版本提供的一个集成高可用性解决方案。它结合了MySQL Group Replication、MySQL Shell和MySQL Router,为用户提供了一个简化的部署和管理高可用集群的方式。以下是MySQL InnoDB Cluster适合的业务场景,以及具体的实现步骤。

一、MySQL InnoDB Cluster适合的业务场景

  1. 高可用性需求的应用

    • 对于对可用性要求极高的应用,例如在线支付、金融服务等,InnoDB Cluster能够在节点故障时快速切换,确保服务持续可用。
  2. 需要读写分离的高并发系统

    • 在社交网络、电商平台等高并发场景中,InnoDB Cluster能够通过MySQL Router实现智能的读写分离,提高系统的处理能力。
  3. 跨地域部署的应用

    • InnoDB Cluster支持地理分布式的节点部署,适用于跨多个数据中心的业务需求,能够在不同地区保持数据一致性。
  4. 自动故障恢复

    • InnoDB Cluster能够自动检测并处理节点故障,适合对自动化管理要求高的系统。
  5. 需要简单管理和运维的环境

    • 对于缺乏运维经验的小型团队或企业,InnoDB Cluster提供了简化的管理界面和工具,适合快速上手和维护。

二、MySQL InnoDB Cluster的实现步骤

1. 准备工作
  • 假设我们要搭建一个包含3个节点的MySQL InnoDB Cluster,节点IP如下:

    • 节点1:192.168.1.101
    • 节点2:192.168.1.102
    • 节点3:192.168.1.103
  • 系统要求:确保每个节点上已经安装了MySQL(5.7或以上版本)。

  • 时间同步:使用ntpchrony确保所有节点的系统时间一致。

2. 安装MySQL和相关工具
  1. 安装MySQL

    在每个节点上安装MySQL(5.7或以上版本)。以Ubuntu为例,安装命令如下:

   sudo apt-get updatesudo apt-get install mysql-server
  1. 安装MySQL Shell

    MySQL Shell是InnoDB Cluster的管理工具,安装命令如下:

   sudo apt-get install mysql-shell
  1. 安装MySQL Router

    MySQL Router是用于应用程序和InnoDB Cluster之间的连接中介,安装命令如下:

   sudo apt-get install mysql-router
3. 配置MySQL节点
  1. 修改MySQL配置文件

    在每个节点上编辑MySQL配置文件my.cnf(路径通常是/etc/mysql/my.cnf/etc/my.cnf)。

    [mysqld]部分添加以下配置:

   [mysqld]server-id=1  # 每个节点的唯一ID,依次为1, 2, 3log_bin=binlog  # 启用二进制日志binlog_format=ROW  # 设置二进制日志格式为ROWgtid_mode=ON  # 启用GTIDenforce-gtid-consistency=true  # 强制GTID一致性transaction_write_set_extraction=FULL  # 设置事务写集提取为FULL# InnoDB Cluster配置plugin-load=group_replication.so  # 加载Group Replication插件group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  # 设置组的UUIDgroup_replication_start_on_boot=on  # 启动时自动启动Group Replicationgroup_replication_ssl_mode=DISABLED  # 禁用SSL(如需使用SSL,可更改配置)group_replication_group_seeds="192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061"  # 所有节点的地址group_replication_local_address="192.168.1.101:33061"  # 当前节点的地址(根据实际节点修改)
  • 在其他节点上重复此操作,确保server-id唯一,并修改group_replication_local_address
  1. 创建复制用户

    在每个节点上创建用于InnoDB Cluster的复制用户:

   CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;
  1. 防火墙设置

    确保集群节点间的通信端口是开放的,主要端口包括:

    • 3306:MySQL默认端口。
    • 33061:Group Replication协议的端口。

    可以使用以下命令开放这些端口:

   sudo ufw allow 3306/tcpsudo ufw allow 33061/tcp
4. 启动MySQL服务

在每个节点上启动MySQL服务:

sudo systemctl start mysql
5. 配置InnoDB Cluster
  1. 使用MySQL Shell创建集群

    • 登录MySQL Shell(使用root用户):
   mysqlsh --uri root@192.168.1.101
  • 进入SQL模式:
   \sql
  • 创建InnoDB Cluster:
   var cluster = dba.createCluster('myCluster');
  • 向集群添加节点:
   cluster.addInstance('repl_user@192.168.1.102:3306');cluster.addInstance('repl_user@192.168.1.103:3306');
  • 完成后,查看集群状态:
   cluster.status();
  1. 配置MySQL Router

    • 使用MySQL Router连接到InnoDB Cluster:
   mysqlrouter --bootstrap repl_user@192.168.1.101:3306 --user=mysqlrouter
  • 配置文件通常位于/etc/mysqlrouter/mysqlrouter.conf,可以根据需要进行修改。
6. 读写操作配置
  • 通过MySQL Router实现读写分离。应用程序通过MySQL Router连接到集群,Router会根据配置智能地将读写请求分发到相应的节点。
7. 监控和维护
  1. 监控集群健康状态

    • 通过MySQL Shell,使用以下命令监控集群状态:
   cluster.status();
  1. 节点故障处理

    • 如果某个节点发生故障,InnoDB Cluster会自动检测并调整状态,其他节点会继续提供服务。
  2. 节点恢复

    • 当故障节点恢复后,可以通过以下命令重新加入集群:
   cluster.addInstance('repl_user@192.168.1.102:3306');

三、MySQL InnoDB Cluster的优势与注意事项

优势
  1. 强一致性:InnoDB Cluster确保所有节点的强一致性,适合需要确保数据准确性的业务。
  2. 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
  3. 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
  4. 简化管理:通过MySQL Shell和MySQL Router,简化了集群的管理和监控。
注意事项
  1. 网络延迟敏感:InnoDB Cluster对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
  2. 性能考量:虽然InnoDB Cluster支持高并发,但在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
  3. 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。InnoDB Cluster使用乐观并发控制(OCC)来处理冲突。
  4. 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。

四、总结

MySQL InnoDB Cluster是一个强大且灵活的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。

6. Percona XtraDB Cluster (PXC)

  • 原理:基于Galera的多主集群解决方案,提供高可用性和高一致性。
  • 优点:数据强一致性、自动故障恢复,兼容MySQL和Percona Server。
  • 缺点:与Galera类似,网络延迟会影响性能。

**Percona XtraDB Cluster (PXC)**是一个基于MySQL和Galera库的高可用性解决方案,提供多主集群的特性。它支持强一致性、自动故障转移和扩展性。以下是Percona XtraDB Cluster适合的业务场景,以及具体的实现步骤。

一、Percona XtraDB Cluster适合的业务场景

  1. 高可用性和高可靠性需求

    • 对于金融、电子商务和在线服务等对可用性和可靠性要求极高的系统,PXC能够确保在节点故障的情况下,其他节点能够继续提供服务。
  2. 需要强一致性的应用

    • 适用于需要保证数据强一致性的应用,例如库存管理和在线支付,这些系统在数据更新时需要确保所有节点的数据一致。
  3. 大规模并发处理

    • 在高并发的应用场景下,如社交媒体、在线游戏和大数据分析,PXC能够通过多个主节点处理写请求,支持高并发的读写操作。
  4. 跨地理位置的集群

    • PXC支持地理分布式的节点部署,适合需要在不同地区保持数据一致性的业务需求。
  5. 自动故障恢复

    • PXC能够自动检测节点故障并进行恢复,适合对系统可用性和自动化管理要求高的业务。

二、Percona XtraDB Cluster的实现步骤

1. 准备工作

假设我们要搭建一个包含3个节点的Percona XtraDB Cluster,节点IP如下:

  • 节点1:192.168.1.101

  • 节点2:192.168.1.102

  • 节点3:192.168.1.103

  • 系统要求:确保每个节点上已经安装了Percona Server和Galera库。

  • 时间同步:使用ntpchrony确保所有节点的系统时间一致。

2. 安装Percona Server和相关工具
  1. 安装Percona Server

    在每个节点上安装Percona Server。以Ubuntu为例,安装命令如下:

   sudo apt-get updatesudo apt-get install percona-server-server-5.7
  1. 安装Galera库

    在每个节点上安装Galera库:

   sudo apt-get install percona-xtradb-cluster-galera
3. 配置Percona XtraDB Cluster节点
  1. 修改MySQL配置文件

    在每个节点上编辑MySQL配置文件my.cnf(路径通常是/etc/mysql/my.cnf/etc/my.cnf)。

    [mysqld]部分添加以下配置:

   [mysqld]server-id=1  # 每个节点的唯一ID,依次为1, 2, 3log_bin=binlog  # 启用二进制日志binlog_format=ROW  # 设置二进制日志格式为ROWdefault-storage-engine=InnoDB  # 设置默认存储引擎为InnoDBinnodb_flush_log_at_trx_commit=1  # 每次事务提交后将日志刷新到磁盘innodb_file_per_table=ON  # 为每个表使用单独的表空间innodb_buffer_pool_size=1G  # 根据实际情况调整缓冲池大小# Galera配置wsrep_provider=/usr/lib/galera/libgalera_smm.so  # Galera库路径wsrep_cluster_name="my_cluster"  # 设置集群名称wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"  # 所有节点的地址wsrep_node_address="192.168.1.101"  # 当前节点的地址(根据实际节点修改)wsrep_node_name="node1"  # 当前节点的名称wsrep_sst_method=rsync  # 设置状态快照传输方法
  • 在其他节点上重复此操作,确保server-id唯一,并修改wsrep_node_addresswsrep_node_name
  1. 创建复制用户

    在每个节点上创建用于集群的复制用户:

   CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';GRANT ALL PRIVILEGES ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;
  1. 防火墙设置

    确保集群节点间的通信端口是开放的,主要端口包括:

    • 3306:MySQL默认端口。
    • 4567:Galera集群节点间通信端口。
    • 9200:状态快照传输端口。

    可以使用以下命令开放这些端口:

   sudo ufw allow 3306/tcpsudo ufw allow 4567/tcpsudo ufw allow 9200/tcp
4. 启动集群节点
  1. 启动第一个节点

    在第一个节点上启动MySQL服务:

   sudo systemctl start mysql

由于这是第一个节点,因此它将自动初始化集群。

  1. 启动其他节点

    在第二个节点和第三个节点上,首先以gcomm://开头启动服务以加入集群:

   sudo systemctl stop mysql  # 停止MySQL服务sudo galera_new_cluster  # 初始化Galera集群

然后启动第二个节点和第三个节点:

   sudo systemctl start mysql
5. 验证集群状态
  1. 检查节点状态

    在任意一个节点上,运行以下命令以检查集群状态:

   SHOW STATUS LIKE 'wsrep_cluster_size';

此命令将返回集群中节点的数量,确保所有节点都已成功加入集群。

  1. 检查集群成员
   SHOW STATUS LIKE 'wsrep_connected';

返回值应为ON,表示节点已连接。

6. 读写操作配置
  • 可以直接通过任意一个节点进行读写操作。对于高并发的应用场景,可以使用负载均衡器(如HAProxy)在节点之间进行负载均衡。
7. 监控和维护
  1. 监控集群健康状态

    • 使用以下命令监控集群的健康状态:
   SHOW STATUS LIKE 'wsrep%';

关键字段包括:

  • wsrep_cluster_size:集群中节点的数量。
  • wsrep_ready:表示节点是否准备好进行写操作。
  • wsrep_connected:表示节点是否连接到集群。
  1. 节点故障处理

    • 如果某个节点发生故障,PXC会自动检测并调整状态,其他节点会继续提供服务。
  2. 节点恢复

    • 当故障节点恢复后,可以通过以下命令重新加入集群:
   sudo systemctl stop mysql  # 停止MySQL服务sudo galera_new_cluster  # 初始化Galera集群sudo systemctl start mysql  # 启动MySQL服务

三、Percona XtraDB Cluster的优势与注意事项

优势
  1. 强一致性:PXC确保所有节点的强一致性,适合需要确保数据准确性的业务。
  2. 高可用性:集群中的节点可以自动故障转移,确保系统持续可用。
  3. 支持多主写:所有节点都可以进行读写操作,极大提高了并发处理能力。
  4. 负载均衡:可以通过HAProxy等负载均衡器实现请求分发,提高系统性能。
注意事项
  1. 网络延迟敏感:PXC对网络延迟较为敏感,网络质量直接影响到写操作的延迟和性能。
  2. 性能考量:在高写入负载情况下,可能会因数据同步而出现性能瓶颈。
  3. 事务冲突处理:多个节点同时写入时,可能会发生事务冲突。PXC使用乐观并发控制(OCC)来处理冲突。
  4. 节点离线处理:长时间离线的节点需要注意处理,可能会在重新加入时需要全量数据同步。

四、总结

Percona XtraDB Cluster是一个强大且灵活的高可用性解决方案,适合高可用性、高一致性和高并发的业务场景。通过简单的配置和管理,企业可以快速部署一个高效且可靠的数据库集群,确保业务连续性和数据安全。

最后

以上6种高可用方案详解,希望可以帮助小伙伴们,欢迎关注威哥爱编程,插播一下,服票大涨,会意味着大环境将走出低迷吗?

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

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

相关文章

rdp远程桌面服务协议概述

rdp远程桌面服务协议概述 什么是远程桌面服务远程桌面服务的通信过程及功能 建立连接资源重定向与用户体验断开连接 远程桌面服务的协议架构 核心协议与基础通信虚拟通道与扩展协议协议协作与层次划分协议的可扩展性协议扩展与性能优化 总结参考 rdp远程桌面服务协议概述 对于…

SpringBoot(Java)实现MQTT连接(本地Mosquitto)通讯调试

1.工作及使用背景 工作中需要跟收集各种硬件或传感器数据用于Web展示及统计计算分析&#xff0c;如电表、流量计、泵、控制器等物联网设备。 目前的思路及解决策略是使用力控或者杰控等组态软件实现数据的转储&#xff08;也会涉及收费问题&#xff09;&#xff0c;通过组态软件…

鸿蒙开发(NEXT/API 12)【应用间消息通信】手机侧应用开发

在手机侧与穿戴设备侧构建应用到应用的通信隧道&#xff0c;用于收发应用自定义的报文消息以及文件。实现手机应用和穿戴设备应用间的交互&#xff0c;为用户提供分布式场景和体验。比如手机应用发送音频文件到穿戴设备侧应用&#xff0c;实现在穿戴设备侧应用上播放音乐&#…

BUG——IMX6ULL编译正点原子Linux内核报错

最初编译的是正点原子改过的Linux内核&#xff0c;可能是版本问题&#xff0c;一直报错&#xff0c;无法成功编译。然后换成NXP官方Linux内核6.6版本&#xff0c;初始编译虽然也报各种错&#xff0c;但都是缺少库或相关工具&#xff0c;全部安装后就可以成功编译出镜像了&#…

Leetcode 740. 删除并获得点数

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和…

cscode搭建vue项目

创建前安装环境 ctrlj弹出终端 window需要管理员运行并且授权 node -v # 显示版本号&#xff0c;说明 node 已经装好 npm -v # 显示版本号&#xff0c;说明 npm 可以使用 # 安装cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm -v # 显示版本号&a…

【hot100-java】【合并两个有序链表】

记忆中&#xff0c;两个指针合并即可。 建立哨兵节点dum /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { t…

Docker更换阿里容器镜像源

以Mac为例&#xff0c; 一、获取阿里容器镜像加速器地址 访问阿里云官网https://cn.aliyun.com/ 登录阿里云&#xff0c;没有账号就注册一个 登录完成后在搜索框搜索&#xff0c;容器镜像服务&#xff0c;并打开 点击管理控制台&#xff0c;进入管理控制台 左侧点击镜像加速…

【Python入门】20个Python自动化脚本,解放双手、事半功倍

如果你正在学习Python&#xff0c;那么你需要的话可以&#xff0c;点击这里&#x1f449;Python重磅福利&#xff1a;入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享&#xff01; 在当今的快节奏工作环境中&#xff0c;自动化不再是一种奢侈&#xff0c;而是…

下一代性能怪兽RTX 5090最新规格更新与Blackwell架构解析

据悉&#xff0c;目前各家AIC厂商已经陆续收到NVIDIA的相关资料&#xff0c;RTX 5090、RTX 5080已经正式进入开案阶段&#xff0c;也就是厂商们开始设计各自的产品方案了。不出意外&#xff0c;年初的CES 2025上会看到RTX 5090/5080的发布。 作为NVIDIA的新一代GPU&#xff0c…

【车联网安全】车端知识调研

一、CAN总线&#xff1a; 1、定义&#xff1a; CAN 总线相当于汽车的神经网络&#xff0c;连接车内各控制系统,其通信采用广播机制&#xff0c;各连接部件均可收发控制消息&#xff0c;通信效率高&#xff0c;可确保通信实时性。当前市场上的汽车至少拥有一个CAN网络&#xff0…

如何进行“服务器内部错误”的诊断 | OceanBase诊断案例

本文作者&#xff1a;任仲禹&#xff0c;爱可生数据库高级工程师&#xff0c;擅长故障分析和性能优化。 的OMS迁移工具具备丰富的功能。但在实际运维场景中&#xff0c;我们可能会遇到各种问题&#xff0c;其中“服务器内部错误”便是一个较为棘手的问题&#xff0c;因为界面上…

【易上手快捷开发新框架技术】nicegui标签组件lable用法庖丁解牛深度解读和示例源代码IDE运行和调试通过截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

美图AI短片创作工具MOKI全面开放 支持生成配乐、细节修改

人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 美图公司近日宣布&#xff0c;其研发的AI短片创作工具MOKI已正式向所有用户开放。这款专注于AI短片创作的工具&#xff0c;提供了包括动画短片、网文短剧等多种类型视频内容的生成能力&#xff0c;致力于为用户带来…

linux-CMake

linux-CMake 1.安装CMake工具2.单个源文件3.多个源文件4.生成库文件5.将源文件组织到不同的目录下6.可执行文件和库文件放置到单独的目录下7.常见的命令 CMake使用。 1.安装CMake工具 sudo apt-get install cmake2.单个源文件 1.先在文件夹里创建两个文件&#xff1a;main.c&…

Vscode超好看的渐变主题插件

样式效果&#xff1a; 插件使用方法&#xff1a; 然后重启&#xff0c;之后会显示vccode损坏&#xff0c;不用理会&#xff0c;因为这个插件是更改了应用内部代码&#xff0c;直接不再显示即可。

cesium实战代码

代码中有一点bug还没改 cesium地球 地形+地形 <html lang="en"><head><style>.cesium-animation-rectButton .cesium-animation-buttonGlow {filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain {fil…

Win32打开UWP应用

最近无意间发现Windows里一个神奇的文件夹。 shell:appsfolder 运行打开 这个文件夹后&#xff0c;你可以看到本机安装的所有应用程序。 我觉得这个挺方便的&#xff0c;所以做了一个简单的appFolderDialog包给C#用 项目地址&#xff1a;https://github.com/TianXiaTech/App…

基于单片机的多路温度检测系统

**单片机设计介绍&#xff0c;基于单片机CAN总线的多路温度检测系统设计 文章目录 前言概要功能设计设计思路 软件设计效果图 程序设计程序 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探…

总结拓展十一:S4 HANA和ECC区别

第一节 S/4 HANA系统简介 SAP系统的产品线 R/1版本——主要财务模块R/3版本——基本实现全模块ECC6.0——2005年推出&#xff08;ECC是2004年推出&#xff09;HANA——数据库产品——属于内存数据库BW on HANA——HANA与数据分析相结合 拓展&#xff1a; 数据库类型&#x…