mysql-mmm集群

2023-11-10

一、Mysql-mmm集群技术概述;

概述:MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。

  虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

  MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。

二、Mysql-mmm优缺点;

  优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间内只提供一台数据库写操作,保证数据的一致性。

  缺点:Monitor节点是单点,可以结合Keepalived实现高可用。

三、Mysql-mmm内部工作架构;

进程类型:

  mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行;

  mmm_agentd:运行在每个mysql服务器上(Master和Slave)的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行;

  mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令;

工作原理:

  mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP;

  通过监管的管理,这些IP会绑定在可用mysql之上;

  当某一台mysql宕机时,监管会将VIP迁移至其他mysql;

案例搭建Mysql-mmm+mysql 5.6双主高可用集群;

案例环境:

系统

IP地址

主机名

所需软件

Centos 7.4 1708 64bit

192.168.100.1

master1

mysql-5.6.36.tar.gz

mysql-mmm

mysql-mmm-agent

mysql-tools

Centos 7.4 1708 64bit

192.168.100.3

master2

mysql-5.6.36.tar.gz

mysql-mmm

mysql-mmm-agent

mysql-tools

Centos 7.4 1708 64bit

192.168.100.5

slave1

mysql-5.6.36.tar.gz

mysql-mmm

mysql-mmm-agent

mysql-tools

Centos 7.4 1708 64bit

192.168.100.6

slave2

mysql-5.6.36.tar.gz

mysql-mmm

mysql-mmm-agent

mysql-tools

Centos 7.4 1708 64bit

192.168.100.2

monitor

mysql-5.6.36.tar.gz

mysql-mmm

mysql-mmm-monitor

mysql-tools

Centos 7.4 1708 64bit

192.168.100.2

client

mysql

案例步骤:

  • 部署master1节点的ntp服务以及域名解析;
  • 配置master2、slave1、slave2、monitor节点同步ntp时间及域名解析(在此只列举master2单台主机配置);
  • 分别在master1、master2、slave1、slave2节点上安装mysql服务(在此只列举master1单台主机配置);
  • 配置master1实现双主复制;
  • 配置master2实现双主复制;
  • 配置slave1和slave2实现主从复制(在此只列举slave1单台主机配置);
  • 分别在master1、master2、slave1、slave2四个节点安装mysql-mmm软件程序并且配置agent指定本机的节点名称(在此只列举master1单台主机配置);
  • 在master1节点上授权monitor节点连接数据库集群;
  • 安装monitor节点上的mysql-mmm软件程序;
  • 配置 monitor节点上的mysql-mmm的配置文件并且复制到各个mysql节点;
  • 启动master1、master2、slave1、slave2四个节点上的mysql-mmm服务(在此只列举master1单台主机配置);
  • 启动monitor节点上的mysql-mmm服务并查看集群状态;
  • 客户端验证测试读写数据;
  • 将master1主节点的mysql服务停止,测试集群状况;
  • 关闭slave1和slave2节点的写功能,使其处于只读状态;
  • 客户端访问测试slave节点是否可写;

实验过程

  部署master1节点的ntp服务以及域名解析

    [root@master1 ~]# cat <<END>>/etc/hosts
      > 192.168.100.1 master1
      > 192.168.100.3 master2
      > 192.168.100.5 slave1
      > 192.168.100.6 slave2
      > 192.168.100.2 monitor
      > END

  [root@master1 ~]# yum -y install ntp

  [root@master1 ~]# sed -i '/^server/s/^/#/g' /etc/ntp.conf

  [root@master1 ~]# cat <<END >>/etc/ntp.conf 
    > server 127.127.1.0
    > fudge 127.127.1.0 stratum 8
    > END

  [root@master1 ~]# systemctl enable ntpd --now

  配置master2、slave1、slave2、monitor节点同步ntp时间及域名解析(在此只列举master2单台主机配置);

  [root@master1 ~]# scp /etc/hosts root@192.168.100.3:/etc/hosts

  [root@master2 ~]# yum -y install ntpdate

  [root@master2 ~]# /usr/sbin/ntpdate 192.168.100.1

        14 Feb 13:52:55 ntpdate[62867]: adjust time server 192.168.100.1 offset -0.000655 sec

  [root@master2 ~]# echo "/usr/sbin/ntpdate 192.168.100.1">>/etc/rc.local

  [root@master2 ~]# chmod +x /etc/rc.local

 分别在master1、master2、slave1、slave2节点上安装mysql服务(在此只列举master1单台主机配置)

  [root@master1 ~]# yum -y install ncurses cmake

  [root@master1 ~]# mount /dev/cdrom /mnt/

  [root@master1 ~]# rpm -ivh /mnt/Packages/ncurses-devel-5.9-13.20130511.el7.x86_64.rpm --nodeps

  [root@master1 ~]# tar zxvf mysql-5.6.36.tar.gz -C /usr/src/

  [root@master1 ~]# cd /usr/src/mysql-5.6.36/

 [root@master2 mysql-5.6.36]#    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1

  

  [root@master1 mysql-5.6.36]# make

  [root@master1 mysql-5.6.36]# make install

  [root@master1 mysql-5.6.36]# cd

  [root@master1 ~]# cp /usr/src/mysql-5.6.36/support-files/mysql.server /etc/init.d/

  [root@master1 ~]# chmod +x /etc/init.d/mysql.server

  [root@master1 ~]# cat <<END >>/usr/lib/systemd/system/mysqld.service

   [Unit]

   Description=mysqldapi

   After=network.target

    [Service]

   Type=forking

   PIDFile=/usr/local/mysql/logs/mysqld.pid

   ExecStart=/etc/init.d/mysql.server start

   ExecReload=/etc/init.d/mysql.server restart

   ExecStop=/etc/init.d/mysql.server stop

   PrivateTmp=Flase

   [Install]

   WantedBy=multi-user.target

   END

  [root@master1 ~]# echo "export PATH=$PATH:/usr/local/mysql/bin/" >>/etc/profile

  [root@master1 ~]# source /etc/profile

  [root@master1 ~]# groupadd mysql

  [root@master1 ~]# useradd -g mysql mysql

  [root@master1 ~]# cat <<END >/etc/my.cnf

   [mysqld]

   basedir = /usr/local/mysql

   datadir = /usr/local/mysql/data

   port = 3306

   sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

   character_set_server=utf8

   init_connect='SET NAMES utf8'

   log-error=/usr/local/mysql/logs/mysqld.log

   pid-file=/usr/local/mysql/logs/mysqld.pid

   skip-name-resolve

   END

  [root@master1 ~]# mkdir /usr/local/mysql/logs

  [root@master1 ~]# chown mysql:mysql /usr/local/mysql/ -R

[root@master1 ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data ##初始化mysql

  [root@master1 ~]# systemctl start mysqld

  [root@master1 ~]# systemctl enable mysqld

 Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

  [root@master1 ~]# netstat -utpln |grep 3306

   tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      31481/mysqld

  [root@master1 ~]# mysqladmin -uroot password 123123

   Warning: Using a password on the command line interface can be insecure.

  [root@master1 ~]# mysql -uroot -p123123

  mysql> show databases;

   +--------------------+

   | Database           |

   +--------------------+

   | information_schema |

   | mysql              |

   | performance_schema |

   | test               |

   +--------------------+

  mysql> exit

配置master1实现双主复制;

  [root@master1 ~]# cat <<END >>/etc/my.cnf

   server-id=1

   log-bin=mysql-bin

   log-slave-updates

   sync_binlog=1

   auto_increment_increment=2

   auto_increment_offset=1

   relay-log=relay1-log-bin

   relay-log-index=slave-relay1-bin.index

   END

  [root@master1 ~]# systemctl restart mysqld

  [root@master1 ~]# mysql -uroot -p123123

  mysql> show master status;

  mysql> show master status;
   +------------------+----------+--------------+------------------+-------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
   +------------------+----------+--------------+------------------+-------------------+
   | mysql-bin.000001 |      154 |              |                  |                   |
   +------------------+----------+--------------+------------------+-------------------+
   1 row in set (0.00 sec)

  mysql> grant replication slave on *.* to 'master'@'192.168.100.%' identified by '123123';

  mysql> flush privileges; 

  mysql> exit;

  

配置master2实现双主复制;

  [root@master2 ~]# cat <<END >>/etc/my.cnf

   server-id=2

   log-bin=mysql-bin

   log-slave-updates

   sync_binlog=1

   auto_increment_increment=2

   auto_increment_offset=1

   relay-log=relay2-log-bin

   relay-log-index=slave-relay2-bin.index

   END

  

  [root@master2 ~]# systemctl restart mysqld

  [root@master2 ~]# mysql -uroot -p123123

 mysql> change master to master_host='192.168.100.1',master_user='master',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=154;
  Query OK, 0 rows affected, 2 warnings (0.00 sec)

  mysql> start slave;
   Query OK, 0 rows affected (0.01 sec)

  mysql> show master status;
   +------------------+----------+--------------+------------------+-------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
   +------------------+----------+--------------+------------------+-------------------+
   | mysql-bin.000001 |      154 |              |                  |                   |
   +------------------+----------+--------------+------------------+-------------------+
   1 row in set (0.00 sec)

  mysql> grant replication slave on *.* to 'master'@'192.168.100.%' identified by '123123';
   Query OK, 0 rows affected, 1 warning (0.00 sec)

  mysql> flush privileges;
   Query OK, 0 rows affected (0.01 sec)

  mysql> exit

  在master1

  mysql> change master  to master_host='192.168.100.3',master_user='master',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=154;

  mysql> start slave;

        

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

只要这俩是yes,双主就完成了

 配置slave1和slave2实现主从复制(在此只列举slave1单台主机配置);

   [root@slave1 ~]# cat <<END >>/etc/my.cnf
    > server-id=4
    > relay-log=relay4-log-bin
    > relay-log-index=slave-relay4-bin.index
    > END

    mysql> start slave;

   Slave_IO_Running: Yes
   Slave_SQL_Running: Yes

  只要这俩是yes,主从就完成了

测试:

   

在主服务器上创建lyh,从服务器是有同步

分别在master1、master2、slave1、slave2 monitor五个节点安装mysql-mmm软件程序并且配置agent指定本机的节点名称(在此只列举master1单台主机配置);

  配置本地yum源,上传Mysql_mmm_rpm文件夹到master1的/root下

       

   [root@master1 ~]# yum -y install mysql-mmm mysql-mmm-agent mysql-mmm-tools

 

  [root@master1 ~]# vi /etc/mysql-mmm/mmm_agent.conf

   include mmm_common.conf

   # The 'this' variable refers to this server.  Proper operation requires

   # that 'this' server (db1 by default), as well as all other servers, have the

   # proper IP addresses set in mmm_common.conf.

   this db1

   :wq

  [root@master2 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.conf

   include mmm_common.conf

   this db2

  [root@slave1 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.conf

   include mmm_common.conf

   this db3

   

  [root@slave2 ~]# egrep -v "^#|^$" /etc/mysql-mmm/mmm_agent.conf

   include mmm_common.conf

   this db4

   

  在master1节点上授权monitor节点连接数据库集群;

   

   [root@master1 ~]# mysql -uroot -p123123

   mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.100.%' identified by 'monitor';

    Query OK, 0 rows affected (0.00 sec)

   mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.100.%' identified    by 'agent';

    Query OK, 0 rows affected (0.00 sec)

   mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

   mysql> exit

安装monitor节点上的mysql-mmm软件程序;

   [root@monitor ~]# yum -y install mysql-mmm mysql-mmm-tools mysql-mmm-monitor

   

配置 monitor节点上的mysql-mmm的配置文件并且复制到各个mysql节点;

   

[root@monitor ~]# vi /etc/mysql-mmm/mmm_common.conf

active_master_role      writer ##指定活跃角色为写角色

<host default>

    cluster_interface       eth0 ##承载的网卡

    pid_path                /var/run/mysql-mmm/mmm_agentd.pid

    bin_path                /usr/libexec/mysql-mmm/ ##可执行文件路径

    replication_user        master ##mysql集群主从复制账户

    replication_password    123123

    agent_user              mmm_agent ##monitor连接集群的账户

    agent_password          agent

</host>

<host db1>

    ip      192.168.100.1

    mode    master

    peer    db2 ##指定对立的节点名

</host>

<host db2>

    ip      192.168.100.3

    mode    master

    peer    db1

</host>

<host db3>

    ip      192.168.100.5

    mode    slave

</host>

<host db4>

    ip      192.168.100.6

    mode    slave

</host>

<role writer>

    hosts   db1, db2

    ips     192.168.100.10

    mode    exclusive ##同一时间存在单个主

</role>

<role reader>

    hosts   db3, db4

    ips     192.168.100.251, 192.168.100.252

    mode    balanced ##轮询

</role>

[root@monitor ~]# vi  /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

<monitor>

    ip                  127.0.0.1

    pid_path            /var/run/mysql-mmm/mmm_mond.pid

    bin_path            /usr/libexec/mysql-mmm    

    status_path         /var/lib/mysql-mmm/mmm_mond.status    

ping_ips            192.168.100.1, 192.168.100.3, 192.168.100.5, 192.168.100.6     ##指定监听的所有节点ip

auto_set_online     60 ##判定其online的时间,超过60s认为其down

   </monitor>

<host default>

    monitor_user        mmm_monitor ##monitor的工作用户

    monitor_password    monitor

</host>

debug 0

[root@monitor ~]# for i in 1 3 5 6;do scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.$i:/etc/mysql-mmm/; done ##将配置文件复制到mysql节点

启动master1、master2、slave1、slave2四个节点上的mysql-mmm服务(在此只列举master1单台主机配置);

[root@master1 ~]# systemctl daemon-reload

[root@master1 ~]# systemctl start mysql-mmm-agent

[root@master1 ~]# netstat -utpln |grep mmm

tcp        0      0 192.168.100.101:9989    0.0.0.0:*               LISTEN      32670/mmm_agentd

启动monitor节点上的mysql-mmm服务并查看集群状态;

[root@monitor ~]# systemctl daemon-reload

[root@monitor ~]# systemctl start mysql-mmm-monitor

[root@monitor ~]# netstat -utpln |grep mmm

tcp        0      0 127.0.0.1:9988          0.0.0.0:*               LISTEN      15266/mmm_mond

测试

[root@monitor ~]# mmm_control show

# Warning: agent on host db4 is not reachable

  db1(192.168.100.1) master/ONLINE. Roles: writer(192.168.100.250)

  db2(192.168.100.3) master/ONLINE. Roles:

  db3(192.168.100.5) slave/ONLINE. Roles: reader(192.168.100.251)

  db4(192.168.100.6) slave/ONLINE. Roles: reader(192.168.100.252)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql-mmm集群 的相关文章

  • 由于缺少 PHP 扩展,CakePHP 3 无法连接到数据库

    我正在尝试使用 WT NMP 安装 cakePHP 3 0 0 但收到以下消息 CakePHP 无法连接到数据库 由于以下原因无法使用数据库驱动程序 Cake Database Driver Mysql 缺少 PHP 扩展或未满足的依赖项
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 在 LINQ 中执行 FirstOrDefault 的替代方法

    我有一个成员资格表 用于记录用户是否是列表的成员 当用户的成员资格发生更新时 会写入新记录 并且先前的记录保持原样 从而可以维护其成员资格的历史记录 要获取用户的会员身份 需要选择他们最近的条目 下面是一些用户列表成员资格数据的示例 目的是
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 如何使用 SQL 对项目进行排序,然后按另一个条件再次排序

    我正在使用 MySQL 我想对记录进行排序 或者我想对记录进行分组 然后按另一个条件再次对其进行排序 例如我有 6 个项目 Names Group Jack G1 Dian G2 Emily G2 Dean G1 Teddy G2 Gabe
  • 我不断收到此 mysql 错误代码 #1089

    CREATE TABLE movies movie movie id INT 3 NULL AUTO INCREMENT movie name VARCHAR 25 NULL movie embedded id VARCHAR 50 NUL
  • 用于全文搜索和 2 亿多条记录的数据库

    我即将创建一个包含至少 2 亿个条目的庞大数据库 数据库需要可使用全文进行搜索 并且速度应该很快 我的数据库从许多不同的数据源获取数据 我需要定期导入新的或更新的数据 将我的所有数据存储在像 mysql 这样的关系数据库中 然后创建一个 n
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • MySQL InnoDB引擎是否对只读事务运行任何性能优化

    根据参考文档 只读事务标志可能会提示存储引擎运行一些优化 设置会话事务只读 如果事务访问模式设置为 READ ONLY 则对表进行更改 被禁止 这可能使存储引擎能够提高性能 不允许写入时可能进行的改进 InnoDB引擎是否对只读事务运行这样
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • 条件对列表的 In 子句

    有一个表 我需要通过在配对值列表中应用和条件来获取分页记录 下面是解释 假设我有一堂课Billoflading其中有各个领域 表中两个重要字段是 tenant billtype 我有一个包含值的对列表 tenant1 billtype1 t
  • MySQL - 查找接近的匹配项

    MySQL 有没有办法在文本字段中找到紧密匹配的内容 说找到 email protected cdn cgi l email protection当搜索时 email protected cdn cgi l email protection
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • 迁移问题:MS SQL > MySQL:插入缓冲区内存

    我在使用 MySQL Workbench 上的内置迁移工具时遇到问题 我正在将一个非常大的数据库从 MS SQL 2014 迁移到 MySQL MS SQL 服务器本地部署在我的 Windows 8 1 桌面上 MySQL 服务器在我的网络
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • 错误 1305 (42000):保存点...不存在

    我的 MYSQL 数据库中有这个 SQL 存储过程为空 所以我猜没有隐式提交 DROP PROCEDURE IF EXISTS doOrder DELIMITER CREATE PROCEDURE doOrder IN orderUUID
  • mysql 查询选择当月的所有行?

    我有一个名为 startdate 的日期时间类型的列 我必须获取当前月份的开始日期和结束日期之间的所有行 即从 1 11 2014 到 30 11 2014 select from your table where year curdate
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • 构造树型结构数据

    构造树型结构数据 param data 数据源 param id id字段 默认 id param parentId 父节点字段 默认 parentId param children 孩子节点字段 默认 children export fu
  • AUC的计算、物理意义,

    文章目录 一 定义 二 性质 三 计算 3 1 方法一 根据定义 3 2 方法二 根据意义 3 3 方法三 方法二优化 3 4 方法四 工业场景 四 物理意义推导 一 定义 ROC曲线与坐标轴围成的面积 ROC曲线由不同阈值下 TPR Y轴
  • Linux内核在I386架构下的内存管理

    转载自 http blog csdn net li shyng article details 5545973 同类型的 http www kerneltravel net journal ii I386是Intel的x86系列CUP中一个
  • 前端页面有那三层构成,分别是什么?作用是什么?

    结构 表现和行为 其中结构主要是有HTML标签组成 结构即在页面body里面我们写入的标签都是为了页面的结构 表现即指css样式表 通过css可以是页面的结构标签更具美感 行为是指页面和用户具有一定的交互 同时页面结构或者表现发生变化 主要
  • 接口测试工具-apifox

    Apifox 是 API 文档 API 调试 API Mock API 自动化测试一体化协作平台 定位 Postman Swagger Mock JMeter 通过一套系统 一份数据 解决多个系统之间的数据同步问题 只要定义好 API 文档
  • 将一个网页设置为屏保

    有没有试过将一个网页作为屏保 最近我正好有这个需求 一些需要给家里人经常看到的提示信息 如果定闹钟多了大家嫌烦 我口头提示多了比闹钟还烦 印在A4纸上贴墙上既影响美观又不容易修改内容 打印还要花银子 自己写字又不好看 突然想到我几乎每天早上
  • Unity播放音频

    在Unity中 可以在物体上添加AudioSource组件来播放音频 AudioSource组件可以控制音频文件的播放 音量 音调 空间效果等属性 以下是在物体上添加AudioSource组件的步骤 1 在Unity中打开场景 选择您想要添
  • tensorflow-gpu 2.3.0安装 及 相关对应版本库安装(Anaconda安装)

    目录 如需转载 请标明出处 谢谢 一 安装tensorflow gpu2 3 0 二 配置其他相关的库 很多人以为安装完tensorflow gpu就是一切都结束了 但是殊不知 python中的很多库 比如numpy matplotlib等
  • 【JavaScript数据结构与算法】一、栈及leetcode实战

    栈 栈是一种遵从后进先出 LIFO 原则的有序集合 新添加或待删除的元素都保存在栈的同一端 称作栈顶 另一端就叫栈底 在栈里 新元素都靠近栈顶 旧元素都接近栈底 栈数据结构 我们需要一种数据结构来保存栈里的元素 可以选择数组 数组允许我们在
  • 数据库查询优化 --- 索引 Index

    数据库查询优化 索引 Index 什么是索引 索引的实现方法 聚集索引 和 非聚簇索引 聚集索引 非聚集索引 组合索引 索引的使用 适合使用索引的场景 不适合使用索引的场景 SQL创建索引 什么是索引 没有加索引的数据 它的数据无序的放置在
  • 串级PID与单极PID的区别

    目录 前言 一 什么是串级PID 二 串级PID与单极PID比较 1 控制小车开到某一位置 2 平衡小车速度控制 三 什么时候用串级PID 结语 前言 本文将讲述串级PID与单极PID的区别 并由此引出什么时候用串级PID 对于想深入学习P
  • electron vue3 + ts 初始化项目

    新建 vue3 ts 项目 npm init vitejs app electron demo 选择 vue ts 等待项目创建完成 安装 electron npm i electron D 确认 node modules electron
  • 【C++入门】运算符重载详解

    1 什么是运算符重载 不可重载运算符 运算符含义 成员访问运算符 gt 和 成员指针访问运算符 域运算符 sizeof 长度运算符 条件运算符 预处理符号 1 运算符 运算符分为算术运算符 关系运算符 逻辑运算符 等 2 运算符重载 给运算
  • idea授权服务器

    这里提供一个我已经搭建好的idea授权服务器 http ysk521 cn 1017
  • ctfshow萌新红包题writeup

    ctfshow萌新专属红包题writeup 题目来源 https ctf show 这一题是ctfshow平台上面2月17日更新的一个萌新红包题 当天在官方交流群内知道晚上会有一个萌新红包题之后 就有点期待了 小萌新也想拿一次红包 嘿嘿 下
  • 推挽输出和开漏输出区别

    推挽输出 可以输出高 低电平 连接数字器件 输出 0 时 N MOS 导通 P MOS 高阻 输出0 输出 1 时 N MOS 高阻 P MOS 导通 输出1 不需要外部上拉电路 开漏输出 输出端相当于三极管的集电极 要得到高电平状态需要上
  • 同步代码块、io、file常用的方法、流

    一 同步 1 同步代码块 把要实现线程安全的代码放在同步代码块中 java中任何对象内部都有一个开关 你可以理解为标志位 1就是表示关 0就表示开 2 同步方法 二 io input输入 output输出 计算机中的文件以及文件中的内容 F
  • maven的下载安装配置教程(详细图文)

    maven的下载安装配置教程 详细图文 一 maven的下载 https maven apache org download cgi 下载zip文件 二 maven的安装 注意 maven的安装需要依赖jdk的安装 所以必须先安装完成jdk
  • STM32的PWM相关函数TIM_SetCompare1的一定理解

    void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert param IS TIM LIST8 PERIPH TIMx Set t
  • mysql-mmm集群

    一 Mysql mmm集群技术概述 概述 MMM Master Master replication manager for MySQL 是一套支持双主故障切换和双主日常管理的脚本程序 MMM使用Perl语言开发 主要用来监控和管理MySQ