【项目实战经验】DataKit迁移MySQL到openGauss(上)

前言

本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。

1. 下载操作系统

https://www.openeuler.org/zh/download

https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956

https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/fddc1451

 1.1. 关闭selinux

[root@olnode01 tmp]# cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

1.2. 关闭防火墙

[root@olnode01 tmp]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2023-12-07 20:57:23 CST; 40min agoDocs: man:firewalld(1)Main PID: 1013 (firewalld)Tasks: 2Memory: 33.2MCGroup: /system.slice/firewalld.service└─1013 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopidDec 07 20:57:23 olnode01.bluemoon.ltd systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 07 20:57:23 olnode01.bluemoon.ltd systemd[1]: Started firewalld - dynamic firewall daemon.
[root@olnode01 tmp]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@olnode01 tmp]# systemctl stop firewalld
[root@olnode01 tmp]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)Dec 07 20:57:23 olnode01.bluemoon.ltd systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 07 20:57:23 olnode01.bluemoon.ltd systemd[1]: Started firewalld - dynamic firewall daemon.
Dec 07 21:37:57 olnode01.bluemoon.ltd systemd[1]: Stopping firewalld - dynamic firewall daemon...
Dec 07 21:37:58 olnode01.bluemoon.ltd systemd[1]: firewalld.service: Succeeded.
Dec 07 21:37:58 olnode01.bluemoon.ltd systemd[1]: Stopped firewalld - dynamic firewall daemon.

1.3. 修改字符集

echo export LANG=en_US.UTF-8 >> /etc/profile

1.4. 关闭RemoveIPC

默认RemoveIPC=yes,表示当用户退出时,会删除该用户的共享内存段和信号量。

1.5. 刷新服务

systemctl daemon-reload 
systemctl restart systemd-logind
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC

1.6. 关闭透明大页

echo never >> /sys/kernel/mm/transparent_hugepage/defrag 
echo never >> /sys/kernel/mm/transparent_hugepage/enabled 
echo 'echo never >> /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local 
echo 'echo never >> /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local 
sh /etc/rc.d/rc.local

1.7. 安装软件依赖和工具

yum install libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel libnsl -y
yum install tar vim java sysstat -y
# yum remove java-1.8* yum remove java-1.7*
yum install -y java-11-openjdk.x86_64  ava-11-openjdk-devel.x86_64  java-11-openjdk-headless.x86_64  java-11-openjdk-devel.x86_64

1.8. 修改资源使用限制

omm soft nproc 16384
omm hard nproc 16384
omm soft nofile 65536
omm hard nofile 65536
omm soft memlock 4000000
omm hard memlock 4000000
sysctl -p

1.9. 软链接readline

[omm@olnode01 simpleInstall]$ rpm -qa|grep readline
readline-8.0-4.oe1.x86_64
readline-devel-8.0-4.oe1.x86_64
[omm@olnode01 simpleInstall]$ ldconfig -p|grep readlinelibreadline.so.8 (libc6,x86-64) => /lib64/libreadline.so.8libreadline.so (libc6,x86-64) => /lib64/libreadline.solibguilereadline-v-18.so.18 (libc6,x86-64) => /lib64/libguilereadline-v-18.so.18libguilereadline-v-18.so (libc6,x86-64) => /lib64/libguilereadline-v-18.so
cd /lib64
ln -s libreadline.so.8 libreadline.so.7

2. 下载openGauss安装包

https://opengauss.obs.cn-south-1.myhuaweicloud.com/5.0.0/x86_openEuler/openGauss-5.0.0-openEuler-64bit-all.tar.gz

 下面这个要注意了,一定要下载5.1版本的,5.0版本的运维插件要自己安装。

 

 

3.创建用户并安装openGauss

3.1. 创建用户组dbgroup。

groupadd dbgroup

3.2. 创建用户组dbgroup下的普通用户omm,并设置普通用户omm的密码,密码建议设置为omm@123。

useradd -g dbgroup omm
passwd omm

 3.3. 使用omm用户登录到openGauss包安装的主机,解压openGauss压缩包到安装目录(假定安装目录为/opt/software/openGauss,请用实际值替换)。

# tar -jxf openGauss-x.x.x-操作系统-64bit.tar.bz2 -C /opt/software/openGauss
gzip -d openGauss-5.0.0-openEuler-64bit-all.tar.gz
tar -xvf openGauss-5.0.0-openEuler-64bit-all.tar -C /opt/software/openGauss/
tar -jxvf openGauss-5.0.0-openEuler-64bit.tar.bz2

3.4. 假定解压包的路径为/opt/software/openGauss,进入解压后目录下的simpleInstall。

cd /opt/software/openGauss/simpleInstall

3.5. 执行install.sh脚本安装openGauss。

# 修改目录权限后,切换到普通用户,否则会提示:Error: can not install openGauss with root
sh install.sh  -w omm@1234

上述命令中,-w是指初始化数据库密码(gs_initdb指定),安全需要必须设置。

centos7.8报sem不足:

sysctl -w kernel.sem="250 85000 250 330" 

3.6. 安装后会自动配置环境变量

vi /home/omm/.bashrc

# User specific aliases and functions
export GAUSSHOME=/opt/software/openGauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export GS_CLUSTER_NAME=dbCluster
ulimit -n 1000000

3.7. 安装执行完成后,使用ps和gs_ctl查看进程是否正常。

ps ux | grep gaussdb
gs_ctl query -D /opt/software/openGauss/data/single_node

 3.8. 执行ps命令,显示类似如下信息:

omm      24209 11.9  1.0 1852000 355816 pts/0  Sl   01:54   0:33 /opt/software/openGauss/bin/gaussdb -D /opt/software/openGauss/single_node
omm      20377  0.0  0.0 119880  1216 pts/0    S+   15:37   0:00 grep --color=auto gaussdb

3.9. 执行gs_ctl命令,显示类似如下信息:

gs_ctl query ,datadir is /opt/software/openGauss/data/single_node
HA state:local_role                     : Normalstatic_connections             : 0db_state                       : Normaldetail_information             : NormalSenders info:No informationReceiver info:
No information 

3.10. 执行安装脚本

[omm@olnode01 simpleInstall]$ sh install.sh  -w omm@1234
[step 1]: check parameter
[step 2]: check install env and os setting
install.sh: line 91: netstat: command not found
[step 3]: change_gausshome_owner
[step 4]: set environment variables/etc/profile.d/system-info.sh: line 26: bc: command not found
/etc/profile.d/system-info.sh: line 35: bc: command not found
/home/omm/.bashrc: line 11: ulimit: open files: cannot modify limit: Operation not permitted
[step 6]: init datanode
The files belonging to this database system will be owned by user "omm".
This user must also own the server process.The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".creating directory /opt/software/openGauss/data/single_node ... ok
creating subdirectories ... in ordinary occasionok
creating configuration files ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 1024MB
Begin init undo subsystem meta.
[INIT UNDO] Init undo subsystem meta successfully.
creating template1 database in /opt/software/openGauss/data/single_node/base/1 ... The core dump path is an invalid directory
2023-12-07 22:12:02.098 [unknown] [unknown] localhost 139730482409408 0[0:0#0]  [BACKEND] WARNING:  macAddr is 12/699528221, sysidentifier is 797105/4095585850, randomNum is 4069764666
ok
initializing pg_authid ... ok
setting password ... ok
initializing dependencies ... ok
loading PL/pgSQL server-side language ... ok
creating system views ... ok
creating performance views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
initialize global configure for bucketmap length ... ok
creating information schema ... ok
loading foreign-data wrapper for distfs access ... ok
loading foreign-data wrapper for log access ... ok
loading hstore extension ... ok
loading foreign-data wrapper for MOT access ... ok
loading security plugin ... ok
update system tables ... ok
creating snapshots catalog ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
freezing database template0 ... ok
freezing database template1 ... ok
freezing database postgres ... okWARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run gs_initdb.Success. You can now start the database server of single node using:gaussdb -D /opt/software/openGauss/data/single_node --single_node
orgs_ctl start -D /opt/software/openGauss/data/single_node -Z single_node -l logfile[step 7]: start datanode
.....ECUTOR] ACTION:  Please refer to backend log for more details.[2023-12-07 22:12:16.581][18900][][gs_ctl]:  done
[2023-12-07 22:12:16.581][18900][][gs_ctl]: server started (/opt/software/openGauss/data/single_node)
import sql file
Would you like to create a demo database (yes/no)? yes
Load demoDB [school,finance] success.
[complete successfully]: You can start or stop the database server using:gs_ctl start|stop|restart -D $GAUSSHOME/data/single_node -Z single_node

3.11. 设置opengauss开机启动

3.11.1. 写配置

vi /usr/lib/systemd/system/opengauss.service 
[Unit]
Description=openGauss    #当前服务的简单描述
Documentation=openGauss Server    #服务配置文件的位置
After=syslog.target    #在某服务之后启动
After=network.target [Service]
Type=forking    #ExecStart字段将以fork()方式启动,后台运行#服务运行的用户
User=omm
#服务运行的用户组
Group=omm Environment=PGDATA=/opt/software/openGauss/data
Environment=GAUSSHOME=/opt/software/openGauss
Environment=LD_LIBRARY_PATH=/opt/software/openGauss/lib#启动服务的命令,可以是可执行程序、系统命令或shell脚本,必须是绝对路径。
ExecStart=/opt/software/openGauss/bin/gs_ctl start -D /opt/software/openGauss/data/single_node #重启服务的命令,可以是可执行程序、系统命令或shell脚本,必须是绝对路径。
ExecReload=/opt/software/openGauss/bin/gs_ctl restart -D /opt/software/openGauss/data/single_node#停止服务的命令,可以是可执行程序、系统命令或shell脚本,必须是绝对路径。
ExecStop=/opt/software/openGauss/bin/gs_ctl stop -D /opt/software/openGauss/data/single_node#Systemd停止sshd服务方式 mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号
KillMode=mixedKillSignal=SIGINT
TimeoutSec=0[Install]
WantedBy=multi-user.target
[Unit]Description=openGaussDocumentation=openGauss ServerAfter=syslog.targetAfter=network.target[Service]Type=forkingUser=ommGroup=dbgroupEnvironment=PGDATA=/opt/software/openGauss/dataEnvironment=GAUSSHOME=/opt/software/openGaussEnvironment=LD_LIBRARY_PATH=/opt/software/openGauss/libExecStart=/opt/software/openGauss/bin/gs_ctl start -D /opt/software/openGauss/data/single_nodeExecReload=/opt/software/openGauss/bin/gs_ctl restart -D /opt/software/openGauss/data/single_nodeExecStop=/opt/software/openGauss/bin/gs_ctl stop -D /opt/software/openGauss/data/single_nodeKillMode=mixedKillSignal=SIGINTTimeoutSec=0[Install]WantedBy=multi-user.target

3.11.2. 配启动

#重新加载配置文件
systemctl daemon-reload #启用opengauss服务
systemctl enable opengauss#执行opengauss服务
systemctl start opengauss#查看opengauss服务的状态
systemctl status opengauss#停止openGauss服务
systemctl stop opengauss

3.12. 配置PG监听和连接权限

3.12.1. pg_hba.conf

3.12.1.1. 写配置

gs_guc set -D /opt/software/openGauss/data/single_node -h "host all all 0.0.0.0/0 sha256"
gs_guc set -D /opt/software/openGauss/data/single_node -h "host replication all 0.0.0.0/0 sha256"
3.12.1.2. 确认配置是否写入
[omm@hp400 single_node]$ cat pg_hba.conf|egrep -v "^#|^$"
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host all all 0.0.0.0/0 sha256
host    all             all             ::1/128                 trust
host replication all 0.0.0.0/0 sha256

3.12.2. postgresql.conf

3.12.2.1. 写配置
gs_guc set -D /opt/software/openGauss/data/single_node -c "listen_addresses = '*'"
gs_guc set -D /opt/software/openGauss/data/single_node -c "wal_level = logical"
3.12.2.2. 确认配置是否写入
[omm@hp400 single_node]$ egrep "listen_address|wal_level" postgresql.conf
listen_addresses = '*'    # what IP address(es) to listen on;
wal_level = logical      # minimal, archive, hot_standby or logical

3.13. 启动数据库

systemctl start opengauss

4. 连接数据库并创建datakit用户

4.1. 连接数据库

gsql -d postgres -p 5432 -r
openGauss=# \lList of databases
Name    | Owner | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+-------+----------+-------------+-------------+-------------------finance   | omm   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | postgres  | omm   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | school    | omm   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | template0 | omm   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/omm           +|       |          |             |             | omm=CTc/ommtemplate1 | omm   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/omm           +|       |          |             |             | omm=CTc/omm
(5 rows)

4.2. 创建数据库

4.2.1. datakit使用的数据库

create user datakit identified by 'datakit@1234';
grant all privilege to datakit;
-- alter user datakit sysadmin
create database datakit;

4.2.2. 待写入数据的数据库(mysql 2 pg)

create database world with dbcompatibility='b';

4.2.3. 连接目标数据库world

gsql -d world -p 5432 -r

5. 安装datakit

5.1. 创建目录

mkdir -p /opt/datakit/datakit5.1/{logs,config,ssl,files}

5.2. 解压文件到目录

tar -zxvf Datakit-5.1.0.tar.gz -C /opt/datakit/datakit5.1

5.3. 将配置文件application-temp.yml传至config下。

修改文件目录以及连接信息

url: jdbc:opengauss://ip:port/database?currentSchema=public
username: dbuser
password: dbpassword修改为:jdbc:opengauss://127.0.0.1:5432/datakitdb?currentSchema=public
username: datakit
password: datakit@1234 
system:# File storage pathdefaultStoragePath: /opt/datakit/datakit5.1/files# Whitelist control switchwhitelist:enabled: false
server:port: 9494ssl:key-store: /opt/datakit/datakit5.1/ssl/keystore.p12key-store-password: 123456key-store-type: PKCS12enabled: trueservlet:context-path: /
logging:file:path: /opt/datakit/datakit5.1/logs/
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: org.opengauss.Driverurl: jdbc:opengauss://127.0.0.1:5432/datakit?currentSchema=public&batchMode=offusername: datakitpassword: datakit@1234druid:test-while-idle: truetest-on-borrow: truevalidation-query: "select 1"validation-query-timeout: 10000connection-error-retry-attempts: 0break-after-acquire-failure: truemax-wait: 6000keep-alive: truemax-active: 30min-evictable-idle-time-millis: 600000
management:server:port: 9494

5.4. 生成证书

5.4.1. 生成ssl的java必须跟运行DataKit是一个java版本

密码要和上面的配置文件一致

keytool -genkey -noprompt \-dname "CN=opengauss, OU=opengauss, O=opengauss, L=Beijing, S=Beijing, C=CN"\-alias opengauss\-storetype PKCS12 \-keyalg RSA \-keysize 2048 \-keystore /opt/datakit/datakit5.1/ssl/keystore.p12 \-validity 3650 \-storepass 123456

5.5. 创建datakit运行用户并修改权限

useradd ops
chown -R ops:ops /opt/datakit

 5.6. 切换到ops用户启动

cd /opt/datakit/datakit5.1 && nohup java -Xms2048m -Xmx4096m -jar /opt/datakit/datakit5.1/openGauss-datakit-5.1.0.jar --spring.profiles.active=temp > /opt/datakit/datakit5.1/logs/datakit.out 2>&1 &

6. 准备mysql数据库

6.1. yum安装mysql

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-community-server --nogpgcheck

6.2. 启动mysql

systemctl start mysqld.service

6.3. 检查是否启动成功

systemctl status mysqld.service

 

6.4. 导入实例数据

6.4.1. 创建用户

[root@mysqldb log]# cat mysqld.log |grep pass
2023-12-24T13:10:12.643017Z 1 [Note] A temporary password is generated for root@localhost: j8T(quBRT.K2
[root@mysqldb mysqld]# mysql -uroot -p
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'datakit@1234';
Query OK, 0 rows affected (0.00 sec)

6.4.2. 下载样例数据库

wget https://downloads.mysql.com/docs/world-db.tar.gz

6.4.3. 导入

source /tmp/world-db/world.sql

 6.5. 创建远程登录用户

grant all on *.* to root@'%' identified by 'datakit@1234';

6.6. 配置binlog日志

tid_mode = ON
enforce_gtid_consistency = ON
character_set_server = UTF8MB4
server-id = 170
log-bin=on
log_bin_basename=/var/lib/mysql/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index

 6.7. 安装java

yum install -y java-11-openjdk.x86_64  ava-11-openjdk-devel.x86_64  java-11-openjdk-headless.x86_64  java-11-openjdk-devel.x86_64

7. datakit修改密码 

默认登陆账号密码:admin/admin123

 

https://cloud.tencent.com/developer/article/2368209

8. 创建主机和实例

8.1. 创建主机

 

 

8.2. 给主机创建一个普通用户(操作PG数据库)

 

 8.3. 创建mysql实例

 

 8.4. 创建openGauss实例

 8.5. 创建后如下

 

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

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

相关文章

CSS基础选择器 小案例复习(画三个小盒子)

(大家好,前面我们学习了基础的选择器,俗话说:温故而知新。所以今天我们将通过小案例来复习前面学过的小知识点。另,十分感谢大家对我文章的支持❤️) 通过这个案例复习两个地方: 类选择器的使用…

基于ZooKeeper的Kafka分布式集群搭建与集群启动停止Shell脚本

下载Kafka压缩包 下方是Kafka官网下载地址,本文使用Kafka 3.0.0在虚拟机环境中搭建分布式集群。 Apache Kafka Downloads link 虽然在Kafka 2.8.0之后可以使用KRaft模式搭建高可用的集群以提高数据处理效率,但是目前还有许多企业依然使用ZooKeeper搭建K…

uni-app如何实现高性能

这篇文章主要讲解uni-app如何实现高性能的问题? 什么是uni-app? 简单说一下什么是uni-app,uni-app是继承自vue.js,对vue做了轻度定制,并且实现了完整的组件化开发,并且支持多端发布的一种架构&#xff0c…

申请SSL证书

有很多方法可以确保您的网站安全。添加SSL证书可针对恶意攻击提供额外且关键的保护层。 即使网站不接受交易,您仍然需要保护用户的登录详细信息、地址和其他个人信息。 没有SSL证书的网站使用HTTP(一种基于文本的协议),这意味着…

红队攻防之PowerShell基础免杀(二)

Get busy living or get busy dying 什么是图片免杀? 答:一般情况下,某些 AV 对图像未执行检测处理。这种情况下,它们可以仅使用有效负载数据来生成新图像,或将有效负载嵌入到现有图像的最低有效字节中,使…

泰坦尼克号幸存者数据分析

泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者? 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一,造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…

linux基础8:文件系统

linux基础8:文件系统 1.物理存储->逻辑存储:1.从磁盘到分区:1.基本物理结构2.物理存储结构3.逻辑结构4.操作系统的Io需求:5.分区操作and分组操作: 2.文件系统结构:1.基本结构:2.分组区块&…

【cpp】快速排序优化

标题:【cpp】快速排序 水墨不写bug 正文开始: 快速排序的局限性: 虽然快速排序是一种高效的排序算法,但也存在一些局限性: 最坏情况下的时间复杂度:如果选择的基准元素不合适,或者数组中存在大…

插入代码---四

文章目录 在空白节插入代码构造恶意代码计算函数相对地址修改入口地址返回原地址 扩大节新增节 对与一个程序我们需要在里面添加自己的功能,让程序增加一些我们的函数,那么我们就需要了解PE文件结构,然后对其进行修改,这里我们将基…

位运算-191. 位1的个数- 136. 只出现一次的数字

位1的个数 已解答 简单 相关标签 相关企业 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。 示例 1: 输入:n 11 输…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的:makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb,数据库中创建表t_location_count表,表中设置两个…

能耗监测管理系统与技术方案

能耗监测管理系统是目前能源管理中重要的技术手段,它通过集成现代监测技术和信息技术,实现对能源消耗的实时监控、数据分析和决策支持,帮助企业或机构实现能源的高效管理和节能降耗。本篇文章将从能耗监测管理系统的组成、关键技术、应用领域…

ubuntu-server部署hive-part1-安装jdk

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 安装jdk 上传解压 以root用户,将jdk上传至/opt目录下 tar zxvf jdk-8u271-linux-x64.tar.gz 配置环境变量…

嵌入式Qt QGridLayout网格布局管理器

一.QGridLayout网格布局管理器 //以行为单位 设置比例系数 void QGridLayout::setRowStretch ( int row, int stretch ) //以列为单位 设置比例系数 void QGridLayout::setColumnStretch ( int column, int stretch ) 实验: Widget.h: #ifndef _WIDGE…

Redis安装说明

Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:https://redis.io/ 1.单机安装Redis 1.1.…

2024.4.3-[作业记录]-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

【css】使用display:inline-block后,元素间存在4px的间隔

问题:在本地项目中使用【display: inline-block】,元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题,英文有空格作为词分界,而中文则没有。 此时的元素具有文本属性,只要标签…

电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术

文章目录 引言一、关键词策略1.1 关键词研究与选择1. 确定目标受众2. 使用关键词研究工具3. 分析搜索量和竞争程度4. 考虑长尾关键词5. 关键词的商业意图6. 创建关键词列表7. 持续监控和调整 1.2 关键词布局与密度1. 关键词自然分布2. 标题标签的使用3. 首次段落的重要性4. 关键…

Linux第4课 Linux的基本操作

文章目录 Linux第4课 Linux的基本操作一、图形界面介绍二、终端界面介绍 Linux第4课 Linux的基本操作 一、图形界面介绍 本节以Ubuntu系统的GUI为例进行说明,Linux其他版本可自行网搜。 图形系统进入后,左侧黄框内为菜单栏,右侧为桌面&…

C++进阶--C++11(2)

C11第一篇 C11是C编程语言的一个版本,于2011年发布。C11引入了许多新特性,为C语言提供了更强大和更现代化的编程能力。 可变参数模板 在C11中,可变参数模板可以定义接受任意数量和类型参数的函数模板或类模板。它可以表示0到任意个数&…