MySQL主从同步

文章目录

  • MySQL主从同步概述
    • MySQL主从同步原理
    • MySQL主从同步结构模式
    • MySQL主从同步搭建
      • 搭建步骤
      • 一主一从
      • 实验环境
        • master主机
        • slave1主机
        • 验证主从同步
      • 一主多从
        • master主机
        • slave2主机
        • 验证主从同步
      • 链式复制(主从从)
        • slave1主机
        • slave2主机
        • 验证链式复制
    • MySQL主从同步复制模式
  • 总结

MySQL主从同步概述

  • 实现不同MySQL服务器之间数据实时同步的解决方案
  • 通过主从同步可以实现数据备份的作用

MySQL主从同步原理

在这里插入图片描述

MySQL主从同步结构模式

  • 一主一从
  • 一主多从
  • 链式复制
  • 互为主从(扩展实验)

MySQL主从同步搭建

搭建步骤

- master(主服务器)
​ 1)开启binlog日志
​ 2)授权主从同步用户
​ 3)备份已有数据
- slave1(从服务器)
​ 1)设置server_id,可不开启binlog日志
​ 2)还原数据(实现主从结构前保证服务器基础数据统一)
​ 3)搭建主从关系

一主一从

在这里插入图片描述

实验环境

使用CentOS7.9模板机克隆实验虚拟机(配置如下信息)

IP地址使用的是DHCP自动分配,因此请以自己分配的为准!

主机名IP地址角色
master192.168.8.100主服务器
slave1192.168.8.101从服务器1

为两台虚拟机配置IP地址、指定阿里镜像站作为yum源

配置master主机

[root@localhost ~]# hostnamectl set-hostname master				#配置主机名
[root@master ~]# nmcli connection modify ens33 ipv4.method auto \
connection.autoconnect yes
[root@master ~]# rm -rf /etc/yum.repos.d/*.repo	 				#删除自带的repo文件
[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo \ https://mirrors.aliyun.com/repo/Centos-7.repo		     		 #下载阿里镜像源
[root@master ~]# yum clean all									#清空缓存
[root@master ~]# yum repolist									#查看yum

配置slave主机

[root@localhost ~]# hostnamectl set-hostname slave1				#配置主机名
[root@slave1 ~]# nmcli connection modify ens33 ipv4.method auto \
connection.autoconnect yes
[root@slave1 ~]# rm -rf /etc/yum.repos.d/*.repo	 				#删除自带的repo文件
[root@slave1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo \ https://mirrors.aliyun.com/repo/Centos-7.repo		     		 #下载阿里镜像源
[root@slave1 ~]# yum clean all									#清空缓存
[root@slave1 ~]# yum repolist									#查看yum

2台主机均使用MobaXterm远程链接

将master和slave1搭建成MySQL主从结构

master主机

将学习环境中的mysql8-centos7目录上传至master和slave1主机的/root/

[root@master ~]# cd mysql8-centos7/
[root@master mysql8-centos7]# yum -y localinstall *.rpm 

master主机指定server_id,开启binlog日志

[root@master ~]# vim /etc/my.cnf
...此处省略1万字,在第4行下方写入,不要写行号!...
  4 [mysqld]
  5 server_id=100					#指定server_id,每台主机都不一样,可以使用IP地址主机位区分
  6 log_bin=master					#指定binlog日志名
  ...此处省略1万字...
 [root@master ~]# systemctl restart mysqld				#重启动mysqld服务
 [root@master ~]# ls /var/lib/mysql/master*				#验证是否成功
 /var/lib/mysql/master.000001  /var/lib/mysql/master.000002 /var/lib/mysql/master.index
[root@master ~]# grep -i password /var/log/mysqld.log 	#过滤初始密码(每个人都不一样)
2023-07-16T13:04:50.381204Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: (wgrk:_s(7yQ
[root@master ~]# mysql -uroot -p'(wgrk:_s(7yQ'			#连接数据库
mysql> ALTER USER root@"localhost" IDENTIFIED BY '123tedu.CN';	#修改root密码
mysql> SET GLOBAL validate_password.policy=LOW;					#设置密码策略
mysql> SET GLOBAL validate_password.length=4;					#设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF;  #关闭用户名检测可以用用户名作为密码

用户授权(用户slave1,密码为slavepwd,这个用户用于从服务器连接主服务器同步数据)

  • 使用 mysql_native_password 插件验证该用户的密码
  • REPLICATION SLAVE 表示使用户拥有向主服务器复制的权限
mysql> CREATE USER 'slave1'@'%' IDENTIFIED with mysql_native_password BY 'slavepwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';

查看日志信息

mysql> SHOW MASTER STATUS ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000002 |      984 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

备份master主机上的数据(虽然现在没有多余的数据,但工作中一定会有旧数据)

[root@master ~]# mysqldump -hlocalhost -uroot -p'123tedu.CN' -A > ab1.sql	#备份已有数据
[root@master ~]# scp ab1.sql 192.168.8.101:/root		#同步备份文件(IP不要照抄)
slave1主机
  • 运行数据库服务
  • 指定 server_id
  • 指定主服务器信息
  • 启动 slave 进程
  • 查看状态
  • 需要先将master上的数据手动还原至slave主机
  • 确保master主机和slave主机UUID是不相同的,因为都是从模板克隆的裸机,所以这里可以不用考虑该问题

slave1主机安装mysql

将学习环境中的mysql8-centos7目录上传至master和slave1主机的/root/

[root@slave1 ~]# cd mysql8-centos7/
[root@slave1 mysql8-centos7]# yum -y localinstall *.rpm 

slave1主机修改server_id

[root@slave1 ~]# vim /etc/my.cnf
......
4 [mysqld]
5 server_id=101         						#指定id号,默认与IP地址的主机位相同
......
[root@slave1 ~]# systemctl restart mysqld		#重启服务

slave1主机设置密码

[root@slave1 ~]# grep -i password /var/log/mysqld.log		#过滤初始密码(每个人都不一样)
2023-07-16T13:33:20.939066Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: (f190mI%onK%
[root@slave1 ~]# mysql -uroot -p'(f190mI%onK%'

修改密码

mysql> ALTER USER root@"localhost" IDENTIFIED BY '123tedu.CN';	#修改root密码
mysql> SET GLOBAL validate_password.policy=LOW;					#设置密码策略
mysql> SET GLOBAL validate_password.length=4;					#设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF;  #关闭用户名检测可以用用户名作为密码

还原master主机备份过来的数据

[root@slave1 ~]# mysql  -uroot -p'123tedu.CN' <  /root/ab1.sql 	#数据还原

slave1指定主服务器信息

####指定主服务器信息
#MASTER_HOST=       				指定主服务器的IP地址
#MASTER_USER=       				指定主服务器授权用户 
#MASTER_PASSWORD=   				指定授权用户的密码
#MASTER_LOG_FILE=   				指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS=   					指定主服务器binlog日志偏移量(去master上查看)
mysql> CHANGE MASTER TO 
    -> MASTER_HOST="192.168.8.100",				#指定自己主服务器master的IP地址
    -> MASTER_USER="slave1", 
    -> MASTER_PASSWORD="slavepwd",
    -> MASTER_LOG_FILE="master.000002",
    -> MASTER_LOG_POS=984;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> START SLAVE;					#启动SLAVE进程
mysql> SHOW SLAVE STATUS \G;		#查看主从同步状态
验证主从同步

主服务器master写入数据验证

mysql> CREATE DATABASE som;			#新建som库

从服务器slave1写入数据验证

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| som                |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

主服务器master写入数据验证

mysql> CREATE TABLE som.t1(id INT,name CHAR(10));
mysql> INSERT INTO som.t1 VALUES(1,"Sam");
mysql> INSERT INTO som.t1 VALUES(2,"Jack");

从服务器slave1写入数据验证

mysql> SELECT * FROM som.t1;
+------+------+
| id   | name |
+------+------+
|    1 | Sam  |
|    2 | Jack |
+------+------+

一主多从

在这里插入图片描述

主机名IP地址角色
master192.168.8.100主服务器
slave1192.168.8.101从服务器1
slave2192.168.8.102从服务器2

使用CentOS7.9模板机克隆slave2虚拟机,并为该虚拟机配置IP地址和阿里云镜像站点的yum源

配置完基础环境之后为slave2拍摄一张快照命名为"基础环境",用于后边的主从从实验,在操作前还原快照即可

[root@localhost ~]# hostnamectl set-hostname slave2				#配置主机名
[root@slave2 ~]# nmcli connection modify ens33 ipv4.method auto \
connection.autoconnect yes
[root@slave2 ~]# rm -rf /etc/yum.repos.d/*.repo	 				#删除自带的repo文件
[root@slave1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo \ https://mirrors.aliyun.com/repo/Centos-7.repo		     		 #下载阿里镜像源
[root@slave2 ~]# yum clean all									#清空缓存
[root@slave2 ~]# yum repolist									#查看yum
master主机

master主机需要重新完全备份(因为相对与上次备份已经产生了新数据)

[root@master ~]# mysqldump -uroot -p'123tedu.CN' -A > ab2.sql
[root@master ~]# scp ab2.sql 192.168.8.102:/root
slave2主机

slave2主机操作

将学习环境中的mysql8-centos7目录上传至master和slave2主机的/root/

[root@slave2 ~]# cd mysql8-centos7/
[root@slave2 mysql8-centos7]# yum -y localinstall *.rpm				#安装MySQL

slave2主机修改server_id

[root@slave2 ~]# vim /etc/my.cnf
......
4 [mysqld]
5 server_id=102         						#指定id号,默认与IP地址的主机位相同
......
[root@slave2 ~]# systemctl restart mysqld		#重启服务

slave2主机设置密码

[root@slave2 ~]# grep -i password /var/log/mysqld.log		#过滤初始密码(每个人都不一样)
2023-07-16T16:28:20.939066Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: eqCaZ1f=2*nu
[root@slave2 ~]# mysql -uroot -p'eqCaZ1f=2*nu'

修改密码

mysql> ALTER USER root@"localhost" IDENTIFIED BY '123tedu.CN';	#修改root密码
mysql> SET GLOBAL validate_password.policy=LOW;					#设置密码策略
mysql> SET GLOBAL validate_password.length=4;					#设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF;  #关闭用户名检测可以用用户名作为密码

还原master主机备份过来的数据(使用ab2.sql)

[root@slave2 ~]# mysql  -uroot -p'123tedu.CN' <  /root/ab2.sql 	#数据还原

slave2指定主服务器信息

  • MASTER_LOG_FILE和MASTER_LOG_POS指定为master主机现使用的文件(SHOW MASTER STATUS查看)

  • master主机查看(每个人都不一样,以自己的为准)

mysql> SHOW MASTER STATUS ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000003 |     1461 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
####slave2指定主服务器信息
#MASTER_HOST=       				指定主服务器的IP地址
#MASTER_USER=       				指定主服务器授权用户 
#MASTER_PASSWORD=   				指定授权用户的密码
#MASTER_LOG_FILE=   				指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS=   					指定主服务器binlog日志偏移量(去master上查看)
mysql> CHANGE MASTER TO 
    -> MASTER_HOST="192.168.8.100",				#指定自己主服务器master的IP地址
    -> MASTER_USER="slave1", 
    -> MASTER_PASSWORD="slavepwd",
    -> MASTER_LOG_FILE="master.000003",
    -> MASTER_LOG_POS=1461;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> START SLAVE;					#启动SLAVE进程
mysql> SHOW SLAVE STATUS \G;		#查看主从同步状态
验证主从同步

master测试数据写入

mysql> CREATE TABLE som.t2(id INT,name CHAR(10),male ENUM("male","female"));
mysql> INSERT INTO som.t2 VALUES(1,"Sam","male");
mysql> INSERT INTO som.t2 VALUES(2,"Janner","female");

slave1验证数据是否同步

mysql> USE som;
mysql> SHOW TABLES;						#多出了som.t2表
mysql> SELECT * FROM som.t2;
+------+--------+--------+
| id   | name   | male   |
+------+--------+--------+
|    1 | Sam    | male   |
|    2 | Janner | female |
+------+--------+--------+
2 rows in set (0.00 sec)

slave2验证数据是否同步

mysql> USE som;
mysql> SHOW TABLES;						#多出了som.t2表
mysql> SELECT * FROM som.t2;
+------+--------+--------+
| id   | name   | male   |
+------+--------+--------+
|    1 | Sam    | male   |
|    2 | Janner | female |
+------+--------+--------+
2 rows in set (0.00 sec)

链式复制(主从从)

slave1主机既是master主机的从服务器,也是slave2主机的主服务器

slave2使用之前拍摄的"基础环境"快照还原至没有安装MySQL状态

在这里插入图片描述

主机名IPIP地址角色
master192.168.8.100主服务器
slave1192.168.8.101从服务器/主服务器
slave2192.168.8.102从服务器
slave1主机

slave1备份所有数据,同步至slave2(主从同步前的准备工作)

[root@slave1 ~]# mysqldump  -uroot -p'123tedu.CN' -A > /root/all.sql
[root@slave1 ~]# scp /root/all.sql root@192.168.8.102:/root/

slave1主机启用允许级联复制

[root@slave1 ~]# vim /etc/my.cnf								#编辑主配置文件
......
4 [mysqld]
5 server_id=101         			#指定id号,默认与IP地址的主机位相同
6 log_bin=master					#指定binlog日志
7 log_slave_updates					#启用级联复制(本身是主和从两种角色的机器需配置该项)
......
[root@slave1 ~]# systemctl restart mysqld		#重启服务
slave2主机

slave2主机安装mysql,修改配置文件,指定serve_id,重启服务

[root@slave2 ~]# cd mysql8-centos7/
[root@slave2 mysql8-centos7]# yum -y localinstall *.rpm
[root@slave2 ~]# vim /etc/my.cnf
......
4 [mysqld]
5 server_id=102         						#指定id号,默认与IP地址的主机位相同
......
[root@slave2 ~]# systemctl restart mysqld		#重启服务

slave2主机修改密码

[root@slave2 ~]# grep -i password /var/log/mysqld.log		#过滤初始密码(每个人都不一样)
2023-07-16T17:38:40.939066Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: awwB%7?uu#yf
[root@slave2 ~]# mysql -uroot -p'awwB%7?uu#yf'

修改密码

mysql> ALTER USER root@"localhost" IDENTIFIED BY '123tedu.CN';	#修改root密码
mysql> SET GLOBAL validate_password.policy=LOW;					#设置密码策略
mysql> SET GLOBAL validate_password.length=4;					#设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF;  #关闭用户名检测可以用用户名作为密码

slave2主机还原slave1主机备份的数据

[root@slave2 ~]# mysql -uroot -p'123tedu.CN' < /root/all.sql

slave1主机查看binlog日志和偏移量

mysql> SHOW MASTER STATUS ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000001 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

slave2指定slave1为主服务器

####slave2指定主服务器信息
#MASTER_HOST=       				指定主服务器的IP地址
#MASTER_USER=       				指定主服务器授权用户 
#MASTER_PASSWORD=   				指定授权用户的密码
#MASTER_LOG_FILE=   				指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS=   					指定主服务器binlog日志偏移量(去master上查看)
mysql> CHANGE MASTER TO 
    -> MASTER_HOST="192.168.8.101",			#指定slave1主机的IP地址
    -> MASTER_USER="slave1", 				#这个用户slave1从master同步过,如果没有需要授权
    -> MASTER_PASSWORD="slavepwd",
    -> MASTER_LOG_FILE="master.000001,		#slave1的日志文件
    -> MASTER_LOG_POS=157;					#slave1的偏移量
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> START SLAVE;							#启动SLAVE进程
mysql> SHOW SLAVE STATUS \G;				#查看主从同步状态
			...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ...
验证链式复制

master主机写入数据验证链式复制(主从从)

mysql> CREATE TABLE som.t3(id INT,name CHAR(8),age TINYINT UNSIGNED);
mysql> INSERT INTO som.t3 VALUES(1,"tom",8);
mysql> INSERT INTO som.t3 VALUES(2,"jerry",15);;
Query OK, 1 row affected (0.00 sec)

slave1验证数据是否写入

mysql> USE som;
mysql> SHOW TABLES ;					#多出了som.t3表
+---------------+
| Tables_in_som |
+---------------+
| t1            |
| t2            |
| t3            |
+---------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM som.t3 ;			#som.t3表中有数据
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | tom   |    8 |
|    2 | jerry |   15 |
+------+-------+------+
2 rows in set (0.00 sec)

slave2验证数据是否写入

mysql> USE som;
mysql> SHOW TABLES ;					#多出了som.t3表
+---------------+
| Tables_in_som |
+---------------+
| t1            |
| t2            |
| t3            |
+---------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM som.t3 ;			#som.t3表中有数据
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | tom   |    8 |
|    2 | jerry |   15 |
+------+-------+------+
2 rows in set (0.00 sec)

MySQL主从同步复制模式

MySQL主从同步复制模式指的是主服务器(执行写操作的服务器)什么时候将SQL命令的执行结果返还给客户端

分为三种情况:

  • 异步复制(默认)

    • 主节点在执行写操作后,将写操作的日志异步发送到从节点。主节点不会等待从节点的同步完毕,直接讲结果返回给客户端,因此主节点可以以较高的速度执行写操作,而从节点可能会有一定的延迟。由于异步复制的延迟,如果主节点故障或数据丢失,可能会造成从节点数据与主节点不一致。
  • 全同步复制

    • 在全同步复制中,主节点在执行写操作后,等待所有从节点全部同步完数据之后,在将结果返回至客户端这样可以确保主节点和从节点的数据一致性,但会影响主节点的写操作速度,因为主节点需要等待从节点的确认。
  • 半同步复制

    • 在半同步复制中,主节点在执行写操作后,等待至少一个从节点同步完数据再将结果返回至客户端。这样可以提高主节点的写操作速度,同时保证主节点和至少一个从节点的数据一致性。但如果从节点故障或延迟高,可能会造成主节点的等待时间增加。

总结

  • 掌握MySQL主从同步部署流程
    • 一主一从
    • 一主多从
    • 链式复制
  • 掌握MySQL主从复制模式特点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot2—基础篇

目录 快速上手SpringBoot • SpringBoot入门程序开发 基于Idea创建SpringBoot工程&#xff08;一&#xff09; 基于官网创建SpringBoot工程&#xff08;二&#xff09; 基于阿里云创建SpringBoot工程&#xff08;三&#xff09; 手工创建Maven工程修改为SpringBoot工程&…

GPT-4V新玩法登顶GitHub热榜,随手一画就能生成网页!web开发者:感受到了威胁

西风 发自 凹非寺 量子位 | 公众号 QbitAI 随手一画就能生成网页&#xff01;GPT-4V新玩法登顶GitHub热榜&#xff0c;狂揽3000&#x1f31f;&#xff1a; 现在只要简单画一画&#xff0c;框一框&#xff0c;点击执行&#xff1a; “啪”地一下&#xff0c;一个带有各种“按钮…

Apriori算法

Apriori算法由R. Agrawal和R. Srikant于1994年在数据集中寻找布尔关联规则的频繁项集。该算法的名称是Apriori&#xff0c;因为它使用了频繁项集属性的先验知识。我们应用迭代方法或逐层搜索&#xff0c;其中k-频繁项集用于找到k1个项集。 为了提高频繁项集逐层生成的效率&…

oracle21c安装报错【[INS-32014] 指定的 Oracle 基目录位置XXX无效】

一.问题 [INS-32014] 指定的 Oracle 基目录位置XXX无效 二.解决办法 安装包的文件放置不可以在中文字文件夹下面&#xff0c;改为英文【soft】,就可以成功安装完成了&#xff01;

米尔AM62x核心板,高配价低,AM335x升级首选

AM335x是TI经典的工业MPU&#xff0c;它引领了一个时代&#xff0c;即工业市场从MCU向MPU演进&#xff0c;帮助产业界从Arm9迅速迁移至高性能Cortex-A8处理器。随着工业4.0的发展&#xff0c;HMI人机交互、工业工控、医疗等领域的应用面临迫切的升级需求&#xff0c;AM62x处理器…

mysql统计整个数据库记录条数

SELECTSUM(TABLE_ROWS) FROM(SELECTTABLE_NAME,TABLE_ROWSFROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA 数据库名&#xff0c;其他不变) t;效果如下&#xff1a;

[pybind11] debug C++代码

首先要有一个项目&#xff0c;我发布在github上了【传送门】 项目的结构如下&#xff1a; 其中src目录下是C代码&#xff0c;test.py是python测试代码。 然后直接开始演示。 1、把项目下载到本地 git clone --recursive https://github.com/immortalmin/pybind11_debug_eg.g…

4月2日-3日·上海 | 3DCC 第二届3D细胞培养与类器官研发峰会携手CGT Asia 重磅来袭

类器官&#xff08;Organoids&#xff09;作为干细胞研究领域最重要的成果之一&#xff0c;在基础医学研究、转化医学及药物研发领域展现出巨大的应用潜力&#xff0c;特别是在精准医疗以及药物安全性和有效性评价等方向凭借其先天优势引起了极大的市场关注&#xff0c;成为各大…

采访仁川市政府:探索《仁川登陆行动》体验及其 NFT 作品集背后的故事!

请简单介绍一下自己 大家好&#xff0c;我是仁川市政府品牌经理崔俊浩&#xff0c;负责《仁川登陆行动》的元宇宙活动。很高兴见到您。 是什么启发了你创作《仁川登陆行动》体验&#xff1f; 《仁川登陆行动》并未得到广泛认可&#xff0c;并且被认为是一项几乎不可能完成的任务…

golang学习笔记——斐波纳契数列

斐波纳契数列 编写一个程序来计算某个数字的斐波纳契数列。 斐波那契数列是一个数字列表&#xff0c;其中每个数字是前两个斐波那契数字之和。 例如&#xff0c;数字 6 的序列是 1,1,2,3,5,8&#xff0c;数字 7 的序列是 1,1,2,3,5,8,13&#xff0c;数字 8 的序列是 1,1,2,3,5…

前端实现页面内容的截图与下载(html2canvas)

今天是一个发文的好日子&#x1f600;~ &#x1f447;&#x1f447;&#x1f447; 一个需求&#xff0c;要截取页面中的内容并截图保存&#xff0c;来看一看我是怎么实现的吧&#xff1a; 这里需要使用到插件--html2canvas 1.安装并引入html2canvas npm install html2canv…

创作者焦点:Temple of Dum-Dum(试炼 3)

《Bomkus 博士的试炼》创作的幕后花絮。 《创作者焦点》系列共分为六部分&#xff0c;重点介绍《Bomkus 博士的试炼》的游戏创作过程及其独特的游戏功能。 Temple of Dum-Dum&#xff1a; Temple of Dum-Dum 是 Bomkus 博士试炼中的第三个挑战&#xff0c;该试炼由六项体验组成…

阎良区公益创投之“小飞机大梦想” 航模DIY主题活动

创造是人类探索迈出的第一步&#xff0c;科学是开启奇妙世界的金钥匙。为进一步提升“未来星”对科技知识的兴趣&#xff0c;培养他们的科学创新精神&#xff0c;11月16日&#xff0c;阎良区社会组织公益创投——“未来星”助力乡村留守儿童成长计划项目在阎良区聚宝小学开展“…

【hive-解决】HiveAccessControlException Permission denied: CREATEFUNCTION

文章目录 一.任务描述二. 解决 一.任务描述 Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [nameroot, typeUSER] does not have following privileges for operation CREATEFUNCTION [ADMIN PRIVILEGE on INPUT, ADMIN…

springboot 数据传输的加密解密方式一: AES(对称加密)

全文目录,一步到位 1.加密/解密方式一: AES1.1 AES加密简介1.2 AES解密简介1.3 AES细致介绍(外链) 2. AES加密解密使用2.1 应用场景2.2 工具包使用方式2.2.0 (关键)生成一个秘钥(16位)2.2.1 AES加密文本2.2.2 AES解密文本2.2.3 AES加密文件(源)2.2.4 AES解密文件(源)2.2.5 文件…

leetcode刷题日记:168. Excel Sheet Column Title(Excel表列名称)

我不知道你看到这一道题目有什么感觉&#xff0c;我先告诉你我有什么感觉&#xff0c;在此之前我再给你写一组有相同模式的数字。 你先告诉我你有什么感觉&#xff0c;有没有感觉&#xff0c;没有感觉的话&#xff0c;那我们就来更深的了解一下&#xff1a; 我们分析最后一…

Echarts -- 实现动态加载series

一、需求说明 1.1具体说明 根据每天的订单,查询出券码(title字段)的核销情况,如下单成功,已核销,取消订单,订单失败, title字段又分大概七八种,最后数据进行整合完毕之后,前端使用Echarts进行堆叠柱状图显示每天数据。 1.2 需求拆解 根据时间范围查询出每天的订单数据后,根据…

PostgreSQL 数据类型

文章目录 PostgreSQL数据类型说明PostgreSQL数据类型使用单引号和双引号数据类型转换布尔类型数值类型整型浮点型序列数值的常见操作 字符串类型日期类型枚举类型IP类型JSON&JSONB类型复合类型数组类型 PostgreSQL数据类型说明 PGSQL支持的类型特别丰富&#xff0c;大多数…

用户运营:如何搭建用户分析体系

在运营的工作范畴中&#xff0c;用户运营是很重要的一个环节&#xff0c;甚至有公司会设置专门的“用户运营”岗位。 用户运营的价值体现在多个方面&#xff0c;不仅可以帮助引流、吸引更多用户使用产品&#xff0c;在用户正式使用产品之后的运营则更为重要。通过日常用户运营&…

深度学习到智能小车(1)深度学习框架

0.前提 最近新开了一门叫机器学习的课程&#xff0c;老师一直在跟我们讲一些有关这方面的知识&#xff0c;告诉我们一定要学好数学&#xff0c;因为数学是算法的基础。我手上的donkeycar刚好也涉及到Keras深度神经网络&#xff0c;所以出于好奇我去图书馆借回了一本叫《Keras深…