MySQL高可用

目录

MySQL高可用方案

1、MHA架构(单主)

MHA的工作原理

MHA 架构的优点

MHA 架构的缺点

2、MHA架构的部署

1)关闭防火墙和selinux

2)分别修改master和slave1,slave2的主机名

3)修改master主库服务器的配置文件

4)修改slave从库服务器的配置(slave1,slave2)

5)在 Master、Slave1、Slave2 节点上都创建两个软链接

6)进入master的mysql,给slave节点和manage授权

7)在master节点查看二进制文件和同步位置点

8)在slave1和slave2上执行同步操作,并查看数据同步状态

9)两个从库必须设置为只读模式

10)在主库中创建库创建表,插入数据,从库测试数据同步

11)在所有服务器上安装MHA的依赖环境

12)在所有服务器上安装MHA的node组件

13)在manage服务器上安装manage组件

14)在manage服务器上配置到其他数据库的ssh免密登录

15)master,slave1和slave2之间,也要互相配置ssh免密登录

16)在manage服务器上配置MHA

17)创建 MHA 软件目录并拷贝配置文件

18)第一次配置需要在 Master 节点上手动开启虚拟IP

19)在 manager 节点上测试 ssh 无密码认证

20)在 manager 节点上测试 mysql 主从连接情况

21)启动MHA

22)查看MHA状态,查看日志

23)模拟故障发生

24)关闭 manager 服务的命令

3、MMM架构(双主)

MMM 的工作原理

MMM架构的优点

MMM架构的缺点

4、MMM架构部署

1)首先关闭防火墙和selinux,并安装依赖环境(所有服务器)

2)修改master01的配置文件

3)讲配置文件复制给其他3台mysql数据库服务器

4)其他三台MySQL服务器修改配置文件中的server-id,然后重启mysql服务

5)配置主主复制

6)在从服务器上配置主从复制

7)在master01上创建库创建表,插入数据,master02,slave01,slave02测试同步情况

8)在master01上对mmm进行配置

9)修改所有数据库服务器的代理配置文件 mmm_agent.conf

10)修改monitor监控服务器上的监控配置文件 mmm_mon.conf

11)在所有数据库上为 mmm_agent(代理进程)和 mmm_moniter(监控进程)授权

12)所有服务器开启mysql-mmm-agent

13)在 monitor 服务器上启动 mysql-mmm-monitor

14)在monitor 服务器上测试群集

15)故障测试

16)客户端测试

17)slave01和slave02上都可以查看验证


MySQL高可用方案

mysql高可用的九方案,MAH架构、MMM架构、MGR架构、Mysql  cluster(多主)、Galera  Cluster(多主)、PXC架构(多主)、RAID10(数据可靠性方案)、SAN存储网络、DRBD方案。

本篇文章主要讲述MHA架构MMM架构

1、MHA架构(单主)

MySQL MHA(Master High Availability)是一种用于 MySQL 数据库的高可用性架构。它的设计目标是确保在主数据库发生故障时,能够快速自动地将备库(Slave)提升为新的主库,以保证系统的连续性和可用性。

MHA的工作原理

        1. MHA 通过manage监控 MySQL master主节点的状态来实现故障检测和自动故障转移。

        2. 当master主节点发生故障时,MHA 会自动将其中一个拥有最新数据的slave从节点提升                   为新的master主节点。

        3. 使其他的slave从节点与新master节点做主从复制操作,确保数据库的可用性。

MHA 架构的优点

  1. 自动故障切换:MHA 能够自动检测主库的故障,并快速将备库提升为新的主库,减少了手动干预的需要,提高了系统的可用性。

  2. 实时监测:MHA 通过与 Master 节点和 Slave 节点建立 SSH 连接,实时监测它们的状态,能够及时发现故障并采取相应的措施。

  3. 简化配置:MHA 提供了简单易用的配置文件,可以轻松地配置主库和备库的信息,减少了配置的复杂性。

  4. 高可扩展性:MHA 支持多个备库,可以根据需求灵活地扩展系统的容量和性能。

MHA 架构的缺点

  1. 配置复杂性:尽管 MHA 提供了简化的配置文件,但对于不熟悉 MHA 的用户来说,配置仍然可能是一项复杂的任务。特别是在涉及多个主库和备库的复杂环境中,配置可能变得更加困难。

  2. 依赖 SSH 连接:MHA 使用 SSH 连接与主库和备库进行通信和监控。这意味着在配置和使用 MHA 时,必须确保 SSH 连接的可用性和稳定性。如果 SSH 连接出现问题,可能会导致 MHA 无法正常工作。

  3. 故障切换过程中的数据同步延迟:在故障切换期间,MHA 需要将备库提升为新的主库,并重新配置其他备库作为新的从库。这个过程可能需要一些时间,导致在切换期间存在一定的数据同步延迟。这可能会对某些应用程序的数据一致性产生影响。

  4. 依赖 MySQL 复制功能:MHA 依赖 MySQL 的复制功能来实现数据的同步和复制。如果 MySQL 的复制功能出现问题,可能会导致 MHA 无法正常工作或数据同步不完整。

  5. 需要额外的硬件资源:为了实现高可用性,MHA 需要至少一个备库来作为冗余备份。这意味着需要额外的硬件资源来支持备库的运行和数据复制,增加了系统的成本和复杂性。

2、MHA架构的部署

环境:

master:192.168.3.10                #提前导入mha4mysql-node-0.57.tar.gz

slave1:192.168.3.11                #提前导入mha4mysql-node-0.57.tar.gz

slave2:192.168.3.12                #提前导入mha4mysql-node-0.57.tar.gz

manage:192.168.3.106                #提前导入mha4mysql-node-0.57.tar.gz和mha4mysql-manager-0.57.tar.gz

1)关闭防火墙和selinux

systemctl   stop   firewalld.service

setenforce  0

2)分别修改master和slave1,slave2的主机名

master:#修改master的主机名

hostnamectl set-hostname mysql-1

slave1:#修改slave1的主机名
hostnamectl set-hostname mysql-2

salve2:#修改slave2的主机名
hostnamectl set-hostname mysql-3

3)修改master主库服务器的配置文件

vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = mysql-bin                #开启二进制日志
binlog_format = mixed           #设置二进制日志类型
log-slave-updates = true        #允许slave从master复制数据时可以写入到自己的二进制日志
relay-log = relay-log-bin        #开启中继日志
relay-log-index = slave-relay-bin.index        #中继日志索引

systemctl restart mysqld        #重启mysql服务

4)修改slave从库服务器的配置(slave1,slave2)

vim /etc/my.cnf
server-id = 2                         #三台服务器的 server-id 不能一样
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = true
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

systemctl restart mysqld

5)在 Master、Slave1、Slave2 节点上都创建两个软链接

ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

6)进入master的mysql,给slave节点和manage授权

mysql -uroot -p

#给slave节点授权
grant replication slave on *.* to 'myslave'@'192.168.3.%' identified by '123123';

#给manage授权

grant all privileges on *.* to 'mha'@'192.168.3.%' identified by 'abc123';


#防止从库通过主机名连接主库(master,salve1,salve2上均设置)

grant all privileges on *.* to 'mha'@'mysql1' identified by 'abc123';

grant all privileges on *.* to 'mha'@'mysql2' identified by 'abc123';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'abc123';

flush privileges;        #使授权立即生效

7)在master节点查看二进制文件和同步位置点

master:

show master status;

8)在slave1和slave2上执行同步操作,并查看数据同步状态

change master to master_host='192.168.3.10',master_user='myslave',master_password='123123',

master_log_file='mysql-bin.000001',master_log_pos=1743; 

start slave;

show slave status\G    

9)两个从库必须设置为只读模式

set global read_only=1;

10)在主库中创建库创建表,插入数据,从库测试数据同步

master:

show databases;

create database test;

use test;

create table t1(id int, name varchar(10), age int,primary key(id));

desc t1;

insert into t1 values(1,'张三',18),(2,'李四',19),(3,'王五',20);
select * from t1;


slave1,slave2:

show databases;

select * from test.t1;

11)在所有服务器上安装MHA的依赖环境

yum install epel-release --nogpgcheck -y        #首先安装epel源

yum install -y perl-DBD-MySQL \                #其次安装依赖环境
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

12)在所有服务器上安装MHA的node组件

cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install

13)在manage服务器上安装manage组件

tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

14)在manage服务器上配置到其他数据库的ssh免密登录

ssh-keygen -t rsa                 #一路按回车键
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.11
ssh-copy-id 192.168.3.12

15)master,slave1和slave2之间,也要互相配置ssh免密登录

master:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.11
ssh-copy-id 192.168.3.12

slave1:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.12


 

slave2:

ssh-keygen -t rsa
ssh-copy-id 192.168.3.10
ssh-copy-id 192.168.3.11

16)在manage服务器上配置MHA

#在 manager 节点上复制相关脚本到/usr/local/bin 目录

cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

#复制故障切换脚本

cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
#修改故障切换脚本

vim /usr/local/bin/master_ip_failover

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
#############################添加内容部分#########################################
#指定vip的地址
my $vip = '192.168.3.254';
#指定vip的广播地址
my $brdc = '192.168.3.255';
#指定vip绑定的网卡
my $ifdev = 'ens33';    
#指定vip绑定的虚拟网卡序列号
my $key = '1';
#代表此变量值为ifconfig ens33:1 192.168.3.254
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";    
#代表此变量值为ifconfig ens33:1 192.168.3.254 down
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
#指定退出状态码为0
my $exit_code = 0;
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
##################################################################################
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);

exit &main();

sub main {

print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

if ( $command eq "stop" || $command eq "stopssh" ) {

my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {

my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

17)创建 MHA 软件目录并拷贝配置文件

#创建相关目录(master,slave1,salve2,manage)

mkdir -p /opt/mysql-mha/mha-node
 

#manager节点

mkdir -p /opt/mysql-mha/mha

#编写配置文件
vim /opt/mysql-mha/mysql_mha.cnf
[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=mha
password=manager
port=3306
ping_interval=1
remote_workdir=/opt/mysql-mha/mha-node
repl_user=myslave
repl_password=123123
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.3.11 -s 192.168.3.12
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.3.10
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.3.11
port=3306

[server3]
hostname=192.168.3.12
port=3306

18)第一次配置需要在 Master 节点上手动开启虚拟IP

master:

/sbin/ifconfig ens33:1 192.168.3.254/24

19)在 manager 节点上测试 ssh 无密码认证

masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf

20)在 manager 节点上测试 mysql 主从连接情况

masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf

21)启动MHA

nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &

22)查看MHA状态,查看日志

masterha_check_status --conf=/opt/mysql-mha/mysql_mha.cnf    #查看MHA状态
cat /opt/mysql-mha/manager.log | grep "current master"    #查看日志

23)模拟故障发生

MHA上:日志监控
tail -f /opt/mysql-mha/manager.log

master上停止mysql服务
systemctl stop mysqld

24)关闭 manager 服务的命令

masterha_stop --conf=/opt/mysql-mha/mysql_mha.cnf

或者

直接采用 kill 进程 ID 的方式关闭。

3、MMM架构(双主)

MySQL 高可用方案之 MMM(Multi-Master Replication Manager)是一种常用的解决方案,用于实现 MySQL 数据库的高可用性和负载均衡。

MMM 基于 MySQL 的复制机制,通过在多个 MySQL 服务器之间进行主从复制,实现了数据的同步和备份。它的主要特点是可以实现多主复制,即多个 MySQL 服务器可以同时作为主节点接收写操作,并将这些写操作同步到其他从节点上。

MMM 的工作原理

  1. MMM 通过监控 MySQL master的状态来实现故障检测和自动故障转移。当一个master主节点发生故障时,MMM 会自动将VIP转到备master节点上,确保数据库的可用性。

  2. MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况,将读操作分发到不同的节点上,从而提高系统的整体性能。

  3. MMM 还提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作。

MMM架构的优点

  1. 高可用性:MMM 通过自动故障检测和故障转移机制,可以快速将一个从节点提升为新的主节点,从而实现数据库的高可用性,减少系统的停机时间。

  2. 负载均衡:MMM 可以根据节点的负载情况,将读操作分发到不同的节点上,从而实现负载均衡,提高系统的整体性能。

  3. 简单易用:MMM 提供了一些管理工具,可以方便地进行节点的添加、删除和配置修改等操作,使得系统的管理和维护变得简单易用。

MMM架构的缺点

  1. 数据一致性:由于 MMM 采用的是异步复制机制,主节点和从节点之间存在一定的延迟,可能导致数据的不一致。在某些场景下,可能需要额外的措施来确保数据的一致性。

  2. 配置复杂性:MMM 的配置相对复杂,需要对 MySQL 的复制机制和 MMM 的工作原理有一定的了解。在配置过程中,需要注意各个节点的配置一致性和正确性。

4、MMM架构部署

环境:

master01(db1):192.168.3.10                 # 提前导入 mysql5.7、mysql-mmm
master02(db2):192.168.3.11                 # 提前导入mysql5.7、mysql-mmm
slave01(db3):192.168.3.12                   # 提前导入 mysql5.7、mysql-mmm
slave02(db4):192.168.3.13                   # 提前导入 mysql5.7、mysql-mmm
monitor  :192.168.80.106                           # 提前导入mysql-mmm

1)首先关闭防火墙和selinux,并安装依赖环境(所有服务器)

systemctl stop firewalld.service

setenforce 0

#下载aliyun的repo源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release        #安装epel源
yum -y install mysql-mmm*        #安装mmm

2)修改master01的配置文件

vim /etc/my.cnf

......
[mysqld]

......

server-id = 1                                               #每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log             #错误日志
general_log=ON                                              #通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON                                           #慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema        #不需要同步的库名
log_bin=mysql_bin                                #开启二进制日志用于主从数据复制
log_slave_updates=true                           #允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1                            #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去    
innodb_flush_log_at_trx_commit=1         #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2               #自增字段一次递增多少
auto_increment_offset=1  

3)讲配置文件复制给其他3台mysql数据库服务器

scp /etc/my.cnf root@192.168.3.11:/etc/
scp /etc/my.cnf root@192.168.3.12:/etc/
scp /etc/my.cnf root@192.168.3.13:/etc/

4)其他三台MySQL服务器修改配置文件中的server-id,然后重启mysql服务

master02:

vim /etc/my.cnf

server-id = 2

systemctl restart mysqld.service

slave01:

vim /etc/my.cnf

server-id = 3

systemctl restart mysqld.servicel

slave02:

vim /etc/my.cnf

server-id = 4

systemctl restart mysqld.service

5)配置主主复制

#在master01和master02服务器上为彼此授权

grant replication slave on *.* to 'replication'@'192.168.3.%' identified by '123123';

show master status;        #在master01和master02服务器上查看日志文件名称和同步点


master01:

change master to master_host='192.168.3.11',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

master02:

change master to master_host='192.168.3.10',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

6)在从服务器上配置主从复制

change master to master_host='192.168.3.10',master_user='replication',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=459;

start slave;

show slave status\G

7)在master01上创建库创建表,插入数据,master02,slave01,slave02测试同步情况

master01:

master:

show databases;

create database test;

use test;

create table t1(id int, name varchar(10), age int,primary key(id));

desc t1;

insert into t1 values(1,'张三',18),(2,'李四',19),(3,'王五',20);
select * from t1;


master02,slave01,slave02:

show databases;

select * from test.t1;

8)在master01上对mmm进行配置

cd /etc/mysql-mmm/

vim mmm_common.conf
……
<host default>
    cluster_interface       ens33
    ……
    replication_user        replication
    replication_password    123123
    agent_user              mmm_agent
    agent_password          123123

<host db1>
    ip      192.168.3.10
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.3.11
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.3.12
    mode    slave
</host>

<host db4>
    ip      192.168.3.13
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.3.254
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.3.154, 192.168.3.155
    mode    balanced            #多个 slave 主机可以进行读操作模式
</role>

9)修改所有数据库服务器的代理配置文件 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf

this db1                #根据不同的主机分别修改为 db1,db2,db3,db4

10)修改monitor监控服务器上的监控配置文件 mmm_mon.conf

vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf
<monitor>
.....
    ping_ips            192.168.3.10,192.168.3.11,192.168.3.12,192.168.3.13    #指定所有数据库服务器的 IP
    auto_set_online        10                #指定自动上线时间
</monitor>

<host default>
    monitor_user        mmm_monitor        #指定 mmm_monitor 的用户名
    monitor_password    123123          #指定 mmm_monitor 的密码
</host>

11)在所有数据库上为 mmm_agent(代理进程)和 mmm_moniter(监控进程)授权

#为 mmm_agent(代理进程)授权(所有MySQL服务器上)

grant super, replication client, process on *.* to 'mmm_agent'@'192.168.3.%' identified by '123123';

#为 mmm_moniter(监控进程)授权(所有MySQL服务器上)

grant replication client on *.* to 'mmm_monitor'@'192.168.3.%' identified by '123123';

flush privileges;        #授权立即生效

12)所有服务器开启mysql-mmm-agent

systemctl start mysql-mmm-agent.service

13)在 monitor 服务器上启动 mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service

14)在monitor 服务器上测试群集

#查看各节点的情况
mmm_control show

#检测监控功能是否都完善,需要各种OK
mmm_control checks all

#指定绑定 VIP 的主机
mmm_control move_role writer db2

15)故障测试

#停止 master02 确认 VIP 是否移动到 master01 上。

注意:master01 主服务器恢复服务后,不会抢占

mater02:

systemctl stop mysqld.service

16)客户端测试

#在 master01 服务器上为 monitor 服务器地址授权登录
grant all on *.* to 'abc'@'192.168.3.106' identified by '123123';
flush privileges;

#在 monitor 服务器上使用 VIP 登录
yum install -y mariadb-server mariadb
systemctl start mariadb.service

mysql -uabc -p -h 192.168.3.254

#创建数据,测试同步情况
create database abc;

17)slave01和slave02上都可以查看验证

show databases;

select * from abc.a1;

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

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

相关文章

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件&#xff0c;必备的插件&#xff0c;是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外&#xff0c;还需要在本地下载安装GNU Global工具。多看下插件…

AI智能文案写作工具,迅速生成高质量的文案

大家好&#xff0c;欢迎来到这篇文章。在信息时代&#xff0c;文字的力量愈发重要&#xff0c;无论是用于广告、文章还是社交媒体&#xff0c;优质的文案都能够吸引更多的注意力。但是&#xff0c;对于许多人来说&#xff0c;创作文案可能是一项繁琐且耗时的任务。 147GPT批量文…

【计算机毕业设计】基于SpringBoot+Vue大学生心理健康管理系统的开发与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

融云受邀参加 Web3.0 顶级峰会「Meta Era Summit 2023」

本周四 19:00-20:00&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击上方小程序报名~ 9 月 12 日&#xff0c;由中国香港 Web3.0 媒体 Meta Era 主办的“Meta Era Summit 2023”在新加坡收官&#xff0c;融云作为战略合作…

Mybatis学习笔记10 高级映射及延迟加载

Mybatis学习笔记9 动态SQL_biubiubiu0706的博客-CSDN博客 无论简单映射(前面所学的单表和对象之间的映射关系)还是高级映射 说到底都是java对象和数据库表记录之间的映射关系 准备数据库表:一个班级对应多个学生.班级表:t_class 学生表:s_stu(自增) 新建模块 项目整体结构 …

Jmeter接口测试

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 1.介绍什么是…

ElementUI基本介绍及登录注册案例演示

目录 前言 一.简介 二.优缺点 三.Element完成登录注册 1. 环境配置及前端演示 1.1 安装Element-UI模块 1.2 安装axios和qs(发送get请求和post请求) 1.3 导入依赖 2 页面布局 2.1组件与界面 3.方法实现功能数据交互 3.1 通过方法进行页面跳转 3.2 axios发送get请求 …

Spring面试题10:Spring的XMLBeanFactory怎么使用

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…

使用cv2将图片改为素描图

1 使用cv2&#xff0c;将图片改为素描图&#xff0c;效果如图&#xff1a; 2 代码实现&#xff1a; python 3.8 import cv2img cv2.imread("2.jpg") # 灰度 grey cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) invert cv2.bitwise_not(grey) # 高斯滤波 blur_img cv2…

【JAVA】关于抽象类的概念

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 在Java中&#xff0c;抽象类是一种特殊的类&#xff0c;它无法被实例化。它只能被用作其他类的基类&#xff0c;以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。…

线性代数基础-行列式

一、行列式之前的概念 1.全排列&#xff1a; 把n个不同的元素排成一列&#xff0c;称为n个元素的全排列&#xff0c;简称排列 &#xff08;实际上就是我们所说的排列组合&#xff0c;符号是A&#xff0c;arrange&#xff09; 2.标准序列&#xff1a; 前一项均小于后一项的序列…

[Linux入门]---管理者操作系统

文章目录 1.操作系统概念2.设计操作系统的目的3.操作系统如何进行管理系统调用和库函数概念 1.操作系统概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存…

ISP技术概述

原本或许是为了对冲手机系统和APP设计无力感而诞生的拍照功能,现今却成为了众手机厂家除背部设计外为数不多可“卷”的地方,自拍、全景、夜景、小视频等旺盛的需求让这一技术的江湖地位迅速变化。对圈内人士而言,这一波变化带来的后摄、双摄、多摄、暗光、防抖、广角、长焦、…

AVLoadingIndicatorView - 一个很好的Android加载动画集合

官网 GitHub - HarlonWang/AVLoadingIndicatorView: DEPRECATED 项目简介 AVLoadingIndicatorView is a collection of nice loading animations for Android. You can also find iOS version of this here. Now AVLoadingIndicatorView was updated version to 2.X , If …

GitStats - 统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps&#xff0c;除了提供基础设施&#xff0c;指标和数据是也是一个很重要的一环&#xff0c;比如需要分析下某个 Git 仓库代码提交情况&#xff1a; 该仓库的代码谁提交的代码最多 该仓库的活跃度是什么样子的 各个时段的提交…

安装Linux虚拟机——以ubuntukylin-16.04.7-desktop-amd64.iso为例

正文 安装VMware 重要提示 安装软件之前&#xff0c;请先退出360、电脑管家等安全类软件&#xff0c;这类软件会阻止我们安装的软件进行注册表注册&#xff0c;很可能导致安装失败。确认物理机&#xff08;也就是你自己使用的电脑&#xff09;的防火墙已经关闭。 下载 打开…

python web编程一:token、session、cookie、密码加解密

1 认证 1 传统的session-cookie机制 HTTP协议是无状态协议&#xff0c;为了解决它产生了cookie和session技术。 浏览器发起第一次请求到服务器&#xff0c;服务器发现浏览器没有提供session id&#xff0c;就认为这是第一次请求&#xff0c;会返回一个新的session id给浏览器…

数据仓库整理

数仓 olap vs oltp OLTP主要用于支持日常的业务操作&#xff0c;如银行交易、电子商务等&#xff0c;强调数据的准确性、实时性和并发性。OLAP主要用于支持复杂的数据分析&#xff0c;如数据仓库、决策支持等&#xff0c;强调数据的维度、聚合和可视化。 将OLTP数据库的数据…

C++之lseek64应用总结(二百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…