Linux云计算 |【第四阶段】RDBMS2-DAY1

news2024/11/22 22:17:01

主要内容:

MySQL主从同步(概述、原理、构建主从同步)、主从同步结构类型(主多从、主从从、主主)、复制模式(异步、半同步)、启用半同步复制

一、MySQL主从同步

MySQL 主从同步(Master-Slave Replication)是一种常见的数据库复制技术,用于提高数据库的可用性、扩展性和数据安全性。通过主从同步,可以将一个 MySQL 数据库(主库)的数据复制到一个或多个 MySQL 数据库(从库),从而实现数据的冗余备份和读写分离。

1、主从同步概述

1)实现同步的服务结构

  • ① 主服务器(主库):接收从服务器访问连接;
  • ② 从服务器(从库):自动同步主服务器数据;

2)主从同步的工作原理

主库(Master)

  • 主库是数据的源头,负责处理所有的写操作(INSERT、UPDATE、DELETE)。
  • 主库将所有的写操作记录在二进制日志(Binary Log)中。

从库(Slave)

  • 从库是主库的副本,负责处理读操作(SELECT)。
  • 从库通过读取主库的二进制日志,将主库的写操作应用到自身,从而保持与主库的数据一致性。

二进制日志(Binary Log)

  • 二进制日志记录了主库的所有写操作,包括事务的开始和结束。
  • 从库通过连接到主库,读取并应用这些二进制日志,实现数据的同步。

3)主从同步的配置步骤

① 配置主库(Master)

  • 启用二进制日志:在主库的配置文件(通常是 my.cnf 或 my.ini)中,添加以下配置:
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server-id = 1
binlog_do_db = your_database_name

log_bin:指定二进制日志文件的路径和名称。

server-id:指定主库的唯一标识符。

binlog_do_db:指定需要同步的数据库名称(可选)。

  • 重启 MySQL 服务:重启 MySQL 服务以应用配置更改:
sudo systemctl restart mysql
  • 创建用于复制的用户:在主库上创建一个用于复制的用户,并授予复制权限:
CREATE USER 'repl_user'@'slave_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'slave_ip';
FLUSH PRIVILEGES;
  • 获取主库的二进制日志位置:在主库上执行以下命令,获取当前的二进制日志文件和位置:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

记录 File 和 Position 的值,这些值将用于从库的配置。

② 配置从库(Slave)

  • 配置从库:在从库的配置文件中,添加以下配置:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database_name

server-id:指定从库的唯一标识符。

relay_log:指定中继日志文件的路径和名称。

log_bin:指定二进制日志文件的路径和名称(可选)。

binlog_do_db:指定需要同步的数据库名称(可选)。

  • 重启 MySQL 服务:重启 MySQL 服务以应用配置更改:
sudo systemctl restart mysql
  • 配置从库连接主库:在从库上执行以下命令,配置从库连接到主库:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;

MASTER_HOST:主库的 IP 地址或主机名。

MASTER_USER:用于复制的用户名。

MASTER_PASSWORD:用于复制的用户密码。

MASTER_LOG_FILE:主库的二进制日志文件名。

MASTER_LOG_POS:主库的二进制日志位置。

  • 启动从库复制:在从库上执行以下命令,启动复制进程:
START SLAVE;
  • 检查从库状态:在从库上执行以下命令,检查复制状态:
SHOW SLAVE STATUS\G

检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 Yes,表示复制正常运行。

2、主从同步的优点

提高可用性:通过数据冗余,提高数据库的可用性,减少单点故障的风险

读写分离:将读操作分配到从库,减轻主库的负载,提高系统性能

数据备份:从库可以作为主库的备份,提供数据的安全性和可靠性

扩展性:通过增加从库,可以扩展系统的读能力,支持更多的并发读操作

3、主从同步的缺点

延迟问题:从库的数据同步可能存在延迟,特别是在主库写操作频繁的情况下

单点写入:主库仍然是单点写入,如果主库故障,需要手动切换到从库

配置复杂:主从同步的配置和管理相对复杂,需要仔细规划和维护


构建主从同步示例:

实验拓扑结构:

  • 服务器角色:node10为主(Master),node11为从(Slave);
  • node10配置:ip地址为192.168.2.10,安装mysql,初始化密码为NSD2021@tedu.cn
  • node11配置:ip地址为192.168.2.11,安装mysql,初始化密码为NSD2021@tedu.cn

提示:防火墙与SELinux提前关闭;

步骤1:准备初始化环境(node10、node11操作)

① 准备MySQL数据库,并初始化密码(以node10为例)

[root@node10 ~]# yum -y install mysql-community-*   //检查Yum源,并安装MySQL
[root@node10 ~]# systemctl start mysqld     //启动服务
[root@node10 ~]# systemctl enable mysqld    //设置开机自启
[root@node10 ~]# grep -i password /var/log/mysqld.log    //查看生成的随机密码
2021-06-10T13:44:26.945514Z 1 [Note] A temporary password is generated for root@localhost: O-,Ya=5qpkpW
[root@node10 ~]# mysqladmin -uroot -p' O-,Ya=5qpkpW ' password 'NSD2021@tedu.cn'

② 导入sql数据(仅node10操作)

参考:# git clone https://gitee.com/mrzhangzhg/tedu_nsd.git

[root@localhost ~]# scp -r /var/lib/mygit/tedu_nsd/dbs/mysql_scripts/ 192.168.2.10:/root
[root@node10 ~]# ls
anaconda-ks.cfg  mysql_scripts
[root@node10 ~]# mysql -uroot -pNSD2021@tedu.cn < mysql_scripts/nsd2021_data.sql
[root@node10 ~]# mysql -uroot -pNSD2021@tedu.cn -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nsd2021            |
| performance_schema |
| sys                |
+--------------------+

 

步骤2:配置主服务器(node10操作)

① 修改配置文件,并重启服务

[root@node10 ~]# vim /etc/my.cnf
[mysqld]
server_id = 10         //服务器身份标识
log_bin = master10    //启用binlog日志
...
[root@node10 ~]# systemctl restart mysqld   //重启服务

② 查看生成的binlog日志文件

[root@node10 ~]# ls /var/lib/mysql/master10.*
/var/lib/mysql/master10.000001  /var/lib/mysql/master10.index
[root@node10 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master10.000001 |      154 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

③ 授权Slave从服务器,可通过repluser用户同步数据

mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
mysql> show grants for repluser@'%';
+--------------------------------------------------+
| Grants for repluser@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
+--------------------------------------------------+
1 row in set (0.00 sec)

步骤3:配置从服务器(node11操作)

① 修改配置文件,并重启服务

[root@node11 ~]# vim /etc/my.cnf
[mysqld]
server_id = 11    //服务器身份标识
...
[root@node11 ~]# systemctl restart mysqld

② 通过mysqldump手动同步主服务数据库数据

注意:从服务器与主服务器进行自动同步前提,需保证之前已有的数据库数据一致;

# 主服务器备份数据,并拷贝备份文件到从服务器

[root@node10 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data nsd2021 > /root/fullbackup.sql
[root@node10 ~]# scp /root/fullbackup.sql root@192.168.2.11:/root

# 从服务器恢复数据

[root@node11 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database nsd2021 default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
[root@node11 ~]# mysql -uroot -pNSD2021@tedu.cn nsd2021 < /root/fullbackup.sql

【--master-data】作用:如果完全备份完成后,又有新的数据产生,它可记录备份时的数据状态信息。

步骤4:配置从服务器与主服务器同步

① 在同步的备份文件中,查看binlog日志名(master_log_file)和偏移量(master_log_pos)

注意:没有过滤出日志名和偏移量,需检查主服务器的日志状态

[root@node11 ~]# grep master10 /root/fullbackup.sql
CHANGE MASTER TO MASTER_LOG_FILE='master10.000001', MASTER_LOG_POS=441;

② 从服务器指定主服务器同步信息

[root@node11 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.10',    //指定连接主库地址
    -> master_user='repluser',        //指定连接已授权用户
    -> master_password='NSD2021@tedu.cn',     //授权用户密码
    -> master_log_file='master10.000001',     //binlog日志
    -> master_log_pos=441;      //偏移量
Query OK, 0 rows affected, 2 warnings (0.00 sec)

③ 启动slave服务器进程

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

④ 验证:查看slave状态信息

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.10
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master10.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: node11-relay-bin.000004
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master10.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
…

⑤ 验证:查看从服务器上的相关文件

[root@node11 ~]# ls /var/lib/mysql

文件名

说明

master.info

主库信息(端口、IP、日志、用户账户密码、UUID等)

relay-log.info

中继日志信息(中继日志、端口、偏移量等)

主机名-relay-bin.编号

中继日志(binlog日志记录的SQL命令)

主机名-relay-bin.index

索引日志(记录已有的中继日志)

补充:将目录中的四类从库文件全部删除,再重启服务,可还原为独立的、非从服务器;


排错思路:

① 通过`show slave status`查看Error错误说明;

② 如果配置主库信息输入错误,需先关闭slave功能,配置完成后再开启slave功能

mysql> stop slave;   //停止slave
mysql> start slave;   //开启slave
mysql> show slave status\G

③ master.info文件和relay-log.info文件有配置记录,可用于排错;

常见报错:Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

  • 原因分析:主从架构中使用了相同的UUID,原因是克隆了虚拟机,而只改server_id不行
  • 解决办法:将从服务器上的/var/lib/mysql/auto.cnf重命名,重启Mysqld服务生成新的auto.cnf文件,即新的UUID;或者直接修改UUID,不重复即可;
[root@node11 mysql]# mv auto.cnf auto.cnf.bak
[root@node11 mysql]# systemctl restart mysqld
[root@node11 mysql]# vim auto.cnf
[auto]
server-uuid=fd780a70-ca14-11eb-9562-000c29da9126

步骤5:验证主从架构同步效果

① 在主服务器上的数据库中新增数据

[root@node10 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> insert into nsd2021.departments(dept_name) values('行政部');
Query OK, 1 row affected (0.01 sec)
mysql> select * from nsd2021.departments where dept_name='行政部';
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       9 | 行政部    |
+---------+-----------+
1 row in set (0.00 sec)

② 从服务器验证同步数据

[root@node11 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> select * from nsd2021.departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | 行政部    |
+---------+-----------+
9 rows in set (0.00 sec)

二、主从同步架构

1、常见的架构类型

① 单主单从架构,一主一从

架构描述:一个主库和一个从库,主库负责所有的写操作,从库负责读操作
优点:

- 简单易配置
- 适用于读多写少的场景
缺点:

- 主库仍然是单点写入,存在单点故障风险
- 从库的数据同步可能存在延迟
适用场景:

- 小型应用或初创企业
- 读操作远多于写操作的场景

② 单主多从架构,一主多从

 

架构描述:一个主库和多个从库。主库负责所有的写操作,多个从库负责读操作
优点:

- 提高了读操作的扩展性
- 通过增加从库,可以分担主库的读负载
缺点:

- 主库仍然是单点写入,存在单点故障风险
- 从库的数据同步可能存在延迟
适用场景:

- 读操作远多于写操作的场景
- 需要扩展读能力的应用

③ 级联复制架构,主从从(主->从主->从)

架构描述:一个主库和多个从库,其中一个从库作为中间节点,再连接到其他从库;
主库负责所有的写操作,中间节点从库负责部分读操作,并作为其他从库的主库
优点:

- 减轻主库的复制负载
- 提高了读操作的扩展性
缺点:

- 增加了复制的复杂性
- 中间节点的故障会影响到下游从库
适用场景:

- 主库的复制负载较高,需要减轻主库压力的场景
- 需要扩展读能力的应用

④ 环形复制架构,主主结构、双主结构(互为主从)

架构描述:多个主库之间形成一个环形复制链。每个主库既是主库也是从库,数据在环形链中循环复制
优点:

- 提高了写操作的可用性和扩展性
- 避免了单点写入的故障风险
缺点:

- 配置和管理非常复杂
- 存在数据一致性问题,需要解决冲突
适用场景:

- 需要极高可用性和扩展性的写操作场景
- 对数据一致性要求不高的应用


构建一主多从同步示例:(基于主从架构,额外添加一个从服务器)

实验拓扑结构:

  • 服务器角色:node10为主(Master),node11为从(Slave1) ,node12为从(Slave2);
  • node10配置:ip地址为192.168.2.10,安装mysql,初始化密码为NSD2021@tedu.cn
  • node11配置:ip地址为192.168.2.11,安装mysql,初始化密码为NSD2021@tedu.cn
  • node12配置:ip地址为192.168.2.12,安装mysql,初始化密码为NSD2021@tedu.cn

提示:防火墙与SELinux提前关闭;

步骤1:准备初始化环境(node12操作)

① 准备MySQL数据库,并初始化密码

[root@node12 ~]# yum -y install mysql-community-*   //检查Yum源,并安装MySQL
[root@node12 ~]# systemctl start mysqld     //启动服务
[root@node12 ~]# systemctl enable mysqld    //设置开机自启
[root@node12 ~]# grep -i password /var/log/mysqld.log    //查看生成的随机密码
2021-06-10T13:44:26.945514Z 1 [Note] A temporary password is generated for root@localhost: O-,Ya=5qpkpW
[root@node12 ~]# mysqladmin -uroot -p' O-,Ya=5qpkpW ' password 'NSD2021@tedu.cn'

步骤2:主服务器数据备份(node10操作)

① 检查配置文件

[root@node10 ~]# cat /etc/my.cnf
[mysqld]
server_id = 10         //服务器身份标识
log_bin = master10    //启用binlog日志
...

② 检查授权用户

mysql> show grants for repluser@'%';
+--------------------------------------------------+
| Grants for repluser@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
+--------------------------------------------------+
1 row in set (0.00 sec)

③ 主服务器完全备份数据,并拷贝到从服务器

[root@node10 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data nsd2021 > /root/fullbackup.sql
[root@node10 ~]# scp /root/fullbackup.sql root@192.168.2.12:/root

步骤3:配置从服务器(node12操作)

① 修改配置文件,并重启服务

[root@node12 ~]# vim /etc/my.cnf
[mysqld]
server_id = 12    //服务器身份标识
...
[root@node12 ~]# systemctl restart mysqld

② 从服务器手动同步主服务数据库数据

[root@node12 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database nsd2021 default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
[root@node12 ~]# mysql -uroot -pNSD2021@tedu.cn nsd2021 < /root/fullbackup.sql

步骤4:配置从服务器同步主服务器

① 获取日志文件名和偏移量

[root@node12 ~]# grep master10 /root/fullbackup.sql
CHANGE MASTER TO MASTER_LOG_FILE='master10.000001', MASTER_LOG_POS=717;

② 从服务器指定主服务器同步信息

[root@node12 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.10',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master10.000001',
    -> master_log_pos=717;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

③ 启动slave服务器进程

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

④ 验证:查看slave状态信息

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 192.168.2.10
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master10.000001
          Read_Master_Log_Pos: 717
               Relay_Log_File: node12-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master10.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
…

步骤5:验证一主多从架构同步效果

① 在主服务器上的数据库中新增数据(node10操作)

mysql> insert into nsd2021.departments(dept_name) values('风控部');

② 从服务器验证同步数据(node11、node12操作)

mysql> select * from nsd2021.departments where dept_name='风控部';
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|      10 | 风控部    |
+---------+-----------+
1 row in set (0.00 sec)


构建主从从同步示例:

实验拓扑结构:

  • 服务器角色:node12为主(Master),node13为从/主(Slave1,Master2) ,node14为从(Slave2);
  • node12配置:ip地址为192.168.2.12,将角色Slave还原并做成Master(nsd2021保留)
  • node13配置:ip地址为192.168.2.13,安装mysql,初始化密码为NSD2021@tedu.cn
  • node14配置:ip地址为192.168.2.14,安装mysql,初始化密码为NSD2021@tedu.cn

提示:防火墙与SELinux提前关闭;

步骤1:准备初始化环境(node13、node14操作)

① 准备MySQL数据库,并初始化密码(以node13为例)

[root@node13 ~]# yum -y install mysql-community-*   //检查Yum源,并安装MySQL
[root@node13 ~]# systemctl start mysqld     //启动服务
[root@node13 ~]# systemctl enable mysqld    //设置开机自启
[root@node13 ~]# grep -i password /var/log/mysqld.log    //查看生成的随机密码
2021-06-10T13:44:26.945514Z 1 [Note] A temporary password is generated for root@localhost: O-,Ya=5qpkpW
[root@node13 ~]# mysqladmin -uroot -p' O-,Ya=5qpkpW ' password 'NSD2021@tedu.cn'

② 将一主多从配置中的从服务器192.168.2.12改为主服务器(node12操作)

[root@node12 ~]# cd /var/lib/mysql
[root@node12 mysql]# rm -rf master.info relay-log.info node12-relay-bin.*
[root@node12 ~]# systemctl restart mysqld     //重启服务
[root@node12 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show slave status;   //检查slave状态(为空则恢复成功)
Empty set (0.00 sec)

补充:将从服务器/var/lib/mysql中的四类从库文件删除并重启服务,即可还原独立数据库;

步骤2:配置主服务器(node12操作)

① 修改配置文件,并重启服务

[root@node12 ~]# vim /etc/my.cnf
[mysqld]
server_id=12
log_bin=master12
...
[root@node12 ~]# systemctl restart mysqld

② 查看生成的binlog日志文件

[root@node12 ~]# ls /var/lib/mysql/master12.*
/var/lib/mysql/master12.000001  /var/lib/mysql/master12.index
[root@node12 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master12.000001 |      154 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

③ 授权Slave1从服务器,可通过repluser用户同步数据

mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
mysql> show grants for repluser@'%';
+--------------------------------------------------+
| Grants for repluser@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
+--------------------------------------------------+
1 row in set (0.00 sec)

步骤3:配置从-主服务器(node13操作)

提示:node13作为node12的Slave服务器,同时也作为node14的Master服务器

① 修改配置文件,并重启服务

[root@node13 ~]# vim /etc/my.cnf
[mysqld]
server_id=13
log_bin=master13     //开启binlog日志功能
log_slave_updates     //让从库从主库复制数据时可以写入到binlog日志
…
[root@node13 ~]# systemctl restart mysqld

补充:从库开启log_bin参数,如果直接往从库写数据,是可以记录binlog日志的;但从库通过I0线程读取主库二进制日志文件,然后通过SQL线程写入的数据,是不会记录在binlog日志的;也就是说从库从主库上复制的数据,是不写入从库的binlog日志的。所以从库做为其他从库的主库时,需要在配置文件中添加 log-slave-updates 参数;

② 查看生成的binlog日志文件

[root@node13 ~]# ls /var/lib/mysql/master13.*
/var/lib/mysql/master13.000001  /var/lib/mysql/master13.index
[root@node13 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master13.000001 |      154 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

③ 授权Slave2服务器,可通过repluser用户同步数据

mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec):

④ 通过mysqldump手动同步主服务数据库数据

注意:自动同步前,需保证主从服务器的数据库数据一致;

# 主服务器备份数据,并拷贝备份文件到slave1从服务器

[root@node12 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data nsd2021 > /root/fullbackup.sql
[root@node12 ~]# scp /root/fullbackup.sql root@192.168.2.13:/root

# 从服务器恢复数据

[root@node13 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database nsd2021 default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
[root@node13 ~]# mysql -uroot -pNSD2021@tedu.cn nsd2021 < /root/fullbackup.sql

步骤4:配置Slave1从服务器同步主服务器

① 获取日志文件名和偏移量

[root@node13 ~]# grep master /root/fullbackup.sql
CHANGE MASTER TO MASTER_LOG_FILE='master12.000001', MASTER_LOG_POS=441;

② 从服务器指定主服务器同步信息

[root@node13 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.12',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master12.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

③ 启动slave服务器进程

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

④ 验证:查看slave状态信息

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.12
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master12.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: node13-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master12.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes…
…

⑤ 验证:查看master状态信息

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

步骤5:配置从服务器(node14操作)

① 修改配置文件,并重启服务

[root@node14 ~]# vim /etc/my.cnf
[mysqld]
server_id = 14
...
[root@node14 ~]# systemctl restart mysqld

② 通过mysqldump手动同步Slave1从-主服务数据库数据

# 从-主服务器备份数据,并拷贝备份文件到slave2从服务器

[root@node13 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data nsd2021 > /root/fullbackup.sql
[root@node13 ~]# scp /root/fullbackup.sql root@192.168.2.14:/root

# 从服务器恢复数据

[root@node14 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database nsd2021 default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
[root@node14 ~]# mysql -uroot -pNSD2021@tedu.cn nsd2021 < /root/fullbackup.sql

步骤6:配置Slave2从服务器同步Slave1主服务器

① 获取日志文件名和偏移量

[root@node14 ~]# grep master /root/fullbackup.sql
CHANGE MASTER TO MASTER_LOG_FILE='master13.000001', MASTER_LOG_POS=173726;

② 从服务器指定主服务器同步信息

mysql> change master to
    -> master_host='192.168.2.13',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master13.000001',
    -> master_log_pos=173726;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

③ 启动slave服务器进程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
④ 验证:查看slave状态信息
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.13
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master13.000001
          Read_Master_Log_Pos: 173726
               Relay_Log_File: node14-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master13.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
…

步骤7:验证主从从架构同步效果

① 在主服务器上的数据库中新增数据(node12操作)

mysql> insert into nsd2021.departments(dept_name) values('企划部');

② 从服务器验证同步数据(node13、node14操作)

mysql> select * from nsd2021.departments where dept_name='企划部';
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|      11 | 企划部    |
+---------+-----------+
1 row in set (0.00 sec)

③ 在Slave1从服务器上的数据库中新增数据(node13操作)

mysql> insert into nsd2021.departments(dept_name) values('创业部');

④ 从服务器验证同步数据(node14操作)

mysql> select * from nsd2021.departments where dept_name='创业部';
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|      12 | 创业部    |
+---------+-----------+
1 row in set (0.00 sec)


构建主主(互为主从)同步示例:

实验拓扑结构:

  • 服务器角色:node15为主-从(Master1/Slave2),node16为主-从(Master2/Slave1);
  • node15配置:ip地址为192.168.2.15,安装mysql,初始化密码为NSD2021@tedu.cn
  • node16配置:ip地址为192.168.2.16,安装mysql,初始化密码为NSD2021@tedu.cn

补充:node15和node16互为主库和从库,若有数据库数据更新,相互进行同步

步骤1:准备初始化环境(node15、node16操作)

① 准备MySQL数据库,并初始化密码(以node15为例)

[root@node15 ~]# yum -y install mysql-community-*   //检查Yum源,并安装MySQL
[root@node15 ~]# systemctl start mysqld     //启动服务
[root@node15 ~]# systemctl enable mysqld    //设置开机自启
[root@node15 ~]# grep -i password /var/log/mysqld.log    //查看生成的随机密码
2021-06-10T13:44:26.945514Z 1 [Note] A temporary password is generated for root@localhost: O-,Ya=5qpkpW
[root@node15 ~]# mysqladmin -uroot -p' O-,Ya=5qpkpW ' password 'NSD2021@tedu.cn'

步骤2:配置主服务器(node15操作)—> “将192.168.2.15作为主服务器”

① 修改配置文件,并重启服务

[root@node15 ~]# vim /etc/my.cnf
[mysqld]
server_id=15
log_bin=master15
...
[root@node15 ~]# systemctl restart mysqld

② 查看生成的binlog日志文件

[root@node15 ~]# ls /var/lib/mysql/master15.*
/var/lib/mysql/master15.000001  /var/lib/mysql/master15.index

③ 授权从服务器(node16),可通过repluser用户同步数据

[root@node15 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show master status;     //查看日志文件和偏移量
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master15.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

步骤3:配置从服务器(node16操作)—> “将192.168.2.16作为从服务器”

① 修改配置文件

[root@node16 ~]# vim /etc/my.cnf
[mysqld]
server_id = 16
...
[root@node16 ~]# systemctl restart mysqld

② 从服务器指定主服务器同步信息(通过主服务器show master status获取信息)

[root@node16 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.15',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master15.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;     //启动slave程序
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G      //查看slave状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.15
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master15.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: node16-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master15.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
…

步骤4:配置主服务器(node16操作)—> “将192.168.2.16作为主服务器”

① 修改配置文件,并重启服务

[root@node16 ~]# vim /etc/my.cnf
[mysqld]
server_id=16
log_bin=master16    //启用binlog功能(只需新增此项)
...
[root@node16 ~]# systemctl restart mysqld

② 查看生成的binlog日志文件

[root@node16 ~]# ls /var/lib/mysql/master16.*
/var/lib/mysql/master16.000001  /var/lib/mysql/master16.index

③ 授权从服务器(node15),可通过repluser用户同步数据

[root@node16 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show master status;     //查看日志文件和偏移量
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master16.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

步骤5:配置从服务器(node15操作)—> “将192.168.2.15作为从服务器”

① 从服务器指定主服务器同步信息(通过主服务器show master status获取信息)

[root@node15 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.16',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master16.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave;    //启动slave程序
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G    //查看slave状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.16
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master16.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: node15-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master16.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
…

步骤6:验证主主架构同步效果

① 以node15作为主服务器进行验证

# 主服务器上创建数据库和表(node15操作)

[root@node15 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database mydb;
mysql> use mydb;
mysql> create table students(id int primary key, name varchar(20));

# 从服务器上查看(node16操作)

[root@node16 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
 
mysql> use mydb;
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| students       |
+----------------+
1 row in set (0.00 sec)

② 以node16作为主服务器进行验证

# 主服务器上添加用户(node16操作)

[root@node16 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> insert into mydb.students values(1,'tom');

# 从服务器上查看(node15操作)

mysql> select * from mydb.students;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)

三、复制模式

MySQL 复制模式是指主库(Master)和从库(Slave)之间数据同步的方式。常见的复制模式包括异步复制、全同步复制和半同步复制。每种复制模式都有其特点和适用场景。

1、异步复制(Asynchronous replication)

工作原理:

  • 主库将写操作记录到二进制日志(Binary Log)中,但不等待从库确认接收和应用这些日志
  • 从库通过连接到主库,读取并应用这些二进制日志,实现数据的同步

优点:

- 性能高:主库不需要等待从库的确认,写操作的延迟较低。
- 配置简单:默认的复制模式,无需额外配置。
缺点:

- 数据一致性较差:从库的数据同步可能存在延迟,主库故障时可能丢失部分数据。
- 单点故障风险:主库仍然是单点写入,存在单点故障风险。

适用场景:

- 对性能要求较高,但对数据一致性要求不严格的场景。
- 读操作远多于写操作的场景。

 

2、全同步复制(Fully syncchronous replication)

工作原理:

  • 主库在执行写操作后,必须等待所有从库确认接收并应用了二进制日志,才能返回成功。
  • 所有从库的数据都是实时同步的,确保数据的一致性。

优点:

- 数据一致性高:所有从库的数据都是实时同步的,确保数据的一致性。
- 高可用性:从库可以作为主库的备份,提供数据的安全性和可靠性。
缺点:

- 性能较低:主库需要等待所有从库的确认,写操作的延迟较高。
- 配置复杂:需要确保所有从库的网络连接稳定,配置和管理较为复杂。
适用场景:

- 对数据一致性要求极高的场景。
- 金融、交易等对数据可靠性要求极高的应用。

 

3、半同步复制(Semi-synchronous replication)

工作原理:

  • 主库在执行写操作后,必须等待至少一个从库确认接收了二进制日志,但不等待从库应用这些日志。
  • 从库在接收到二进制日志后,异步地应用这些日志,实现数据的同步。

优点:

- 性能和一致性的平衡:主库不需要等待所有从库的确认,写操作的延迟较低,同时确保至少一个从库接收到数据。
- 配置相对简单:只需配置半同步插件,无需复杂的网络配置。
缺点:

- 数据一致性介于异步复制和全同步复制之间:从库的数据同步可能存在延迟,但比异步复制更可靠。
- 单点故障风险:主库仍然是单点写入,存在单点故障风险。
适用场景:

- 对性能和数据一致性都有一定要求的场景。
- 需要一定程度的数据冗余和高可用性的应用。

 

4、配置半同步复制

1. 安装半同步插件

在主库和从库上安装半同步插件:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2. 启用半同步复制

在主库上启用半同步复制:

SET GLOBAL rpl_semi_sync_master_enabled = 1;

在从库上启用半同步复制:

SET GLOBAL rpl_semi_sync_slave_enabled = 1;
3. 重启从库的复制线程

在从库上重启复制线程以应用半同步复制配置:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
4. 检查半同步复制状态

在主库上检查半同步复制状态:

SHOW STATUS LIKE 'Rpl_semi_sync_master_status';

在从库上检查半同步复制状态:

SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';


半同步复制模式配置示例:

实验基于主主同步结构,启用半同步复制模式,以便切换角色后能继续使用半同步复制

  • 服务器角色:node15为主-从(Master1/Slave2),node16为主-从(Master2/Slave1);

补充:若是主从模式,则对应角色加载相应的模块和启用模式;

步骤1:查看MySQL是否允许动态加载模块(have_dynamic_loading)

mysql> show variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES   |
+----------------------+-------+
1 row in set (0.00 sec)

步骤2:启用半同步复制模式

方法1:修改配置文件(永久配置)(node15、node16操作)

[root@node15 ~]# vim /etc/my.cnf
[mysqld]
server_id=15
log_bin=master15
plugin-load ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"  //加载半同步模块
rpl_semi_sync_master_enabled=1    //主库-启动半同步模式
rpl_semi_sync_slave_enabled=1     //从库-启动半同步模式
...
[root@node15 ~]# systemctl restart mysqld   //重启服务


[root@node16 ~]# vim /etc/my.cnf
[mysqld]
server_id=16
log_bin=master16
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
...
[root@node16 ~]# systemctl restart mysqld   //重启服务

方法2:MySQL命令行下配置(重启MySQL服务失效)

① 下载对应的半同步模块

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> install plugin rpl_semi_sync_master soname 'semisync_slave.so';

② 启用半同步复制,默认是关闭的

mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> set global rpl_semi_sync_slave_enabled = 1;

步骤3:验证,查看半同步模块是否安装,半同步模式是否启用

① 查看 information_schema.plugins 表,模块是否安装成功

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+
2 rows in set (0.00 sec)

② 查看 "rpl_semi_sync_%_enabled" 是否启用半同步模式

mysql> show variables like "rpl_semi_sync_%_enabled";
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+
2 rows in set (0.00 sec)

总结:

MySQL 复制模式包括异步复制、全同步复制和半同步复制。每种复制模式都有其优缺点和适用场景。异步复制性能高但数据一致性较差,全同步复制数据一致性高但性能较低,半同步复制在性能和数据一致性之间取得平衡。选择合适的复制模式需要根据实际需求、系统规模和业务特点进行综合考虑。通过合理的配置和管理,可以充分发挥不同复制模式的优势,提高数据库的可用性、扩展性和数据安全性。

思维导图:

小结:

本篇章节为【第四阶段】RDBMS2-DAY1 的学习笔记,这篇笔记可以初步了解到 MySQL主从同步(概述、原理、构建主从同步)、主从同步结构类型(主多从、主从从、主主)、复制模式(异步、半同步)、启用半同步复制,除此之外推荐参考相关学习网址:

  •  参考:mysql数据库主从同步复制模式_mysl的主从同步的方式-CSDN博客


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

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

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

相关文章

工控风云 | 科东软件受邀参加2024 CCF工控“风云论坛”并做演讲

近日&#xff0c;CCF工业控制计算机专委会首届“风云论坛”在苏州CCF业务总部&学术交流中心成功召开。作为国内工业操作系统领军企业&#xff0c;科东软件受邀参加本次大会&#xff0c;并做“鸿道(Intewell)新型工业操作系统”主题演讲。 “要打好科技仪器设备、操作系统…

自动驾驶系列—超声波雷达技术详解:自动驾驶中的短距离感知利器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

知识改变命运 数据结构【优先级队列(堆)】

优先级队列(堆&#xff09; 1&#xff1a;堆概念2&#xff1a;堆的创建(以小根堆为例)3&#xff1a;堆的插入与删除3.1 堆的插入3.2堆的删除 4&#xff1a;oj练习5&#xff1a;堆排序6接口介绍&#xff08;底层代码的查看&#xff09;6.1常用三种构造方法 前言&#xff1a;队列…

Flutter-->Namespace not specified.

更新Android gradle 7.5.0之后, 运行项目会出现Namespace not specified.问题, 这里出一个我的解决方案. 由于很多库都不可能及时更新适配gradle 7.5.0, 所以可以等pub get将子库拉取到本地之后, 在本地手动添加namespace属性,即可解决本文问题. 作为程序猿,那肯定不可能手动修…

Elasticsearch、Kibana学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

鸿蒙--知乎评论

这里我们将采用组件化的思想进行开发 拆解组件 pages下&#xff0c;新建ZhiHu的文件pages下&#xff0c;新建components, 里面新建 HmNavBar和HmCommentItem components/HmNavBar.ets Entry Component struct HmNavBar {title: string 标题build() {Row() {// 返回键Row() {I…

数据湖数据仓库数据集市数据清理以及DataOps

一提到大数据我们就知道是海量数据&#xff0c;但是我们并不了解需要从哪些维度去考虑这些数据的存储。比如 数据湖、数据仓库、数据集市&#xff0c;以及数据自动化应用DataOps有哪些实现方式和实际应用&#xff0c;这篇文章将浅显的做一次介绍。 数据湖 数据湖是一种以自然…

Spring Boot 学习之路 -- Thymeleaf 模板引擎

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;后端对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门…

Python爬虫之正则表达式于xpath的使用教学及案例

正则表达式 常用的匹配模式 \d # 匹配任意一个数字 \D # 匹配任意一个非数字 \w # 匹配任意一个单词字符&#xff08;数字、字母、下划线&#xff09; \W # 匹配任意一个非单词字符 . # 匹配任意一个字符&#xff08;除了换行符&#xff09; [a-z] # 匹配任意一个小写字母 […

获取淘宝直播间弹幕数据的技术探索实践方法

在数字时代&#xff0c;直播已成为电商营销的重要渠道之一&#xff0c;而弹幕作为直播互动的核心元素&#xff0c;蕴含着丰富的用户行为和情感数据。本文将详细介绍如何获取淘宝直播间弹幕数据的技术方法和步骤&#xff0c;同时分析不同工具和方法的优缺点&#xff0c;并提供实…

夜莺监控的机器支持挂载到多个业务组了

夜莺开源项目于国庆前夕发布了 v7.4.1 版本&#xff0c;修复了一些 bug&#xff0c;同时也带来了一些新功能。其中最重要的一个功能是&#xff1a;机器支持挂载到多个业务组了。本文将介绍几个重要的变更。 所有变更点 feat: 左侧栏业务组新设计feat: 机器支持了绑定到多个业…

GAN(Generative Adversarial Nets)

GAN(Generative Adversarial Nets) 引言 GAN由Ian J. Goodfellow等人提出&#xff0c;是Ian J. Goodfellow的代表作之一&#xff0c;他还出版了大家耳熟能详的花书&#xff08;Deep Learning深度学习&#xff09;&#xff0c;GAN主要的思想是同时训练两个模型&#xff0c;生成…

CentOS 7 安装并部署 Mysql

安装 Mysql 下载并添加库 sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装 Mysql 包&#xff08;一路键入y即可&#xff09; yum -y install mysql mysql-server --nogpgcheck- -nogpgcheck 作用为 禁掉GPG验证检查 配…

Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器

01应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法&#xff0c;以设置最低日志级别、为事件添加额外属性以及控制日志输出。 Serilog 主要通过代码进行配置&#xff0c;设置支持旨在作为补充功能。虽然不是全面的&#xff0c;但大多数日志记录配…

SpringBoot3实战:实现接口签名验证

有时候我们要把自己的服务暴露给第三方去调用&#xff0c;为了防止接口不被授权访问&#xff0c;我们一般采用接口签名的方式去保护接口。 接下来松哥和大家聊一聊这个话题。 一 场景分析 什么时候需要接口签名&#xff1f; 接口签名是一种重要的安全机制&#xff0c;用于确…

Jmeter链接数据库、分布式

目录 一、Jmeter链接数据库 连接准备 有两种添加驱动的方法 第一种&#xff1a; 第二种&#xff1a; 连接方法&#xff1a; 1.先添加一个配置元件中的jdbc connection configuration 2、配置内容 使用&#xff1a; 二、Jmeter做分布式操作 1、准备多台电脑 2、多台电…

顶象生僻字点选模型识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 该文章模型已经上线ocr识别网站,欢迎测试!!,地址:http://yxlocr.nat300.top/ocr/textclick/5 某网站使用顶象的生僻字点选模型,部分数据集如下: 这种数据集…

【Vue3 + TS + Vite】从0到1搭建后台管理系统

前言 没搭建过Vue3的项目&#xff0c;从0开始搭建一下&#xff0c;记录一下自己的步骤。 技术栈&#xff1a; vue3 ts scss pinia vite 我尽量写的详细一些&#xff0c;后续也会记录我在项目过程中&#xff0c;遇到的一些问题。 文章目录 前言环境搭建一、创建项目1. 使用…

使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

最近实现了一个小项目&#xff0c;现场有多个不同厂家的设备&#xff0c;用户需要对此进行简单的整合&#xff0c;并实现一些联动控制。 我使用了IOT-Tree Server这个软件轻松实现了&#xff0c;不外乎有如下过程&#xff1a; 1&#xff09;使用Modbus协议对接现有设备&#…

探索循环神经网络RNN:解锁序列数据的奥秘

在这个数据驱动的时代&#xff0c;机器学习模型已经深入到我们生活的方方面面&#xff0c;从智能推荐系统到自然语言处理&#xff0c;无一不彰显其强大的能力。在众多模型中&#xff0c;循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;以其独特的结构和对序…