当前位置: 首页 > news >正文

mysql组复制、mysql路由器、mysql的MHA高可用

文章目录

  • 前言
  • 一、mysql组复制
    • 1.实验机配置
    • 2.测试
  • 二、mysql路由器
  • 三、mysql之MHA高可用
    • 1.MHA概念
    • 1.创建一主两从集群
    • 2.MHA部署
    • 3.故障切换


前言


一、mysql组复制

1.实验机配置

server1配置

首先停止数据库
[root@server1 mysql]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS!清除数据
[root@server1 ~]# cd /data/mysql 
[root@server1 mysql]# rm -fr *[root@server1 mysql]# vim /etc/my.cnf     ##根据实际情况修改主机名和网段
...
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"server_id=1                          ##
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROWplugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061"       ##主机名需对应
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"  
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.56.0/24,127.0.0.1/8"      ##ip需对应
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1初始化
[root@server1 mysql]# mysqld --initialize --user=mysql
启动服务
[root@server1 mysql]# /etc/init.d/mysqld start[root@server1 mysql]# mysql -p
#首先修改临时密码
mysql> alter user root@localhost identified by 'westos';
Query OK, 0 rows affected (0.01 sec)mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.00 sec)mysql> SET GLOBAL group_replication_bootstrap_group=ON;	#只在server1上执行
Query OK, 0 rows affected (0.00 sec)mysql>  START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (2.19 sec)mysql>  SET GLOBAL group_replication_bootstrap_group=OFF;	 #只在server1上执行
Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 21262bc0-b4e3-11ed-a6a0-000c298f4b2a | server1     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)

server2配置

首先停止数据库
[root@server2 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS!清除数据
[root@server2 ~]# cd /data/mysql 
[root@server2 mysql]# rm -fr *[root@server2 mysql]# vim /etc/my.cnf   ##根据实际情况修改主机名和网段
...
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"server_id=2                         ##需对应
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROWplugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server2:33061"    ##需对应
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.56.0/24,127.0.0.1/8"   ##需对应
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1初始化
[root@server2 mysql]# mysqld --initialize --user=mysql启动服务
[root@server2 mysql]# /etc/init.d/mysqld start[root@server2 mysql]# mysql -p
#首先修改临时密码
mysql> alter user root@localhost identified by 'westos';
Query OK, 0 rows affected (0.01 sec)mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.00 sec)mysql>  START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (2.19 sec)mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 21262bc0-b4e3-11ed-a6a0-000c298f4b2a | server1     |        3306 | ONLINE       |
| group_replication_applier | e8be5058-b4e3-11ed-8788-000c29f15153 | server2     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

server3(与server一致)

首先停止数据库
[root@server3 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS!清除数据
[root@server3 ~]# cd /data/mysql 
[root@server3 mysql]# rm -fr *[root@server3 mysql]# vim /etc/my.cnf
...
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"server_id=3
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROWplugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server3:33061"
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.56.0/24,127.0.0.1/8"
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1
#根据实际情况修改主机名和网段初始化
[root@server3 mysql]# mysqld --initialize --user=mysql启动服务
[root@server3 mysql]# /etc/init.d/mysqld start[root@server3 mysql]# mysql -p
#首先修改临时密码
mysql> alter user root@localhost identified by 'westos';
Query OK, 0 rows affected (0.01 sec)mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.00 sec)mysql>  START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (2.19 sec)mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 21262bc0-b4e3-11ed-a6a0-000c298f4b2a | server1     |        3306 | ONLINE       |
| group_replication_applier | 4c655909-b4e4-11ed-8dcc-000c29259218 | server3     |        3306 | ONLINE       |
| group_replication_applier | e8be5058-b4e3-11ed-8788-000c29f15153 | server2     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

2.测试

所有节点都可以读写数据

server1:
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)mysql> USE test;
Database changed
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO t1 VALUES (1, 'Luis');
Query OK, 1 row affected (0.03 sec)mysql>  SELECT * FROM t1;
+----+------+
| c1 | c2   |
+----+------+
|  1 | Luis |
+----+------+
1 row in set (0.00 sec)server2:
mysql> select * from test.t1;
+----+------+
| c1 | c2   |
+----+------+
|  1 | Luis |
+----+------+
1 row in set (0.00 sec)mysql> INSERT INTO test.t1 VALUES (2, 'hello');
Query OK, 1 row affected (0.00 sec)server3:
mysql>  select * from test.t1;
+----+------+
| c1 | c2   |
+----+------+
|  1 | Luis |
|  2 | hello  |
+----+------+
2 rows in set (0.00 sec)mysql> INSERT INTO test.t1 VALUES (3, 'westos');
Query OK, 1 row affected (0.01 sec)

二、mysql路由器

在这里插入图片描述

安装软件
[root@server4 ~]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
配置服务
[root@server4 ~]# cd /etc/mysqlrouter/
[root@server4 mysqlrouter]# vim mysqlrouter.conf

[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.56.11:3306,192.168.56.12:3306,192.168.56.13:3306
routing_strategy = round-robin
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 192.168.56.13:3306,192.168.56.12:3306,192.168.56.11:3306
routing_strategy = first-available
启动服务
[root@server4 mysqlrouter]# systemctl enable --now mysqlrouter.service
安装mysql客户端工具
[root@server4 ~]# yum install -y mariadb
在mysql集群中创建远程测试用户
mysql> grant all on test.* to ‘wxh’@‘%’ identified by ‘westos’;
连接mysql路由器
[root@server4 ~]# mysql -h 192.168.56.14 -P 7001 -u wxh -pwestos
MySQL [(none)]> select * from test.t1;
±—±-------+
| c1 | c2 |
±—±-------+
| 1 | Luis |
| 2 | wxh |
| 3 | westos |
±—±-------+
3 rows in set (0.00 sec)
在server1上查看网络连接
[root@server1 mysql]# yum install -y lsof
[root@server1 mysql]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 15184 mysql 22u IPv6 87530 0t0 TCP *:mysql (LISTEN)
mysqld 15184 mysql 83u IPv6 93365 0t0 TCP server1:mysql->server4:55504 (ESTABLISHED)
[root@server4 ~]# mysql -h 192.168.56.14 -P 7002 -u wxh -pwestos
[root@server3 mysql]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 30811 mysql 22u IPv6 73360 0t0 TCP *:mysql (LISTEN)
mysqld 30811 mysql 81u IPv6 78061 0t0 TCP server3:mysql->server4:38594 (ESTABLISHED)

三、mysql之MHA高可用

1.MHA概念

1.什么是MHA
MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件
MHA的出现就是解决MySQL单点故障的问题
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用
2.MHA的组成
2.1MHA Node(数据节点)
MHA Node运行在每台MySQL服务器上
2.2MHA Manager(管理节点)
MHA Manager可以单独部署在一台独立的机器上,管理多个Master-Slave集群;也可以部署在一台Slave节点上
MHA Manager会定时探测集群中的master节点。当master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master
整个故障迁移的过程对应用程序完全透明
3.MHA特点
自动故障切换的过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个Slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的Slave服务器上,因此可以保证所有节点的数据一致性
目前MHA支持一主多从架构,最少三台服务,即一主两从
MHA:为了解决的是故障切换、数据尽可能地保存,以及所有节点日志地一致性
4.MHA工作原理(流程)
MHA有3个部分
核心是主从
Manager 管理节点:管理数据库集群信息,定义、触发故障切换
Node 数据节点:主要负责保存日志、比较中继日志,选择主备
MHA会通过Node监控MySQL数据库服务地节点信息,定期检测和返回Master角色地健康状态(健康检查)
MHA通过将VIP定义在Master节点上,并且数据库的访问也从此VIP进入,当Master异常时,MHA会进行"故障切换",就是VIP漂移+二进制日志保存
漂移到主备节点后,会通过脚本命令来控制MySQL服务器角色的变更,例如将主-备服务器变更为主服务器,将其他的从服务器指向新的主服务器,来继续运行
MHA工作原理总结如下:
1.从宕机崩溃的master保存二进制日志时间(binlog events)
2.识别含有最新的更新的slave日志
3.应用差异的中继日志(relay log)到其他的slave
4.应用从master保存的二进制日志事件
5.提升一个slave为新的master
6.使其他的slave联机新的master进行复制

1.创建一主两从集群

master配置:

清理数据
[root@server1 ~]# cd /data/mysql
[root@server1 mysql]# rm -fr *修改配置
[root@server1 mysql]# vim /etc/my.cnf
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog初始化
[root@server1 mysql]# mysqld --initialize --user=mysql启动服务
[root@server1 mysql]# /etc/init.d/mysqld start配置master
[root@server1 mysql]# mysql -p
mysql> alter user root@localhost identified by 'westos';
Query OK, 0 rows affected (0.01 sec)mysql> grant replication slave on *.* to repl@'%' identified by 'westos';
Query OK, 0 rows affected, 1 warning (0.01 sec)

slave配置:(server3与server2配置方法一致)

[root@server2 ~]# cd /data/mysql/
[root@server2 mysql]# rm -fr *[root@server2 mysql]# vim /etc/my.cnf
server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog[root@server2 mysql]# mysqld --initialize --user=mysql[root@server2 mysql]# /etc/init.d/mysqld start[root@server2 mysql]# mysql -p
mysql>  alter user root@localhost identified by 'westos';
Query OK, 0 rows affected (0.01 sec)mysql> change master to master_host='192.168.56.11', master_user='repl', master_password='westos', master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;
Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.56.11Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: binlog.000002Read_Master_Log_Pos: 681Relay_Log_File: server2-relay-bin.000002Relay_Log_Pos: 888Relay_Master_Log_File: binlog.000002Slave_IO_Running: YesSlave_SQL_Running: Yes

测试

master:写入数据
mysql> create database westos;
Query OK, 1 row affected (0.00 sec)mysql> use westos
Database changedmysql> create table user_tb (-> username varchar(25) not null,-> password varchar(50) not null);
Query OK, 0 rows affected (0.01 sec)mysql> insert into user_tb values ('user1','111');
Query OK, 1 row affected (0.03 sec)mysql> insert into user_tb values ('user2','222');
Query OK, 1 row affected (0.00 sec)
slave:
mysql> select * from westos.user_tb;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
| user2    | 222      |
+----------+----------+
2 rows in set (0.00 sec)

2.MHA部署

server4管理端配置:

server4上安装管理端软件
[root@server4 ~]# cd MHA-7/
[root@server4 MHA-7]# yum install -y *.rpm管理端配置ssh免密
[root@server4 MHA-7]# ssh-keygen
[root@server4 MHA-7]# ssh-copy-id server4把密钥复制到各节点
[root@server4 ~]# scp -r .ssh/ server1:
[root@server4 ~]# scp -r .ssh/ server2:
[root@server4 ~]# scp -r .ssh/ server3:复制客户端软件
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:
[root@server4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:server1、server2、server3上安装客户端软件
[root@server1 ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpmMHA配置
[root@server4 ~]# mkdir /etc/masterha
[root@server4 ~]# vim /etc/masterha/app1.cnf
[server default]
user=root				#mysql管理员
password=westos		#mysql管理员密码
ssh_user=root			#ssh免密用户
repl_user=repl			#mysql主从复制用户
repl_password=westos
master_binlog_dir=/data/mysql	#mysql数据库目录
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.56.12 -s 192.168.56.13
ping_interval=3
# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
manager_workdir=/etc/masterha
manager_log=/etc/masterha/manager.log
[server1]
hostname=192.168.56.11
candidate_master=1
check_repl_delay=0[server2]
hostname=192.168.56.12
candidate_master=1
check_repl_delay=0[server3]
hostname=192.168.56.13
no_master=1在master上设置mysql 管理员权限,slave节点会自动同步
mysql> grant all on *.* to root@'%' identified by 'westos';
Query OK, 0 rows affected, 1 warning (0.00 sec)

检测各节点ssh免密连接
[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
在这里插入图片描述
检测主从复制集群状态
[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
在这里插入图片描述

3.故障切换

手动切换(master正常)
[root@server4 ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.56.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000手动切换(master故障)
手动停止master节点上的msql服务
[root@server2 ~]# /etc/init.d/mysqld stop[root@server4 masterha]#  masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.56.12 --dead_master_port=3306 --new_master_host=192.168.56.11 --new_master_port=3306 --ignore_last_failover故障节点需要手动修复,重新加入主从集群
[root@server2 ~]# /etc/init.d/mysqld start
[root@server2 ~]# mysql -pwestosmysql> change master to master_host='192.168.56.11', master_user='repl', master_password='westos', master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;
Query OK, 0 rows affected (0.00 sec)自动切换
故障切换后会生成lock文件,需要手动删除
[root@server4 masterha]# rm -f app1.failover.complete启动manger程序,并打入后台运行,完成切换任务后进程会自动退出
[root@server4 masterha]# masterha_manager --conf=/etc/masterha/app1.cnf &在进行自动切换之前,必须保证主从集群正常,一主两从加入故障切换脚本
[root@server4 ~]# vim  /etc/masterha/app1.cnf
[server default]
user=root
password=westos
ssh_user=root
repl_user=repl
repl_password=westos
master_binlog_dir=/data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.56.12 -s 192.168.56.13
ping_interval=3
master_ip_failover_script= /usr/local/bin/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
manager_workdir=/etc/masterha
manager_log=/etc/masterha/manager.log[server1]
hostname=192.168.56.11
candidate_master=1
check_repl_delay=0[server2]
hostname=192.168.56.12
candidate_master=1
check_repl_delay=0[server3]
hostname=192.168.56.13
no_master=1需要有可执行权限
[root@server4 ~]# ll /usr/local/bin/
total 8
-rwxr-xr-x 1 root root 2158 Feb 26 11:20 master_ip_failover
-rwxr-xr-x 1 root root 3815 Feb 26 11:21 master_ip_online_change

最后按需要修改VIP地址即可
在这里插入图片描述


相关文章:

mysql组复制、mysql路由器、mysql的MHA高可用

文章目录前言一、mysql组复制1.实验机配置2.测试二、mysql路由器三、mysql之MHA高可用1.MHA概念1.创建一主两从集群2.MHA部署3.故障切换前言 一、mysql组复制 1.实验机配置 server1配置 首先停止数据库 [rootserver1 mysql]# /etc/init.d/mysqld stop Shutting down MySQL..…...

一篇搞懂springboot多数据源

好文推荐 https://zhuanlan.zhihu.com/p/563949762 mybatis 配置多数据源 参考文章 https://blog.csdn.net/qq_38353700/article/details/118583828 使用mybatis配置多数据源我接触过的有两种方式,一种是通过java config的方式手动配置两个数据源,…...

Verilog 数据类型和数组简介

在这篇文章将讨论 verilog 中最常用的数据类型,包括对数据表示,线网类型、变量类型,向量类型和数组的讨论。尽管 verilog 被认为是一种弱类型语言(loosely typed),但设计者仍必须在 Verilog 设计中为每个端…...

【数据结构】时间复杂度和空间复杂度以及相关OJ题的详解分析

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.算法效率1.1 如何衡…...

31--Vue-前端开发-Vue语法

一、前端-Vue介绍 1.前端介绍 1、HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 ----> 给后端(PHP、Python、Go、Java) ----> 后端嵌入模板语法 ----> 后端渲染完数据 ----> 返回数据给前端 ----> 在浏览器中查看 2、Ajax的出现 -> 后台发送异…...

这份IC设计必读书单,值得所有IC设计工程师一看!

《综合与时序分析的设计约束》 作者:Sridhar Gangadharan 本书为集成电路时序约束设计的指南,指导读者通过指定的时序要求,充分发挥IC设计的性能。本书内容包括受时序约束的关键环节的设计流程、综合时序分析、静态时序分析和布局布线等。本书…...

Acwing 蓝桥杯 第一章 递归与递推

我上周在干什么,感觉我上周啥也没训,本来两天一次的vp也没v很寄啊,再这样下去真不行了先总结一下如何爆搜:先去确定好枚举的对象枚举的对象很重要!!这直接影响了复杂度然后就是去想递归树就好了一、确定状态…...

模型部署笔记

目录模型部署工作ONNX存在的意义ONNX(Open Neural Network Exchange)ONNX示例模型推理示例Batch调整量化量化方式常见问题模型部署工作 训练好的模型在特定软硬件平台下推理针对硬件优化和加速的推理代码 训练设备平台: CPU、GPU、DSP ONN…...

多线程之wait和notify

目录 1.wait()方法 2. notify方法 因为线程之间是抢占式执行的,所以线程之间执行的先后顺序难以预知。但是实际开发中,我们希望线程之间的执行顺序是能被掌控的,比如线程2开始之前,需要线程1的某个任务先被执行。也就是说,很多时…...

MVCC 当前读 快照读 RC read view RR下事务更新不会丢失

MVCC(multi-version-concurrent-control) MVCC是行锁的一个变种,但MVCC在很多情况下它避免了加锁。不是buffer块,而是buffer中的记录行。 MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制&#x…...

NCRE计算机等级考试Python真题(二)

第二套试题1、关于算法的描述,以下选项中错误的是A.算法具有可行性、确定性、有穷性的基本特征B.算法的复杂度主要包括时间复杂度和数据复杂度C.算法的基本要素包括数据对象的运算和操作及算法的控制结构D.算法是指解题方案的准确而完整的描述正确答案: …...

借助IBM Spectrum LSF为芯片行业大幅提升算力,预测未来

IBM Spectrum LSF 客户案例——上海开赟软件服务有限公司借助IBM Spectrum LSF为芯片行业大幅提升算力,预测未来 业务影响 中国芯片市场作为全球消费芯片市场重要组成部分,近年来发展迅猛。据国家统计局统计,2019年中国集成电路产量突破200…...

力扣-换座位

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:626. 换座位二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …...

DFT基本入门介绍

1.什么是DFT?2.为什么要做DFT?3.“测试”与“验证”的区别4.DFT的核心技术1)扫描路径设计(Scan Design)2)内建自测试(Bist)3)JTAG4)ATPG5.DFT工程师的岗位职责随着芯片的制程越来小(5nm), 芯片的规模越来越…...

做「增长」必须懂的6大关键指标

无论你所从事的是哪个行业,增长都不是一件易事,SaaS公司想要维持长期的增长更是难上加难。这是因为SaaS公司对未来回报的依赖程度更大,反观那些传统商业模式的公司,主要的收入来源都集中在产品购买交付的时点上,而客户…...

Linux:soft lockup 检测机制

1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 分析背景 本文分析基于 linux-4.14.132 内核代码分析,运行环境 Ubuntu 16.04.4 LTS QEMU ARM vexpress-a9 ,rootfs 基…...

天线理论知识4——非频变天线

目录 简介自补结构巴比涅原理天线的描述常见的非频变天线简介 所谓的非频变天线指的是天线的参数几乎不随着频率的改变而发生变化。 自补结构 天线的自补结构指的是:由无限大且无厚度的理想导电区域的自由空间中的非导电区域放置一起的结构称为自补结构。包含金属部分和非金…...

基础架构组件选型及服务化

常见的分布式基础架构组件 分布式服务化框架,业界开源产品比如 Dubbo、Spring Cloud 这样的框架;分布式缓存及框架,业界如 Redis、Memcached,框架如 Codis 和 Redis Cluster;数据库及分布式数据库框架,这两…...

leetcode-每日一题-1247(中等,数学逻辑)

这道题当理解清了意思之后,只要是s1和s2的某位置的字母一样时我们就可以忽视比如s1"xxxxxxyyyy"; 就可以看成s1"xxxyyyy";s2"xxxyyyxxxx"; s2"yyyxxxx";其次就是只有当x和y位置差异产生的数量同奇偶的时候才可以构成相等字…...

前端面试题 —— 计算机网络(一)

目录 一、常见的HTTP请求头和响应头 二、HTTP状态码304是多好还是少好? 三、OPTIONS请求方法及使用场景 四、对keep-alive的理解 五、HTTP协议的优点和缺点 六、URL有哪些组成部分? 七、HTTPS通信(握手)过程 八、HTTPS的特…...

分布式-分布式缓存笔记

分布式系统缓存 缓存分类 前端缓存 前端缓存包括页面和浏览器缓存,如果是 App,那么在 App 端也会有缓存。当你打开商品详情页,除了首次打开以外,后面重复刷新时,页面上加载的信息来自多种缓存。 页面缓存属于客户端…...

【反序列化漏洞-01】为什么要序列化

为什么要序列化百度百科上关于序列化的定义是,将对象的状态信息转换为可以存储或传输的形式(字符串)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区(非关系型键值对形式的数据库Redis,与数组类似)。以后,可以通过…...

用c语言模拟实现常用字符串函数

目录 一.常用字符串函数介绍 1.strlen 2. strcpy 3.strcmp 4.strcat 5.strstr 二.模拟实现常用字符串函数 1.strlen 2.strcpy 3.strcmp 4.strcat 5.strstr 一.常用字符串函数介绍 1.strlen 字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关…...

在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理

大家好,我是 17。 Flutter WebView 一共写了四篇文章 在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理在 Flutter 中使用 webview_flutter 4.0 | js 交互Flutter WebView 性能优化,让 h5 像原生页面一样优秀,已入选 掘金一周 …...

JavaWeb--Servlet

Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置目标: 理解Servlet的执行流程和生命周期掌握Servlet的使用和相关配置 1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。 使…...

Linux启动过程

theme: channing-cyan 两种启动方式 传统启动方式(LEGACYMBR) 指传统BIOS启动方式,存在一些不足:比如最大只支持2TB磁盘,磁盘最多四个分区,且不支持图形操作 UEFIGPT方式 是新式的启动方式&#xff0c…...

面试资料整理——C++

C/C难题的高赞回答「中文版」 https://mp.weixin.qq.com/s/KBEnrRVb1T6LfwHgaB4jiQ C/C难题的高赞回答「中文版」,帮你整理好了 https://mp.weixin.qq.com/s/o9MdENiasolVT-Fllag2_Q C语言与C面试知识总结 https://mp.weixin.qq.com/s/MGSoPqPv_OzyWBS5ZdnZgw 程…...

【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用

ArcGIS Pro自带了1000种以上的GeoProcessing工具,几乎可以实现所有你想要做的事。 ArcGIS Pro的二次开发并不需要我们从底层做起,很多功能只要学会调用工具并组合使用,就完全可以实现。 下面介绍如何调用系统自带的GeoProcessing工具&#x…...

皕杰报表斜线单元格、图表里或导出pdf的中文显示小方块解决方案

在皕杰报表中,如果含有斜线的单元格、统计图的报表、或导出pdf时,汉字变成小方框,这往往是服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。因为斜线单元格里…...

python读写hdfs文件的实用解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

wordpress 新安装 慢/金戈西地那非片

复制文件。 语法 FileCopy源,目标 FileCopy 语句语法包含以下命名参数: 部分说明source必需。 指定要复制的文件的名称的字符串表达式。 _源_可能包含目录或文件夹,和驱动器。目标必需。 指定的目标文件名称的字符串表达式。 _目标_可能包含目…...

下拉网站导航用ps怎么做/桂平网络推广

大家都知道,现在Spring框架几乎无处不用,目前最新版本据说是Spring5,现在常用的基本还是Spring4.X,很多公司甚至用的还是Spring3.x,而Spring领域其中最好用的莫过于SpringBoot,这是从SpringMVC衍变出来的&a…...

网络公司网站建/西安企业seo外包服务公司

RustDesk一款开源的远程工具,支持Windows,Macos,Linux,Android多个操作系统,安装包大小只有12M左右,无需任何配置,打开就可以直接使用,体验目前看来相当不错,支持自建服务…...

苏州商城网站制作/手机优化软件哪个好

点击上方蓝色文字关注公众号在前面一章已经介绍了如何创建应用,下面开始讲解如何给硬件应用设置通信方式。目前有两种方式可供选择,分别是蓝牙和MQTT,本章介绍蓝牙对接。1准备工作由于微信小程序官方对蓝牙设备的限制,只能使用低功…...

英文企业网站模板/网站统计哪个好用

存在这样一种情况,有时候项目中,存在一些 公共的组件,通常会抽取出来,放在一个统一的文件夹中. 然后大家就可以再 各个 模块里面 愉快的使用该 组件了. 但是也带来一个坑爹的问题 组件放在 common 文件夹中,但是 引用是在 modules 下的各个模块中引用. 这个时候 引用的方式是这…...

优秀网站架构/上海seo优化外包公司

作者:李恩华 写于2012.4.22日凌晨西甲国家德比之前 C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大&…...