• [技术干货] 集群容灾
    (1)内核日志 缺省情况下,内核日志仅记录警告及以上级别的消息。Roach工具支持的日志级别,默认只有ERROR和Warning级别日志。执行命令可开启INFO级别日志,--logging –logging-level INFO 如果备份或恢复操作失败,可查看控制台中显示的错误汇总,识别发生错误的主机。 (2)系统日志 Linux记录系统事件至系统日志中。Roach工具将FATAL及ERROR消息记入相同的系统日志文件。例如,在运行SUSE Linux操作系统的设备上,Roach写日志到/var/log/messages文件。 (3)安全日志 用户可以保存所有活动信息到文件中。安全日志文件包括时间戳,以及备份,恢复和生成文件的详细信息。安全日志文件的文件名称格式如下:roach-agentsecurity-YYYY-MM-DD_HHMMSS.log。 (4)控制器日志 控制器日志为python脚本运行日志,用户可以保存控制器日志信息到文件中。 控制器日志文件的格式如下:roach-controller-YYYY-MMDD_HHMMSS.log。例如:roach-controller-2015-12-15_203415.log 遇到故障时,结合打屏信息和相应位置的日志文件,可以快速定位到出错位置,提高解决问题效率。
  • [技术干货] 鲲鹏ARM架构下OpenGauss未来展望
    随着国产化替代浪潮的推进,鲲鹏处理器作为自主研发的高性能架构,与开源数据库 OpenGauss 的组合已成为企业级应用的核心选择。OpenGauss 作为华为主导的分布式关系型数据库,天然适配鲲鹏架构的 ARM 指令集,在性能优化、安全特性、高可用设计上深度协同。本文将从架构适配原理出发,详细讲解 OpenGauss 在鲲鹏环境下的部署流程、性能调优技巧及生产环境实践经验,助力企业快速落地国产化数据库方案。一、架构适配:为什么 OpenGauss + 鲲鹏是黄金组合?1.1 指令集深度协同鲲鹏处理器基于 ARM v8 架构,采用精简指令集(RISC)设计,具备低功耗、高并发、多核优势;而 OpenGauss 从内核层面针对 ARM 架构进行了指令优化,包括:汇编级指令替换:将热点函数(如数据加密、哈希计算)用 ARM Neon 指令重写,提升计算效率;内存访问优化:适配鲲鹏的三级缓存架构,优化数据预取策略,减少缓存命中率低的问题;多核调度适配:针对鲲鹏处理器的多 NUMA 节点设计,优化线程亲和性,避免跨节点调度开销。1.2 国产化生态闭环OpenGauss 作为开源国产数据库,与鲲鹏架构、欧拉(openEuler)操作系统共同构成 "芯片 - 操作系统 - 数据库" 的国产化生态闭环。该组合通过了严格的兼容性测试,在政务、金融、能源等关键领域已大规模落地,具备完善的技术支持和生态保障。1.3 核心优势互补特性鲲鹏架构贡献OpenGauss 数据库贡献性能多核高并发、硬件加速(如 AES)分布式架构、查询优化器、列存引擎安全硬件级可信执行环境(TEE)透明加密、访问控制、审计日志高可用双路 / 四路服务器冗余设计主备复制、故障自动切换、数据备份扩展性支持 CPU 扩展至 128 核以上水平分库分表、分布式事务  二、部署前准备:环境规划与依赖检查2.1 硬件环境要求(生产级配置)组件最低配置推荐配置CPU鲲鹏 920 2.6GHz(8 核 16 线程)鲲鹏 920 2.6GHz(32 核 64 线程)内存32GB(主备模式)128GB(分布式模式)存储SSD 500GB(系统盘)+ HDD 2TB(数据盘)NVMe SSD 1TB(系统盘)+ SAS 10TB(数据盘,RAID 5)网络千兆以太网25Gbps InfiniBand(分布式集群)操作系统openEuler 22.03 LTS(ARM64)openEuler 22.03 LTS(ARM64)  2.2 软件依赖安装OpenGauss 依赖以下组件,需提前在鲲鹏服务器上安装:  # 1. 安装基础依赖包yum install -y gcc gcc-c++ make cmake zlib-devel libffi-devel openssl-devel libuuid-devel# 2. 安装Python 3.8+(OpenGauss管理工具依赖)yum install -y python3 python3-devel python3-pip# 3. 安装libatomic(ARM架构必需,原子操作支持)yum install -y libatomic# 4. 关闭防火墙和SELinux(生产环境可配置白名单)systemctl stop firewalld && systemctl disable firewalldsed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configsetenforce 0   2.3 系统参数优化(关键步骤)为适配 OpenGauss 的运行需求,需调整鲲鹏服务器的系统参数,编辑/etc/sysctl.conf:  # 编辑系统参数配置文件vim /etc/sysctl.conf# 添加以下配置(针对鲲鹏ARM架构优化)net.ipv4.tcp_max_tw_buckets = 10000net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_syncookies = 1net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535vm.swappiness = 10 # 减少内存交换,提升性能vm.dirty_ratio = 30vm.dirty_background_ratio = 10kernel.shmmax = 68719476736 # 共享内存最大值(建议为物理内存的50%)kernel.shmall = 16777216# 生效配置sysctl -p 同时调整文件描述符限制,编辑/etc/security/limits.conf:  # 添加以下配置* soft nofile 65535* hard nofile 65535* soft nproc 131072* hard nproc 131072 三、OpenGauss 部署:主备模式实战(鲲鹏环境)OpenGauss 支持单机、主备、分布式三种部署模式,本文以生产常用的主备模式为例,讲解在两台鲲鹏服务器上的部署流程(主节点:192.168.1.10,备节点:192.168.1.11)。3.1 下载 OpenGauss 安装包从 OpenGauss 官网下载适配 ARM 架构的安装包(选择 openEuler ARM64 版本):  # 创建安装目录mkdir -p /opt/opengauss && cd /opt/opengauss# 下载安装包(示例版本:3.1.0,需替换为最新版本)wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.0/x86_openEuler_64bit/opengauss-3.1.0-openEuler-64bit.tar.bz2# 解压安装包tar -jxvf opengauss-3.1.0-openEuler-64bit.tar.bz2   3.2 配置免密登录(主备节点互信)主备节点需实现 SSH 免密登录,确保安装脚本可跨节点执行:  # 在主节点生成密钥对(无需设置密码)ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa# 将公钥拷贝到备节点ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.11# 验证免密登录(无需输入密码即可登录)ssh root@192.168.1.11 3.3 编写部署配置文件创建cluster_config.xml配置文件,定义主备节点信息:  <?xml version="1.0" encoding="UTF-8"?><ROOT> <!-- 全局配置 --> <CLUSTER> <PARAM name="clusterName" value="opengauss_cluster"/> <PARAM name="nodeNames" value="node1,node2"/> <PARAM name="gaussdbAppPath" value="/opt/opengauss/app"/> <PARAM name="gaussdbDataPath" value="/opt/opengauss/data"/> <PARAM name="gaussdbLogPath" value="/opt/opengauss/log"/> <PARAM name="dataBasePort" value="5432"/> <PARAM name="masterNode" value="node1"/> </CLUSTER> <!-- 主节点配置 --> <NODE name="node1" hostname="192.168.1.10" ip="192.168.1.10" azName="AZ1" azPriority="1"/> <!-- 备节点配置 --> <NODE name="node2" hostname="192.168.1.11" ip="192.168.1.11" azName="AZ1" azPriority="2"/></ROOT>   3.4 执行安装脚本  # 进入安装目录cd /opt/opengauss/opengauss-3.1.0-openEuler-64bit# 执行安装脚本(--help可查看参数说明)./install.sh -m primary -c ../cluster_config.xml -w 'OpenGauss@123'# 安装成功后,验证集群状态gs_om -t status --detail 3.5 安装验证  # 登录OpenGauss数据库gsql -d postgres -U gaussdb -h 192.168.1.10 -p 5432# 执行SQL查询,验证数据库状态SELECT version();SELECT node_name, node_role, node_state FROM pg_stat_replication; 若查询结果显示主备节点状态为Primary和Standby,且 replication 状态正常,则部署成功。四、性能调优:鲲鹏架构专属优化技巧4.1 数据库参数优化(postgresql.conf)针对鲲鹏处理器的多核、大内存特性,调整以下关键参数:  # 编辑配置文件(主备节点需同步修改)vim /opt/opengauss/data/postgresql.conf# 核心优化参数max_connections = 8192 # 最大连接数(鲲鹏多核可支持更高并发)shared_buffers = 32GB # 共享内存(建议为物理内存的25%)work_mem = 64MB # 每个工作线程的内存(根据并发调整)maintenance_work_mem = 2GB # 维护操作内存(如索引创建)effective_cache_size = 96GB # 有效缓存大小(建议为物理内存的75%)wal_buffers = 16MB # WAL日志缓冲区checkpoint_completion_target = 0.9 # checkpoint完成目标(减少IO峰值)max_parallel_workers_per_gather = 8 # 每个查询的并行工作线程数(建议为CPU核心数的1/4)parallel_leader_participation = on # 领导者参与并行查询# 生效配置(无需重启数据库)gs_ctl reload -D /opt/opengauss/data 4.2 存储优化(针对鲲鹏服务器存储架构)使用 NVMe SSD 作为数据盘:鲲鹏服务器支持 PCIe 4.0 接口,NVMe SSD 可发挥最大 IO 性能,建议将数据目录和 WAL 目录分别挂载到不同的 NVMe SSD;关闭磁盘缓存刷新:在 RAID 卡配置中启用 "写缓存策略"(Write Back),提升写性能;文件系统选择:推荐使用 XFS 文件系统,格式化时指定-s size=4096(与鲲鹏处理器的内存页大小对齐)。4.3 网络优化(分布式集群场景)启用 RSS 中断均衡:鲲鹏服务器支持 RSS(接收端缩放),可将网络中断分散到多个 CPU 核心:  # 启用RSSethtool -C eth0 rx-usecs 100ethtool -K eth0 rxvlan on 调整 TCP 参数:优化网络连接稳定性和吞吐量(已在部署前配置);使用 InfiniBand 网络:分布式集群建议采用 25Gbps 以上的 InfiniBand 网络,降低节点间通信延迟。4.4 性能测试验证使用gs_perf工具测试优化后的性能(对比优化前后的 TPCC、TPC-H 指标):  # 执行TPCC测试(1000仓库规模)gs_perf -M tpcc -D testdb -U gaussdb -w 'OpenGauss@123' -s 1000 -c 64# 执行TPC-H测试(100GB数据量)gs_perf -M tpch -D testdb -U gaussdb -w 'OpenGauss@123' -s 100 -c 32 在鲲鹏 920 32 核服务器上,优化后 OpenGauss 的 TPCC 吞吐量可提升 30% 以上,TPC-H 查询延迟降低 20% 左右。五、生产环境实践:高可用与运维最佳实践5.1 主备切换实战OpenGauss 支持自动故障切换,也可手动触发切换:  # 手动切换主备节点(在备节点执行)gs_ctl switchover -D /opt/opengauss/data# 切换后验证状态gs_om -t status --detail 5.2 数据备份与恢复  # 全量备份gs_basebackup -D /opt/opengauss/backup -h 192.168.1.10 -p 5432 -U gaussdb -F p -X stream -P -v# 恢复数据(需停止数据库)gs_ctl stop -D /opt/opengauss/datarm -rf /opt/opengauss/data/*gs_basebackup -D /opt/opengauss/data -h 192.168.1.10 -p 5432 -U gaussdb -F p -X stream -P -v -Cgs_ctl start -D /opt/opengauss/data   5.3 监控告警配置启用内置监控工具:OpenGauss 提供gs_monitor工具,可监控数据库状态、性能指标:  gs_monitor -d postgres -U gaussdb -h 192.168.1.10 -p 5432 -w 'OpenGauss@123' -t 30 集成 Prometheus+Grafana:通过 OpenGauss 的导出器(exporter)将指标接入监控系统,配置 CPU、内存、IO、连接数等告警阈值。5.4 安全加固修改默认密码:生产环境需定期更换数据库管理员密码,复杂度需满足大小写字母 + 数字 + 特殊字符;配置访问控制:通过pg_hba.conf限制允许访问的 IP 地址:  vim /opt/opengauss/data/pg_hba.conf# 添加白名单配置host all all 192.168.1.0/24 md5 启用透明加密:OpenGauss 支持数据文件透明加密,需在部署时指定加密密钥。六、常见问题与排查方案6.1 安装失败:libatomic.so.1 缺失问题原因:鲲鹏 ARM 架构缺少原子操作库。解决方案:  yum install -y libatomicln -s /usr/lib64/libatomic.so.1 /usr/lib/libatomic.so.1 6.2 主备同步失败: replication 连接超时问题原因:防火墙未开放 5432 端口,或网络延迟过高。解决方案:  # 开放端口(生产环境建议配置白名单)firewall-cmd --add-port=5432/tcp --permanentfirewall-cmd --reload# 检查网络延迟ping 192.168.1.11 -c 10traceroute 192.168.1.11 6.3 性能瓶颈:CPU 使用率过高问题原因:SQL 语句未优化,或并行查询参数配置不合理。解决方案:用gs_top查看占用 CPU 较高的会话和 SQL;优化 SQL 语句(添加索引、调整 join 方式);降低max_parallel_workers_per_gather参数,避免并行查询占用过多 CPU。七、展望OpenGauss 在鲲鹏架构下的部署与优化,核心在于架构协同和参数适配。通过本文的部署流程、优化技巧和实践经验,企业可快速搭建稳定、高性能的国产化数据库环境。随着 OpenGauss 4.0 版本的发布,其在分布式事务、HTAP 混合负载、AI 优化等方面的能力将进一步增强,与鲲鹏架构的协同效应也将更加显著。在国产化替代的大趋势下,掌握 OpenGauss + 鲲鹏的组合技术,不仅能提升企业 IT 架构的自主可控性,还能获得性能与成本的双重优势。建议运维和 DBA 人员深入理解两者的架构特性,结合业务场景进行针对性优化,充分发挥国产化软硬件的潜力。
  • [问题求助] 商城应用当订单数量非常多的时候,有什么方法能快速检索到某个人的所有订单?
    商城应用当订单数量非常多的时候,有什么方法能快速检索到某个人的所有订单?
  • [技术干货] 还在纠结云部署和本地部署有啥区别?这份指南帮你快速决策
    二者在成本结构上,云部署初始成本低、按需付费,但长期可能费用累积;本地部署初始投入高、运维负担重,长期单位成本或更低。数据安全方面,云部署依赖服务商专业防护,合规便利却有潜在交叉访问风险;本地部署能自主掌控安全边界,却需应对内部管理漏洞。运维管理上,云部署自动化便捷但难适配特殊流程,本地部署高度定制却运维复杂。 云部署和本地部署有啥区别? 一、成本结构:短期支出与长期投入的博弈云部署:轻资产运营模式初始成本低:无需采购服务器、存储设备等硬件,初期投入可降低80%以上。按需付费:根据业务需求灵活调整资源,避免资源闲置浪费。隐性成本减少:云服务商负责硬件维护、系统升级和电力消耗,企业无需承担相关费用。潜在风险:随着业务规模扩大,订阅费用可能累积超过本地部署的总拥有成本(TCO)。本地部署:重资产投入路径初始投入高:需一次性投入数十万至数百万用于硬件采购、机房搭建及网络配置。持续运维负担:年均维护成本约占初始投入的20%-30%,且需专职IT团队支持。长期优势:对于稳定运行5年以上的系统,单位成本随时间推移逐渐低于云部署。二、数据安全与合规:控制权与专业能力的权衡云部署:依赖服务商的安全体系专业防护:主流云厂商提供AES-256加密、多地容灾备份及三级等保合规支持,数据可靠性达99.99%。合规便利性:自动满足GDPR、等保2.0等法规要求,减少企业合规人力投入。潜在顾虑:数据存储于第三方平台,存在理论交叉访问风险;部分行业受法规限制需谨慎选择。本地部署:自主掌控的安全边界物理隔离优势:数据完全存储于企业内部服务器,通过自定义防火墙和物理隔离网络实现零外部暴露。主权明确性:避免第三方介入风险,尤其适合金融、医疗等强监管行业。内部挑战:约60%的数据泄露源于内部管理漏洞,需企业自行承担安全责任。三、运维管理:自动化便捷性与定制化需求的冲突云部署:自动化运维提升效率快速响应:资源申请到上线仅需数小时,支持弹性伸缩应对流量高峰。集中管控:通过Web界面统一管理多地域资源,自动完成系统升级与故障替换。局限性:标准化服务难以适配特殊业务流程,网络中断可能导致业务停摆。本地部署:高度定制但运维复杂深度集成:支持与ERP、OA等现有系统无缝对接,适应制造业生产控制、政府涉密网络等场景。离线可用:不依赖互联网,保障金融交易、实时数据采集等业务的连续性。运维挑战:需自建技术团队处理硬件巡检、软件更新及故障排查,人力成本居高不下。决策框架:四步锁定最佳方案第一步:业务特性分析评估业务的数据敏感性、合规要求、流量特征预测未来1-3年的业务增长轨迹和可能的波动性第二步:技术能力评估客观分析现有技术团队的技能结构和人员规模评估企业在安全、运维方面的投入意愿和能力第三步:财务模型测算计算3-5年总体拥有成本,而不仅仅是初期投入评估企业的现金流状况和投资偏好第四步:混合模式考量对于大多数中型以上企业,混合架构正在成为新标准:将核心敏感系统保留在本地,将面向互联网的波动性业务部署在云端。这种模式既保障了关键数据的控制权,又获得了云端的弹性优势。小库主机小编温馨提示:云部署与本地部署并非非此即彼的单选题,而是各有优劣的技术路径。明智的决策者应该超越概念争论,基于企业具体的业务需求、技术实力和财务现状,选择最适合的技术路线。在这个技术快速演进的时代,保持架构的灵活性和决策的开放性,比做出一个"完美"选择更加重要。 最适合的部署方案,就是最能支持业务创新和发展的方案。
  • openGauss之用户和角色
    openGauss概述openGauss是关系型数据库,采用客户端/服务器,单进程多线程架构;支持单机和一主多备部署方式,同时支持备机可读、双机高可用等特性。openGauss有如下基本功能:1、支持标准SQLopenGauss数据库支持标准的SQL(Structured Query Language,结构化查询语言)。SQL标准是一个国际性的标准,定期会进行更新和演进。SQL标准的定义分成核心特性以及可选特性,绝大部分的数据库都没有100%支撑SQL标准。openGauss数据库支持SQL92/SQL99/SQL2003等,同时支持SQL2011大部分的核心特性,另外还支持部分的可选特性。2、支持标准开发接口openGauss数据库提供业界标准的ODBC(Open Database Connectivity,开放式数据库连接)及JDBC(Java Database Connectivity,java数据库连接)接口,保证用户能将业务快速迁移至openGauss。目前支持标准的ODBC3.5及JDBC4.0接口,其中ODBC能够支持CentOS、openEuler、SUSE、Win32、Win64等平台,JDBC无平台差异。3、混合存储引擎支持openGauss数据库支持行存储引擎、列存储引擎和内存存储引擎等。行存分为“inplace update” 和 “append update”两种模式,前者通过单独的回滚段(undo log)来保留元组的前像以解决读写冲突,可以更自然的支持数据更新;后者将更新记录混杂在数据记录中,通过新旧版本的形式来支持数据更新,对于旧版本需要定期做vacuum操作来支持磁盘空间的回收。列存支持数据快速分析,更适合OLAP(Online Analytical Processing,联机分析处理)业务。内存引擎支持实时数据处理,对有极致性能要求的业务提供支撑。4、事务支持事务支持指的就是系统提供事务的能力,openGauss支持事务的原子性、一致性、隔离性和持久性。事务支持及数据一致性保证是绝大多数数据库的基本功能,只有支持了事务,才能满足事务化的应用需求。用户和角色管理是数据库管理系统中的重要功能,用于管理数据库中的用户和角色,以控制对数据库的访问权限。用户是数据库中的实体,用于标识和管理数据库中的各种操作权限和资源使用权限。而角色是一组权限的集合,可以将一组用户分配到同一个角色上,从而简化权限管理和控制。在openGauss数据库中,用户和角色管理可以通过SQL语句或者openGauss控制台来完成。通过创建、修改、删除用户和角色,可以控制用户的身份验证和访问权限。用户 使用数据库系统服务的个体  职责单一,往往附属于某个组织或部门用户可以做什么  使用工具连接数据库  访问数据库对象  执行SQL语句角色 角色是一组用户的集合,按照数据库系统中承担的责任划分具有不同权限的角色;角色用来作 为权限集合的载体。 ⚫ openGauss 提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默 认拥有PUBLIC所拥有的权限。 ⚫ 要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字 PUBLIC实现。用户与角色⚫ 用户是实体,角色是行为。 ⚫ 用户可被赋予一个或多个角色。⚫ 角色是一种权限集合,不应该具有登录数据库并执行SQL的能力。 ⚫ 对用户权限的管理,可以简化为对角色权限的管理。 ⚫ 在openGauss中,用户和角色使用相同的操作方式与维护方式。实际使用中的选择在OpenGauss中,CREATE USER更常用于以下场景:需要创建实际登录数据库的账号时为应用程序或个人用户创建账户时而CREATE ROLE通常用于:创建权限组(如read_only_role, write_role等)实现权限继承和组合作为模板角色语法CREATE USER name [ [ WITH ] option [ ... ] ] 这里 option 可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid修改角色/用户ALTER USER role_specification [ WITH ] option [ ... ] 其中 option 可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' ALTER USER name RENAME TO new_name ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT } ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL删除角色/用户DROP USER [ IF EXISTS ] name [, ...]查询类操作:  openGauss的用户、角色属性维护在pg_authid系统表中,pg_user、pg_roles视图也可以查询 用户、角色信息。  使用\d命令查看pg_authid表详细信息。  使用select命令查询pg_authid中的相关信息。角色属性角色可以拥有属性,属性确定了角色拥有的特权,并且在登录时与客户端认证系统进行交互。常见的角色属性包括:• 登录特权,只有具有 LOGIN 属性的角色才能连接数据库。具有 LOGIN 角色的用户可以被看作一个“数据库用户”。使用以下语句创建具有登录特权的角色:CREATE ROLE name LOGIN;CREATE USER name;CREATE USER 与 CREATE ROLE 都可以用于创建角色,只不过 CREATE USER 默认包含了 LOGIN 选项,而 CREATE ROLE 没有。• 超级用户,数据的超级用户可以避开所有的权限检查,只验证登录权限。因此,这是一个很危险的特权,使用时需要特别小心;最好在日常的操作中避免使用超级用户。使用以下命令创建一个新的超级用户:CREATE ROLE name SUPERUSER;只有超级用户才能创建其他的超级用户。• 创建数据库,只有明确授权的角色才能够创建数据库(超级用户除外,因为他们可以避开权限检查)。使用以下语句创建一个具有数据库创建特权的角色:CREATE ROLE name CREATEDB;• 创建角色,只有明确授权的角色才能够创建其他角色(超级用户除外,因为他们可以避开权限检查)。使用以下命令创建一个具有角色创建特权的角色:CREATE ROLE name CREATEROLE;具有 CREATEROLE 特权的角色还可以修改或删除其他角色,以及为这些角色授予或者撤销成员角色。但是,针对超级用户的创建、修改、删除,以及它的成员变更,需要超级用户特权;CREATEROLE 特权无法针对超级用户执行这些操作。• 启动复制,只有明确授权的角色才能够启动流复制(超级用户除外,因为他们可以避开权限检查)。用于流复制的角色还需要拥有 LOGIN 特权。使用以下语句创建可以用于流复制的角色:CREATE ROLE name REPLICATION LOGIN;• 密码,只有当用户连接数据库使用的客户端认证方法要求提供密码时,密码属性才有意义。password 和 md5 认证方法需要使用密码。数据库的密码与操作系统的密码相互独立。使用以下语句在创建角色时指定密码:CREATE ROLE name PASSWORD 'string';我们在创建角色时,可以根据需要指定某些属性。例如,以下命令创建一个具有登录特权的角色 tony,并且为它指定了密码以及密码过期时间:CREATE ROLE tony WITH LOGIN PASSWORD 'Pass2019' VALID UNTIL '2020-01-01';-- CREATE USER tony WITH PASSWORD 'Pass2019' VALID UNTIL '2020-01-01';使用该用户连接到 postgres 数据库:[root@centos7 ~]# psql -h 192.168.56.103 -p 5432 -U tony postgresPassword for user tony:psql (14.2)Type "help" for help.postgres=> \cYou are now connected to database "postgres" AS user "tony".psql 命令行工具支持许多选项,-h 表示数据库服务器的地址,-p 表示服务的监听端口,-U表示登录使用的用户名,最后的 postgres 代表要连接的数据库。详细的命令行参数可以使用 psql--help 查看。以下命令创建一个管理角色 admin,它具有创建数据库和创建角色的特权:opengauss=# CREATE ROLE admin CREATEDB CREATEROLE; CREATE ROLE在实践中,最好创建一个拥有 CREATEDB 和 CREATEROLE 特权,但不具有超级用户特权的管理角色,然后使用该角色执行日常的数据库和角色的管理。这种方式可以避免过度使用超级用户可能带来的风险。一个角色被创建之后,可以通过 ALTER ROLE 语句修改它的属性。例如,以下命令可以撤销角色 admin 创建角色的特权:opengauss=# ALTER ROLE admin NOCREATEROLE; ALTER ROLE2.3 对象授权当我们使用新创建的用户(tony)连接数据库(hrdb)之后,执行以下查询语句:hrdb=> SELECT * FROM employees; ERROR: permission denied for table employees以上语句执行错误是因为用户没有相应对象上的访问权限。opengauss使 GRANT 语句进行数据库对象的授权操作。以表为例,基本的授权语法如下:GRANT privilege_list | ALL ON [ TABLE ] table_name TO role_name;其中,privilege_list 权限列表可以是 SELECT、INSERT、UPDATE、DELETE、TRUNCATE等,ALL 表示表上的所有权限。例如,使用 gauss用户连接 hrdb 数据库后执行以下语句:hrdb=# GRANT SELECT, INSERT, UPDATE, DELETE hrdb-# ON employees, departments, jobs hrdb-# TO tony;GRANT该语句将 employees、departments 和 jobs 表上的增删改查权限授予了 tony 用户。此时 tony用户就可以访问这些表中的数据:hrdb=> SELECT first_name, last_name FROM employees;对表进行授权的 GRANT 语句还支持一些其他选项:GRANT privilege_list | ALL ON ALL TABLES IN SCHEMA schema_name TO role_name;ALL TABLES IN SCHEMA 表示某个模式中的所有表,可以方便批量授权操作。例如:hrdb=# GRANT SELECT hrdb-# ON ALL TABLES IN SCHEMA public hrdb-# TO tony;GRANT该语句将 public 模式中所有表的查询权限授予 tony 用户。我们也可以在 GRANT 语句的最后指定一个 WITH GRANT OPTION,意味着被授权的角色可以将该权限授权其他角色。例如:hrdb=# GRANT SELECT, INSERT, UPDATE, DELETE hrdb-# ON employees, departments, jobs hrdb-# TO tony WITH GRANT OPTION;此时,tony 用户不但拥有这些表上的访问权限,还可以将这些权限授予其他角色。除了授权表的访问权限之外,GRANT 语句还支持字段、视图、序列、数据库、函数、过程、模式等对象的授权操作。2.4 撤销授权与授权操作相反的就是撤销权限,opengauss使 REVOKE 语句撤销数据库对象上的权限。同样以表为例,基本的撤销授权语句如下:REVOKE privilege_list | ALL ON TABLE table_name FROM role_name;其中的参数和 GRANT 语句一致。例如:hrdb=# REVOKE SELECT, INSERT, UPDATE, DELETE hrdb-# ON employees, departments, jobs hrdb-# FROM tony;REVOKE该语句撤销了用户 tony 访问 employees、departments 以及 jobs 表的权限。REVOKE 语句也支持对某个模式中的所有对象进行操作:REVOKE privilege_list | ALL ON ALL TABLES IN SCHEMA schema_name FROM role_name;例如以下语句撤销了用户 tony 在 public 模式中所有表上的查询权限:hrdb=# REVOKE SELECT hrdb-# ON ALL TABLES IN SCHEMA public hrdb-# FROM tony;REVOKE与 GRANT 语句对应,REVOKE 语句还支持字段、视图、序列、数据库、函数、过程、模式等对象的撤销授权操作。2.5 角色成员在现实的环境中,管理员通常需要管理大量的用户和对象权限。为了便于权限管理,减少复杂度,可以将用户进行分组,然后以组为单位进行权限的授予和撤销操作。为此,opengauss引入了组(group)角色的概念。具体来说,就是创建一个代表组的角色,然后将该组的成员资格授予其他用户,让其成为该组的成员。首先,使用以下创建一个组角色:CREATE ROLE group_name;按照习惯,组角色通常不具有 LOGIN 特权,也就是不能作为一个用户登录。例如,我们可以先创建一个组 managers:CREATE ROLE managers;然后,使用与对象授权操作相同的 GRANT 和 REVOKE 语句为组添加和删除成员:GRANT group_name TO user_role, ... ; REVOKE group_name FROM user_role, ... ;我们将用户 tony 添加为组 managers 的成员:opengauss=# GRANT managers TO tony; GRANT ROLE最后一行输出显示了成员角色(tony)所属的组(managers)。也可以将一个组添加为其他组的成员,因为组角色和非组角色并没有什么本质区别。opengauss=# GRANT admin TO managers; GRANT ROLE另外,opengauss不允许设置循环的成员关系,也就是两个角色互相为对方的成员。opengauss=# GRANT managers TO admin; ERROR: role "managers" is a member of role "admin"最后,不能将特殊角色 PUBLIC 设置为任何组的成员。组角色中的成员可以通过以下方式使用该组拥有的特权:• 首先,组中的成员可以通过 SET ROLE 命令将自己的角色临时性“变成”该组角色。此时,当前数据库会话拥有该组角色的权限,而不是登录用户的权限;并且会话创建的任何数据库对象归组角色所有,而不是登录用户所有。• 其次,对于具有 INHERIT 属性的角色,将会自动继承它所属的组的全部特权,包括这些组通过继承获得的特权。考虑以下示例:CREATE ROLE user1 LOGIN INHERIT; CREATE ROLE net_admins NOINHERIT; CREATE ROLE sys_admins NOINHERIT; GRANT net_admins TO user1; GRANT sys_admins TO net_admins;使用角色 user1 登录之后,数据库会话将会拥有 user1 自身的特权和 net_admins 所有的特权,因为 user1“继承”了 net_admins 的特权。但是,会话还不具有 sys_admins 所有的特权,因为即使user1 间接地成为了 sys_admins 的成员,通过 net_admins 获得的成员资格具有 NOINHERIT 属性,也就不会自动继承权限。如果执行了以下语句:SET ROLE net_admins;会话将会拥有 net_admins 所有的特权,但是不会拥有 user1 自身的特权,也不会继承sys_admins 所有的特权。如果执行了以下语句:SET ROLE sys_admins;会话将会拥有 sys_admins 所有的特权,但是不会拥有 user1 或者 net_admins 所有的特权。如果想要恢复初始状态的会话特权,可以执行以下任意语句:SET ROLE user1; SET ROLE NONE; RESET ROLE;在 SQL 标准中,用户和角色之间存在明确的差异,用户不会自动继承特权,而角色会继承特权。opengauss可以实现这种行为,只需要为角色设置 INHERIT 属性,而为用户设置NOINHERIT 属性。但是,为了兼容 8.1 之前的版本实现,PostgreSQL 默认为所有的角色都设置了 INHERIT 属性,这样用户总是会继承它所在组的权限。只有数据库对象上的普通权限可以被继承,角色的 LOGIN、SUPERUSER、CREATEDB 以及 CREATEROLE 属性可以被认为是一些特殊的权限,不会被继承。如果想要使用这些权限,必须使用 SET ROLE 命令设置为具有这些属性的角色。基于上面的示例,我们可以为 net_admins 角色指定 CREATEDB 和 CREATEROLE 属性。ALTER ROLE net_admins CREATEDB, CREATEROLE;然后再使用 user1 连接数据库,会话不会自动具有这些特权,而是需要执行以下命令:SET ROLE net_admins;2.6 删除角色删除角色的语句如下:DROP ROLE name;如果删除的是组角色,该组中的成员关系会自动从组中删除,但是这些成员角色自身不会受到任何影响。以下示例删除了角色 admin:opengauss=# drop role admin; DROP ROLE由于角色可以拥有数据库中的对象,也可以拥有访问其他对象的权限,删除角色通常不仅仅只是一个简单的 DROP ROLE 语句。在删除角色之前,需要删除它所拥有的对象,或者将这些对象重新赋予其他的角色;同时还需要撤销授予该角色的权限。
  • [技术干货] 云部署有哪些方式?2025年最全部署方案指南,让企业少走弯路
    在数字化转型的浪潮中,云部署已成为企业不可或缺的选择。然而,面对众多的部署选项,许多技术决策者常常感到困惑:究竟哪种方式最适合我的业务?本文将深入剖析云部署的三种主流方式,从多个维度进行客观对比,帮助您做出明智决策。  一、公有云:成本与弹性的最优解核心特征:公有云是最典型的云部署模式,由云服务商提供共享的基础设施资源,多个租户通过互联网访问相同的计算、存储和网络资源。适用场景:初创企业和中小型企业流量波动明显的互联网业务开发和测试环境数据备份和灾难恢复优势分析:1. 成本效益:采用按需付费模式,无需前期硬件投资,可将资本支出转为运营支出2. 弹性扩展:可根据业务需求快速调整资源规模,轻松应对流量高峰3. 维护简便:服务商负责底层基础设施的维护和升级4. 全球部署:借助服务商的全球数据中心,快速实现业务国际化布局局限性:数据存储在第三方环境,对数据主权有严格要求的行业需要谨慎评估网络性能受互联网质量影响定制化程度相对有限二、私有云:安全与控制的平衡之道核心特征:私有云为企业提供专属的云环境,可以部署在企业自建的数据中心,也可以由第三方托管,但资源完全隔离。适用场景:金融机构、政府单位等监管严格的行业处理敏感数据的企业需要高度定制化的大型企业有特定合规要求的业务系统优势分析:1. 安全保障:物理隔离确保数据完全掌控在企业手中2. 合规支持:更容易满足行业监管要求3. 性能稳定:不受其他租户影响,资源独享4. 深度定制:可根据业务需求进行全方位定制局限性:初始投资较大,需要专业运维团队扩展速度相对较慢总体拥有成本较高三、混合云:灵活与稳健的完美融合核心特征:混合云结合了公有云和私有云的优势,通过专用网络连接,实现工作负载在两种环境间的无缝迁移。适用场景:业务需求波动大的中大型企业数字化转型过程中的传统企业需要兼顾创新与稳定的组织有特定数据驻留要求的国际化企业优势分析:1. 架构灵活:敏感数据存放在私有云,普通业务部署在公有云2. 成本优化:基础负载使用私有云,峰值负载借助公有云弹性3. 风险分散:避免单一供应商锁定4. 平滑演进:支持从传统架构到云原生的渐进式转型局限性:架构设计复杂,技术要求高需要管理多个环境,运维难度较大网络延迟和带宽成本需要重点考虑四、多云策略:避免依赖与优化选择核心特征:多云策略指同时使用两家及以上云服务商的服务,可能是多个公有云组合,也可能是多个私有云组合。适用场景:追求最高程度业务连续性的企业需要利用不同云服务商特色功能的企业希望增强议价能力的大型组织通过不同云服务商服务不同区域业务的跨国公司优势分析:1. 避免锁定:降低对单一供应商的依赖2. 最佳组合:为不同工作负载选择最合适的云平台3. 提升韧性:单个云服务商故障不影响全局业务4. 成本优化:利用供应商间的竞争获取更优价格局限性:管理复杂度最高需要掌握多种技术栈跨云数据传输成本较高五、四种部署方式的多维对比为了更直观地展示差异,我们从六个关键维度进行对比:  六、如何选择适合的云部署方式?选择云部署方式时,建议从以下几个角度进行考量:1. 业务需求:分析业务的关键性、流量模式和性能要求2. 合规要求:评估行业监管政策和数据主权要求3. 技术能力:评估现有团队的技术水平和运维能力4. 成本预算:综合考虑初始投入和长期运营成本5. 发展计划:考虑未来3-5年的业务发展规划实践建议:从小规模试点开始,逐步验证技术路线建立云治理框架,确保可控性和安全性考虑聘请第三方顾问进行客观评估制定清晰的迁移和回滚方案结语云部署没有"一刀切"的最佳方案,每种方式都有其独特的价值和适用场景。重要的是基于企业的实际需求、技术实力和发展战略,选择最适合的部署模式。随着技术的发展和业务需求的变化,云部署策略也需要持续优化和调整。在云时代,灵活性和适应性比任何时候都更加重要。希望本文能为您在云部署的决策过程中提供有价值的参考。
  • 关于GDS服务消耗资源的问题
    GDS服务是专门导数用的,非常消耗IO资源,具体的cpu资源消耗的如何? 占用cpu资源占用大吗,能占用多少核?
  • [分享交流] 1024程序员节大家有什么印象深刻的经历吗?
    1024程序员节大家有什么印象深刻的经历吗?
  • [技术干货] 大数据干货合集(2025年10月)
    Libcomm 通信库cid:link_4producer 线程cid:link_0通信流cid:link_5TCP代理通信库cid:link_6CN多流cid:link_7集群通信常见问题cid:link_1数据收发过程中报错 cid:link_8使用通信中的视图进行分析cid:link_2增量备份核心设计cid:link_3差分增量备份cid:link_9Checkpoint 操作cid:link_10CBM文件的命名格式cid:link_11Roach的集群级备份cid:link_12流程分析cid:link_13日志回收https://bbs.huaweicloud.com/forum/thread-02107197297724506124-1-1.html
  • [技术干货] 日志回收
    日志是查看代码运行状态和错误定位的重要文件,Roach内核的回收日志只能保证一个日志回收点:$GAUSSLOG/roach/。Roach日志的管理可分为三类: agent文件夹保存了内核侧生成的日志; controller文件夹保存了python侧的调度信息; frame文件夹保存了双集群容灾过程中python侧代码生成的日志。缺省情况下,内核日志仅记录警告及以上级别的消息。Roach工具支持的日志级别,默认只有ERROR和Warning级别日志。执行命令可开启INFO级别日志,--logging –logging-level INFO 如果备份或恢复操作失败,可查看控制台中显示的错误汇总,识别发生错误的主机。 系统日志 Linux记录系统事件至系统日志中。Roach工具将FATAL及ERROR消息记入相同的系统日志文件。例如,在运行SUSE Linux操作系统的设备上,Roach写日志到/var/log/messages文件。 安全日志 用户可以保存所有活动信息到文件中。安全日志文件包括时间戳,以及备份,恢复和生成文件的详细信息。安全日志文件的文件名称格式如下:roach-agentsecurity-YYYY-MM-DD_HHMMSS.log。 控制器日志 控制器日志为python脚本运行日志,用户可以保存控制器日志信息到文件中。 控制器日志文件的格式如下:roach-controller-YYYY-MMDD_HHMMSS.log。例如:roach-controller-2015-12-15_203415.log 
  • [技术干货] 流程分析
    根据GaussDB(DWS)数据库的功能结构,全量备份按照以下顺序备份所需要的文件: 数据库相关的配置文件。 行存全部数据:GaussDB(DWS) A数据库支持行存。 xlog日志文件:Roach支持在线业务的备份,则通过备份xlog日志文件可在恢复时将备份期间的业务Redo,保证数据一致性。 列存全部数据: GaussDB(DWS) A数据库支持列存。 备份的数据按照每个节点为单位进行备份,所以每个节点都只存储当前节点的备份。结合Roach工具备份调度流图和日志信息分析如下: 整个备份流程的上层代码为python代码,即GaussRoach.py,master进程的创建和agent进程的拉起都是由python侧完成的。备份的配置和参数部分检查过程同样是由python侧代码完成。各个节点agent进程被拉起之后,C侧代码进行具体的业务操作。C侧代码运行起来之后,可以通过ps ux到gs_roach进程查看进程状态。备份的数据会进行压缩后写入到rch文件后存储到备份路径下的实例文件夹下,且每个rch文件大小是4GB; 存放路径:[存储路径]/roach/backupkey/hostname/,其中存储路径为备份命令中指定的--media-destination的值,backupkey为当前备份开始的时间作为标识某个特定的备份集,hostname为当前节点的hostname。
  • [技术干货] Roach的集群级备份
    Roach的集群级备份采用的是物理备份,即通过物理文件拷贝的方式对数据库进行备份,通过备份的数据文件及日志等文件,数据库可以进行完全恢复。全量备份则是将当前时间点数据库中所有的数据进行备份。当然,全备份可以备份整块硬盘、整个分区或某个具体的目录。全备份的好处是数据恢复方便,因为所有的数据都在同一个备份中,所以只要恢复全备份,所有的数据都会被恢复。 其优点是:物理备份速度快,通过合理规划,可以低成本进行备份和恢复; 其缺点是:相较于增量备份备份时间较长。Roach备份采用生产者-消费者模式,下图展现了备份流程各个线程及IO交互图。exec线程作为生产者,同时为减轻exec线程的压力,增加并行的reader线程读取小文件;sender线程作为消费者;中间则是通过一个256MB(可设置)的大buffer衔接。GaussDB(DWS)内核的备份组件为GaussRoach.py和gs_roach,需在集群内拉起备份任务。GaussRoach.py:Roach单集群全量备份入口为GaussRoach.py。每次命令行输入“python GaussRoach.py –t backup…”后,roach的python语言模式就开始运行。任意节点均可作为主节点拉起GaussRoach.py,然后每个节点都启动gs_roach进程负责本节点备份,各节点并行备份,节点内各DN并行备份。   
  • [技术干货] CBM文件的命名格式
    CBM 文件保存在data 目录的pg_cbm 文件夹下,命名方式为:pg_xlog_seqnum_startlsn_endlsn.cbm。seqnum文件序号表示这是第几个cbm文件,当一个cbm文件的大小超过100M时,将会切换到下一个cbm文件,并将seqnum加1。 startlsn为本cbm文件内容对应xlog记录的起始lsn; endlsn为本cbm文件切换时最后一次解析的截止lsn,若一个cbm文件还没有切换,那么endlsn为0。pg_cbm_tracked_location 说明:用于查询cbm已经解析到的lsn位置 入参:无 返回值:cbm已经解析到的lsn位置 b. pg_cbm_get_merged_file 说明:用于将指定lsn范围之内的cbm文件合并成一个cbm文件 入参:startlsn,指定的起始lsn;endlsn,指定的结束lsn 返回值:合并完的cbm文件名 c. pg_cbm_get_changed_block 说明:用于将指定lsn范围之内的cbm文件合并一个表,并返回表的各行记录 入参:startlsn,指定的起始lsn;endlsn,指定的结束lsn 返回值:合并完的表的记录,表的结构如下
  • [技术干货] Checkpoint 操作
    当系统运行时间较长的时候,由于操作较多,日志文件的数量也较多。如果每次利用日志进行恢复操作都会耗费大量的时间,为了节约时间同时减少不必要的恢复操作,引入了checkpoint的概念。checkpoint表示在此操作之前,相关数据已经被保存到永久存储中,即使系统故障,这部分数据也不会丢失,因此恢复的时候只要从checkpoint操作之后根据日志执行恢复操作就可以了。checkpoint本身也是一条xlog记录,该记录包含了redo点的位置,因此,每次恢复数据时,先从xloh记录里找到最近的一次checkpoint记录,并根据该记录找到相应的redo点位置,这就是执行本次恢复的起始点位置。checkpoint操作记录了redo点的位置。基于上述功能,由于数据的所有变化都被记录在了xlog中,GaussDB(DWS)数据库内核通过增加常驻的CBM writer线程,持续不断地对新增的xlog进行解析,识别并记录哪些数据数据页面被修改。进程启动时即开启CBM writer功能 在startup线程刚启动时,其根据已经解析出来的CBM文件,来决定CBM writer开始解析的起始LSN位置。每次执行到checkpoint末尾时,会设置CBM writer线程的latch。CBM writer线程等待latch被设置,然后进行一轮日志解析。 通过动态reload GUC参数,开启CBM writer功能 由于是动态开启的CBM writer功能,因此startup线程没有初始化CBM解析的起始位置。打开enable_cbm_writer开关的同时,会将CBM强制初始化的标志置为true。当CBM writer线程启动之后,其第一次解析中,会强制初始化获得解析的起始lsn。
  • [技术干货] 差分增量备份
    如果一次全量备份后的多次增量备份,指定的prior-backup-key均为上一次备份(可能是全量备份也可能增量备份)的backup-key,即此次备份是基于上一次备份集来进行的,那么这些增量备份就是差分增量备份,差分增量备份均是基于最近一次备份进行的。增量备份只需要备份上一备份节点到当前时间发生变化的数据文件,为了实现备份数据的完整性与一致性,正确识别并备份增量数据文件是至关重要的,作为增量备份的核心GaussDB(DWS)数据库内核的事务日志功能与cbm设计可以帮助Roach工具快速准确识别增量期间数据文件的变换信息,为快速准确完成增量备份提供了有力保障。为了保证数据的一致性和完整性,在对数据进行相关操作之前都会将具体的操作记录下来,持久化到可靠存储中,然后再进行具体的数据操作,这就是所谓的WAL(Write Ahead Logging),记录的相关操作称为XLOG日志,每一条日志记录都由LSN进行唯一标识。这样做的好处是事务的记录被提前记录并保存起来,在因一些外部原因(比如断电、操作系统失败等)导致操作失败后,我们可以通过保存的事务日志将这些操作重新执行一遍,保证数据不会丢失。
总条数:1518 到第
上滑加载中