mysql mha高可用集群搭建
文章目录
- mha集群搭建
- 主从从部署
- 基本环境准备
- 安装mysql
- 主从配置
- mha部署
- 故障修复
- 搭建完成
mha集群搭建
在 MySQL 高可用架构中,MHA(Master High Availability)通常采用一主多从的架构。
MHA 可以提供主从复制架构的自动 master failover 功能。当主服务器出现故障时,MHA 会将从服务器提升为新的主服务器,并在此期间通过与其他从服务器获取额外信息来避免一致性问题。
主从从部署
基本环境准备
yum源配置
cd /etc/yum.repos.d
mkdir bak
mv *.repo ./bak
cd /etc/yum.repos.d
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
修改主机名和host文件解析
hostnamectl set-hostname master1 && bash
hostnamectl set-hostname slave1 && bash
hostnamectl set-hostname slave2 && bashcat /etc/hosts
192.168.3.74 master1
192.168.3.75 slave1
192.168.3.76 slave2
配置3台数据库主机之间ssh免密登录
ssh-keygen
ssh-cpoy-id 192.168.3.74
ssh-cpoy-id 192.168.3.75
ssh-cpoy-id 192.168.3.76
安装mysql
删除原有的mariadb
yum remove mariadb* -y
添加源
cat <<EOF > /etc/yum.repos.d/mysql57.repo
[mysql57]
name=mysql57
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/
gpgcheck=0
enabled=1
EOF
yum install mysql-community-server -y
启动mysql服务,查看初始密码
systemctl enable mysqld --nowcat /var/log/mysqld.log |grep password
2024-09-19T08:36:50.471114Z 1 [Note] A temporary password is generated for root@localhost: :Q,)akd#i8U+
使用初始密码登录,修改mysql的root账号初始密码
alter user 'root'@'localhost' identified with mysql_native_password by "aaA...111";flush privileges;
也可以使用mysqladmin修改密码
mysqladmin -uroot -p"e#)er)sg?39A" password aaA...111
主从配置
修改my.cnf配置文件(主)
vim /etc/my.cnf
server-id = 1
log-bin = mysql-bin
binlog_format = row
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = true
修改my.cnf配置文件(从1)
vim /etc/my.cnf
server-id = 2
log-bin = mysql-bin
binlog_format = row
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = true
修改my.cnf配置文件(从2)
vim /etc/my.cnf
server-id = 3
log-bin = mysql-bin
binlog_format = row
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = true
重启服务
systemctl restart mysqld
master1创建MHA用于监控的账号(mha)和主从同步账号(repl)
# 创建主从同步账号repl
create user 'repl'@'192.168.%.%' identified with mysql_native_password by 'repl1234A...';# 授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%';# 刷新权限,生效
flush privileges;# 查看用户信息
select user,host from mysql.user;# 查看授权
mysql> show grants for 'repl'@'192.168.%.%';
+--------------------------------------------------------+
| Grants for repl@192.168.%.% |
+--------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%' |
+--------------------------------------------------------+
1 row in set (0.00 sec)
# 创建用于mha高可用账号mha
create user 'mha'@'192.168.%.%' identified with mysql_native_password by 'mhA1234...';# 授权
grant all privileges on *.* to 'mha'@'192.168.%.%';# 刷新权限,生效
flush privileges;# 查看用户信息
mysql> select user,host from mysql.user;
+---------------+-------------+
| user | host |
+---------------+-------------+
| mha | 192.168.%.% |
| repl | 192.168.%.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-------------+
5 rows in set (0.00 sec)# 查看用户repl授权
mysql> show grants for 'repl'@'192.168.%.%';
+--------------------------------------------------------+
| Grants for repl@192.168.%.% |
+--------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%' |
+--------------------------------------------------------+
1 row in set (0.00 sec)
# 查看用户mha授权
mysql> show grants for 'mha'@'192.168.%.%';
+----------------------------------------------------+
| Grants for mha@192.168.%.% |
+----------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mha'@'192.168.%.%' |
+----------------------------------------------------+
1 row in set (0.00 sec)
# 如何删除用户
drop user 'mha'@'192.168.%.%';
slave1、slave2从库配置主从复制
change master to master_host='192.168.3.74', master_user='repl', master_password='repl1234A...' , MASTER_AUTO_POSITION=1;
GTID位置点(自动追踪需要同步的 position):master_auto_position=1
开启从库的主从复制功能
mysql> stop slave; #停止主从同步功能
mysql> start slave; #开启主从同步功能
mysql> show slave status\G #查询状态,是否成功Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
2个从库会把刚才主库创建的用户同步到从库,从库中都有mha repl 用户,若没有,检查上述步骤配置是否有误
mysql> select user,host from mysql.user;
+---------------+-------------+
| user | host |
+---------------+-------------+
| mha | 192.168.%.% |
| repl | 192.168.%.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-------------+
5 rows in set (0.01 sec)
从库设置只读模式
# 设置只读模式
mysql -uroot -paaA...111 -e 'set global read_only=1'# 查看是否为只读模式
mysql -uroot -paaA...111 -e "SHOW VARIABLES LIKE 'read_only'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only | ON |
+---------------+-------+
mha部署
77主机作为管理主机(mha manager )来管理 74主库 75从库 76从库
所有主机安装依赖软件包
yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
配置ssh免密登录 77 免密登录 74 75 76 , 三台数据库相互免密登录
# 77免密登录 74 75 76
ssh-keygen
ssh-cpoy-id 192.168.3.74
ssh-cpoy-id 192.168.3.75
ssh-cpoy-id 192.168.3.76# 74 75 76 数据库相互免密登录
ssh-keygen
ssh-cpoy-id 192.168.3.74
ssh-cpoy-id 192.168.3.75
ssh-cpoy-id 192.168.3.76
在所有数据库节点 安装软件包 mha4mysql-node-0.58.tar.gz
# 上传软件包
rz mha4mysql-node-0.58.tar.gz
tar zxf mha4mysql-node-0.58.tar.gz -C /usr/local/src/
cd /usr/local/src/mha4mysql-node-0.58/
perl Makefile.PL && make && make install# 查看安装成功后的脚本文件
ll /usr/local/bin/
总用量 48
-r-xr-xr-x 1 root root 17639 9月 19 17:01 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 9月 19 17:01 filter_mysqlbinlog
-r-xr-xr-x 1 root root 8337 9月 19 17:01 purge_relay_logs
-r-xr-xr-x 1 root root 7525 9月 19 17:01 save_binary_logs
在管理节点 需要安装两个软件包:mha4mysql-node-0.58.tar.gz 和 mha4mysql-manager-0.58.tar.gz
# 安装mha4mysql-node-0.58.tar.gz 和 mha4mysql-manager-0.58.tar.gzrz mha4mysql-manager-0.58.tar.gz mha4mysql-node-0.58.tar.gz
tar zxf mha4mysql-node-0.58.tar.gz -C /usr/local/src/
tar zxf mha4mysql-manager-0.58.tar.gz -C /usr/local/src/
cd /usr/local/src/mha4mysql-node-0.58/
perl Makefile.PL && make && make install
cd /usr/local/src/mha4mysql-manager-0.58
perl Makefile.PL && make && make install# 查看安装成功后的脚本文件
ll /usr/local/bin/
总用量 88
-r-xr-xr-x 1 root root 17639 9月 19 17:01 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 9月 19 17:01 filter_mysqlbinlog
-r-xr-xr-x 1 root root 1995 9月 19 17:04 masterha_check_repl
-r-xr-xr-x 1 root root 1779 9月 19 17:04 masterha_check_ssh
-r-xr-xr-x 1 root root 1865 9月 19 17:04 masterha_check_status
-r-xr-xr-x 1 root root 3201 9月 19 17:04 masterha_conf_host
-r-xr-xr-x 1 root root 2517 9月 19 17:04 masterha_manager
-r-xr-xr-x 1 root root 2165 9月 19 17:04 masterha_master_monitor
-r-xr-xr-x 1 root root 2373 9月 19 17:04 masterha_master_switch
-r-xr-xr-x 1 root root 5172 9月 19 17:04 masterha_secondary_check
-r-xr-xr-x 1 root root 1739 9月 19 17:04 masterha_stop
-r-xr-xr-x 1 root root 8337 9月 19 17:01 purge_relay_logs
-r-xr-xr-x 1 root root 7525 9月 19 17:01 save_binary_logs
配置77主机(mha manager )
拷贝脚本文件至/usr/local/bin/
# 拷贝脚本文件至/usr/local/bin/
cp /usr/local/src/mha4mysql-manager-0.58/samples/scripts/master_ip_failover /usr/local/bin/
cp /usr/local/src/mha4mysql-manager-0.58/samples/scripts/master_ip_online_change /usr/local/bin/# 查看安装成功后的脚本文件
ll /usr/local/bin/
总用量 104
-r-xr-xr-x 1 root root 17639 9月 19 17:01 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 9月 19 17:01 filter_mysqlbinlog
-r-xr-xr-x 1 root root 1995 9月 19 17:04 masterha_check_repl
-r-xr-xr-x 1 root root 1779 9月 19 17:04 masterha_check_ssh
-r-xr-xr-x 1 root root 1865 9月 19 17:04 masterha_check_status
-r-xr-xr-x 1 root root 3201 9月 19 17:04 masterha_conf_host
-r-xr-xr-x 1 root root 2517 9月 19 17:04 masterha_manager
-r-xr-xr-x 1 root root 2165 9月 19 17:04 masterha_master_monitor
-r-xr-xr-x 1 root root 2373 9月 19 17:04 masterha_master_switch
-r-xr-xr-x 1 root root 5172 9月 19 17:04 masterha_secondary_check
-r-xr-xr-x 1 root root 1739 9月 19 17:04 masterha_stop
-rwxr-xr-x 1 root root 3648 9月 19 17:09 master_ip_failover
-rwxr-xr-x 1 root root 9870 9月 19 17:09 master_ip_online_change
-r-xr-xr-x 1 root root 8337 9月 19 17:01 purge_relay_logs
-r-xr-xr-x 1 root root 7525 9月 19 17:01 save_binary_logs
77主机(mha manager )创建MHA Manager配置文件
# 配置 MHA Manager
mkdir /etc/mhacat > /etc/mha/app1.cnf << EOF
[server default]
manager_workdir=/etc/mha
manager_log=/etc/mha/manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_changeping_interval=2
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.3.75 -s 192.168.3.76ssh_user=root
ssh_port=22user=mha
password=mhA1234...repl_user=repl
repl_password=repl1234A...[server1]
hostname=192.168.3.74
candidate_master=1
port=3306[server2]
hostname=192.168.3.75
port=3306
candidate_master=1[server3]
hostname=192.168.3.76
candidate_master=1
port=3306EOF
修改故障切换脚本,添加vip地址的设置
vim /usr/local/bin/master_ip_failover#!/usr/bin/env perluse strict;
use warnings FATAL => 'all';use Getopt::Long;
use MHA::DBHelper;my ($command, $ssh_user, $orig_master_host,$orig_master_ip, $orig_master_port, $new_master_host,$new_master_ip, $new_master_port, $new_master_user,$new_master_password
);##############该部分按实际修改##############
my $vip = '192.168.3.177/24';
my $ifdev = 'ens33';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig $ifdev:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig $ifdev:$key down";
##############该部分按实际修改##############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,'new_master_user=s' => \$new_master_user,'new_master_password=s' => \$new_master_password,
);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();# updating global catalog, etc$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 $@;# If you want to continue failover, exit 10.exit $exit_code;}exit $exit_code;}elsif ( $command eq "status" ) {print "Checking the Status of the script.. OK \n";# do nothingexit 0;}else {&usage();exit 1;}
}
sub start_vip() {`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}sub stop_vip() {return 0 unless ($ssh_user);`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";
}
给mysql主服务器添加虚拟ip地址
# 创建vip地址
ifconfig ens33:1 192.168.3.177/24附:
# 删除
ifconfig ens33:1 del 192.168.3.177
# 停止
ifconfig ens33:1 down
启动 77主机(mha manager )前验证配置是否正确
masterha_check_ssh --conf=/etc/mha/app1.cnf
masterha_check_repl --conf=/etc/mha/app1.cnf
启动 77主机(mha manager )
# 前台运行
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover# 后台运行
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1.log 2>&1 &
检查运行状态
masterha_check_status --conf=/etc/mha/app1.cnf
主数据上创建数据库测试
# 创建数据库和表
create database db9;
create table db9.a (id int);
insert into db9.a values(111);
select * from db9.a;# 创建账号devusr
create user 'devusr'@'192.168.%.%' identified with mysql_native_password by 'devusr1234A...';# 授权devusr用户
GRANT select,insert,delete ON db9.* TO 'devusr'@'192.168.%.%';
# 刷新权限,生效
flush privileges;
# 查看用户devusr授权
mysql> show grants for devusr@'192.168.%.%';
+-------------------------------------------------------------------+
| Grants for devusr@192.168.%.% |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'devusr'@'192.168.%.%' |
| GRANT SELECT, INSERT, DELETE ON `db9`.* TO 'devusr'@'192.168.%.%' |
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)
测试高可用
# 直接把主库关机,使用其它机器连接vip地址,可以看到正常连接数据库。
[root@mg ~]# mysql -udevusr -pdevusr1234A... -h192.168.3.177MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db9 |
+--------------------+
2 rows in set (0.00 sec)# 插入数据
insert into db9.a values(1234567);# 主库宕机后 77主机(mha manager )会将 [server1] 字段被删除 ,且mha manager会停止运行
# 每次failover切换后会在管理目录生成文件 /etc/mha/app1.failover.complete
# 下次在切换的时候会发现有这个文件导致切换不成功,需要手动清理掉
# rm -rf /masterha/app1/app1.failover.complete
# 也可以在启动时加上参数--ignore_last_failover# vip地址也会切换到其它机器上
cat /etc/mha/app1.cnf[server default]
manager_log=/etc/mha/manager.log
manager_workdir=/etc/mha
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=mhA1234...
ping_interval=2
repl_password=repl1234A...
repl_user=repl
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.3.75 -s 192.168.3.76
ssh_port=22
ssh_user=root
user=mha[server2]
candidate_master=1
hostname=192.168.3.75
port=3306[server3]
candidate_master=1
hostname=192.168.3.76
port=3306
故障修复
# 修好宕机的机器,启动mysql服务后,将原来的master主库机器指向新的主数据库
change master to master_host='192.168.3.75', master_user='repl', master_password='repl1234A...' , MASTER_AUTO_POSITION=1;# 开器主从同步
start slave;# 修改mha manager 配置文件
# 重新加以下入字段(74主数据库宕机后以下这段配置会被删除)
vim /etc/mha/app1.cnf
[server1]
hostname=192.168.3.74
candidate_master=1
port=3306# 重新启动mha 后台运行
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1.log 2>&1 &# 重新启动mha 前台运行
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover# 修复完成------------------# 若还需要使用原来的主服务器,可以使用MHA的在线切换功能,如下# 首先,manager节点上停掉MHA监控
masterha_stop --conf=/etc/mha/app1.cnf# 切换回原来的主库
masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.3.74 --orig_master_is_new_slave --running_updates_limit=10000 --interactive=0# 如果报错,编辑这个文件
vim /usr/local/bin/master_ip_online_change
# 找到下面这两条将其使用`#`号注释掉
FIXME_xxx_drop_app_user($orig_master_handler);
FIXME_xxx_create_app_user($new_master_handler);# 重新启动mha 后台运行
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1.log 2>&1 &# 重新启动mha 前台运行
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
常用命令
# MHA 检测ssh状态
masterha_check_ssh --conf=/etc/mha/app1.cnf# MHA 检测mysql集群主从状态
masterha_check_repl --conf=/etc/mha/app1.cnf# 前台运行
masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover# 后台运行
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1.log 2>&1 &# MHA Manager停止运行
masterha_stop --conf=/etc/mha/app1.cnf# 直接kill掉也可
搭建完成
相关文章:
mysql mha高可用集群搭建
文章目录 mha集群搭建主从从部署基本环境准备安装mysql主从配置 mha部署故障修复 搭建完成 mha集群搭建 在 MySQL 高可用架构中,MHA(Master High Availability)通常采用一主多从的架构。 MHA 可以提供主从复制架构的自动 master failover 功…...

如何解决“json schema validation error ”错误? -- HarmonyOS自学6
一. 问题描述 DevEco Studio工程关闭后,再重新打开时,出现了如下错误提示: json schema validation error 原因: index.visual或其他visual文件中的left等字段的值为负数时,不能以”-0.x“开头,否则就会…...
基于Jeecg-boot开发系统--后端篇
背景 Jeecg-boot是一个后台管理系统,其提供能很多基础的功能,我希望在不修改jeecg-boot代码的前提下增加自己的功能。经过几天的折腾终于搞定了。 首先是基于jeecg-boot微服务的方式来扩展的,jeecg-boot微服务本身的搭建过程就不讲了&#x…...
Spring Boot实战:使用@Import进行业务模块自动化装配
案例背景: 假设我们正在开发一个电子商务平台,该平台需要处理大量的订单数据。为了简化订单处理服务的配置,我们可以利用Import注解来自动注册一些常用的工具类和服务组件。 业务场景描述: 我们需要一个服务来处理订单的创建、…...

Golang | Leetcode Golang题解之第415题字符串相加
题目: 题解: func addStrings(num1 string, num2 string) string {add : 0ans : ""for i, j : len(num1) - 1, len(num2) - 1; i > 0 || j > 0 || add ! 0; i, j i - 1, j - 1 {var x, y intif i > 0 {x int(num1[i] - 0)}if j &g…...

5. 数字证书与公钥基础设施
5. 数字证书与公钥基础设施 (1) PKI 的定义、组成及应用 PKI(Public Key Infrastructure,公钥基础设施) 是一个使用公钥技术来提供安全服务的框架。它定义了如何管理和维护公钥,以及如何通过证书来验证公钥的真实性。PKI的核心组成部分包括: 证书颁发机构(CA, Certifica…...

Centos中关闭swap分区,关闭内存交换
概述: Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时,用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大,一般虚拟化是不允许开启交换空间的,如果不关闭Swap&…...

leetcode练习 二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3提示: 树中节点的数量在 [0, 104] 区间内。-100 …...
Scrapy爬虫框架 Items 数据项
在数据抓取和网络爬虫的开发中,Scrapy 框架以其强大的功能和灵活性,成为了开发者首选的工具之一。在一个典型的 Scrapy 项目中,数据项(Items)的定义、Spider 的应用,以及如何使用 ItemLoader 来加载和处理数据,都是开发过程中至关重要的环节。 本教程将分为几个主要部分…...

weblogic CVE-2018-2894 靶场攻略
漏洞描述 Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞,Web Service Test Page 在 "⽣产模式"下默认不开启,所以该漏洞有⼀定限制。 漏洞版本 weblogic 10.3.6.0 weblogic 12.1.3.0 weblogic 12.2.1.2 28 weblogic 12.2.1.3 …...
百易云资产管理运营系统 ticket.edit.php SQL注入漏洞复现
0x01 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业优化资产配置,提升运营效率。 0x02 漏…...
C++(2)进阶语法
C(2)之进阶语法 Author: Once Day Date: 2024年9月20日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 参考文…...

解决Hive乱码问题
在插入数据后,发现hive乱码 原因:Hive默认将存储表结构的元数据列编码设置为latin1,不支持中文 解决方法:在MySQL中修改对应Hive元数据列的编码 先查看mysql的所有字符集编码 1、先修改my.cnf 代码如下: vim /etc/…...

Streamlit:使用 Python 快速开发 Web 应用
一、简单介绍 Streamlit 是一个开源 Python 库,官网地址: https://streamlit.io/http://StreamlitStreamlit 是一个开源的 Python 框架,旨在为数据科学家和 后端工程师们提供只需几行代码即可创建动态数据应用的功能。 让没有任何前端基础…...

C#基础(11)函数重载
前言 前面我们已经完成了ref和out补充知识点的学习,以及函数参数相关的学习,今天便再次为函数补充一个知识点:函数重载。 函数重载是指在同一个作用域中,可以有多个同名函数,但参数列表不同。它的发展可以追溯到早期…...
堆栈指针寄存器SP的初值是多少?执行PUSH AX命令后,SP的值是多少?执行POP BX后,SP的值是多少?为什么答案给的是200,202,200。
欢迎来到我的技术博客! 🎉 这里不仅有满满的编程干货和学习资源,我的某站账号也为你准备了更多实用的技术视频和知识分享。 👉 点击关注我的小破站账号,获取更多编程技巧和学习资源! 小破站主页 例题 ST…...
python爬虫初体验(二)
在Python中,每个模块都有一个内置的变量 name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。 作用 模块可被导…...

细说渗透测试:阶段、流程、工具和自动化开源方案
不知有多少“曾梦想仗剑走天涯”的网络与信息安全从业者,是因为渗透测试的初心而步入这个行业的。不过,您是否对渗透测试及其漏洞扫描的相关概念感到既熟悉又陌生呢?您是否觉得自己还停留在从工作实践中积累的感性认识呢?下面&…...
redis 十大应用场景
Redis 是一个开源的内存数据结构存储系统,广泛应用于各种场景,尤其在高性能、低延迟需求的场景中。以下是 Redis 的一些典型应用场景: 1. 缓存系统 Redis 最常见的用途之一是作为缓存系统,以减少数据库访问的频率,提升…...

信息安全数学基础(15)欧拉定理
前言 欧拉定理是数论中的一个重要定理,它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用,特别是在公钥密码体制(如RSA加密算法)中。 一、表述 设 n 是一个正整数,a 是一个与 n 互…...

网页抓取混淆与嵌套数据处理流程
当我们在网页抓取中,遇到混淆和多层嵌套的情况是比较常见的挑战。混淆大部分都是为了防止爬虫而设计的,例如使用JavaScript动态加载、数据加密、字符替换、CSS偏移等。多层嵌套则可能是指HTML结构复杂,数据隐藏在多层标签或者多个iframe中。 …...

直角坐标系和斜角坐标系
前情概要 笛卡尔坐标系是直角坐标系和斜角坐标系的统称。为什么会有这两种坐标系呢,教材中为什么最后只用直角坐标系呢?我们这样解释: 研究一维空间中的向量时,由于一维空间中的向量有无数条,如果我们选定一条作为基…...
CppCon 2015 学习:Memory and C++ debugging at Electronic Arts
这是关于 C 游戏开发中内存接口与调试工具演进 的介绍,主要回顾了从早期到现在平台上的内存与调试策略变化: 游戏平台演进与内存接口编程风格 2000年 (PlayStation 2) 编程风格偏向嵌入式 C 风格。系统资源有限(例如 32MB RAM)…...

linux库(AI回答)
STL POSIX关系 DeepSeek-R1 回答完成 搜索全网22篇资料 STL(标准模板库)和 POSIX(可移植操作系统接口)是两种不同领域的技术标准,它们在 C/C 开发中各有侧重,但可以协同使用。以下是它们的关系和区别&…...
【生活】程序员防猝si指南
note 一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、每周运动四、减压五、保证睡眠六、戒烟限酒7、控制血压8、警惕流感攻击心脏9、关注牙齿健康10、不要抵触吃药 文章目录 note一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、…...

第三讲 Linux进程概念
1. 冯诺依曼体系结构 我们买了笔记本电脑, 里面是有很多硬件组成的, 比如硬盘, 显示器, 内存, 主板... 这些硬件不是随便放在一起就行的, 而是按照一定的结构进行组装起来的, 而具体的组装结构, 一般就是冯诺依曼体系结构 1.1. 计算机的一般工作逻辑 我们都知道, 计算机的逻…...

kafka(windows)
目录 介绍 下载 配置 测试 介绍 Kafka是一个分布式流媒体平台,类似于消息队列或企业信息传递系统。 下载 Kafka对于Zookeeper是强依赖,所以安装Kafka之前必须先安装zookeeper 官网:Apache Kafka 下载此安装包并解压 配置 新建log…...
simulink这边重新第二次仿真时,直接UE5崩溃,然后simulink没有响应
提问 : simulink这边重新第二次仿真时,直接UE5崩溃,然后simulink没有响应 simulink和UE5仿真的时候,simulink这边先停止仿真(也就是官方要求的顺序——注意:如果先在UE5那边停止仿真,如果UE5这…...

Paraformer分角色语音识别-中文-通用 FunASR demo测试与训练
文章目录 0 资料1 Paraformer分角色语音识别-中文-通用1 模型下载2 音频识别测试3 FunASR安装 (训练用)4 训练 0 资料 https://github.com/modelscope/FunASR/blob/main/README_zh.md https://github.com/modelscope/FunASR/blob/main/model_zoo/readm…...

电镀机的阳极是什么材质?
知识星球(星球名:芯片制造与封测技术社区,点击加入)里的学员问:电镀的阳极有什么讲究?什么是可溶性阳极和非可溶性阳极? 什么是可溶性阳极与非可溶性阳极? 可溶性阳极 阳极本身就是…...