AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-166982

padjee's questions

Martin Hope
padjee
Asked: 2022-12-10 11:10:39 +0800 CST

使用哪个命令重新启动 postgresql 12 服务

  • 6

我即将重启在 Ubuntu 18 上运行的 postgresql 12 服务。首先,我检查它的状态:sudo service postgresql status。它说:

postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
   Active: inactive (dead)
lines 1-3/3 (END)...skipping...
postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

虽然它似乎处于非活动状态,但我仍然可以连接。

然后我运行另一个检查:systemctl status postgresql@12-main。它说 :

root@db-services:/# systemctl status postgresql@12-main
● [email protected] - PostgreSQL Cluster 12-main
   Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/[email protected]
           └─override.conf
   Active: active (running) since Mon 2022-06-13 09:02:25 WIB; 5 months 27 days ago
 Main PID: 5807 (postgres)
    Tasks: 86 (limit: 4915)
   CGroup: /system.slice/system-postgresql.slice/[email protected]
           ├─ 1586 postgres: 12/main: postgres db_sync 10.100.3.248(61414) idle
           ├─ 1588 postgres: 12/main: postgres db_sync 10.100.3.248(61415) idle
           ├─ 1606 postgres: 12/main: docreg db_docreg 10.100.8.150(18385) idle
           ├─ 1607 postgres: 12/main: docreg db_docreg 10.100.8.150(18399) idle
           ├─ 1608 postgres: 12/main: docreg db_docreg 10.100.8.150(18401) idle
           ├─ 1609 postgres: 12/main: docreg db_docreg 10.100.8.150(18421) idle
           ├─ 2592 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(34956) idle
           ├─ 3518 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48290) idle
           ├─ 5150 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(61504) idle
           ├─ 5807 /usr/lib/postgresql/12/bin/postgres -D /data/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.co
           ├─ 5883 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48626) idle
           ├─ 6316 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48704) idle
           ├─ 7049 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48870) idle
           ├─ 7986 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(56240) idle
           ├─ 8146 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47432) idle
           ├─ 8183 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49022) idle
           ├─ 8360 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49036) idle
           ├─ 8445 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47478) idle
           ├─ 9590 postgres: 12/main: docudigtl db_docudigtl 10.100.8.106(56094) idle
           ├─ 9687 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(50980) idle
           ├─10148 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40646) idle
           ├─10324 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40680) idle
           ├─11079 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49496) idle
           ├─11602 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(58152) idle
           ├─11886 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(44674) idle
           ├─12106 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49618) idle
           ├─13112 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55014) idle
           ├─13122 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55015) idle
           ├─13145 postgres: 12/main: docudigtl db_mysapk 10.100.6.145(55016) idle
           ├─13202 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(62073) idle
           ├─13945 postgres: 12/main: checkpointer
           ├─13946 postgres: 12/main: background writer
           ├─13947 postgres: 12/main: walwriter
           ├─13948 postgres: 12/main: autovacuum launcher
           ├─13949 postgres: 12/main: stats collector
           ├─13950 postgres: 12/main: logical replication launcher

所以它实际上是活跃的!

那我做sudo service --status-all | grep postgresql。它说 :

[ - ]  postgresql
  1. systemctl restart postgresql@12-main VS 有什么区别sudo service postgresql restart?
  2. 我应该使用哪一个来重新启动:systemctl restart postgresql@12-main 或者 sudo service postgresql restart?

为了比较,在另一台服务器上,如果我这样做sudo service postgresql status。它说 :

postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mon 2022-12-05 18:37:03 WIT; 4 days ago
  Process: 22666 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22666 (code=exited, status=0/SUCCESS)

Dec 05 18:37:03 db-profile-mtr systemd[1]: Starting PostgreSQL RDBMS...
Dec 05 18:37:03 db-profile-mtr systemd[1]: Started PostgreSQL RDBMS.

当我这样做时systemctl status postgresql@12-main,它说:

[email protected] - PostgreSQL Cluster 12-main
   Loaded: loaded (/etc/systemd/system/[email protected]; enabled-runtime; vendor preset: enabled)
   Active: active (running) since Mon 2022-12-05 18:37:03 WIT; 4 days ago
  Process: 22609 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast 12-main stop (code=exited, status=0/SUCCESS)
  Process: 22631 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 12-main start (code=exited, status=0/SUCCESS)
 Main PID: 22637 (postgres)
    Tasks: 119 (limit: 4915)
   CGroup: /system.slice/system-postgresql.slice/[email protected]
           ├─  417 postgres: 12/main: refer db_ref 10.100.9.50(53216) idle
           ├─  965 postgres: 12/main: refer db_ref 10.100.9.50(53514) idle
           ├─ 1709 postgres: 12/main: profiling db_profile 127.0.0.1(34158) idle
     ...many proceses all the way down

那我做sudo service --status-all | grep postgresql。它说:

 [ + ]  postgresql

需要建议/帮助。谢谢

postgresql
  • 1 个回答
  • 37 Views
Martin Hope
padjee
Asked: 2022-12-05 22:02:42 +0800 CST

在物理复制中重启master

  • 7

我有 2 台涉及master-slave复制(物理复制)的服务器。

我看到使用的复制select * from pg_replication_slots;有一条记录说:

user : rep_user`

application : 12/main

state : streaming

我必须更改postgresql.confmaster 以启用pg_cron扩展,因此我需要重新启动 master。

sudo service postgresql stop使用 :后跟重新启动它是否安全sudo service postgresql start?在重新启动之前是否必须先删除复制?

谢谢

postgresql
  • 1 个回答
  • 37 Views
Martin Hope
padjee
Asked: 2022-11-24 00:38:49 +0800 CST

VACUUM 需要很长时间并且不能被取消

  • 5

我只是向一张桌子发出这个命令,它已经用了 2 个小时但还没有完成:vacuum verbose people_data

我什至无法取消该过程,因为我无法使用此查询查看 PID:

SELECT pid,
       now() - pg_stat_activity.query_start AS duration,
       query,
       state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes' 
  and state = 'idle'
order by duration desc;

该表的大小仅为 16 GB。死元组最多只能使用 130 个(只有 10 个表有超过 100 个死元组):

select n_live_tup, n_dead_tup, relname 
from pg_stat_all_tables 
where n_dead_tup > 100 
limit 20;

现在有人向我反映他们无法访问数据库?幸运的是这是开发数据库,​​所以它只是停止了开发过程。

如何在看不到 PID 的情况下取消真空?

postgresql
  • 1 个回答
  • 35 Views
Martin Hope
padjee
Asked: 2022-11-16 00:32:23 +0800 CST

备份主从复制

  • 5

在master-slave复制设置中(1 个主站和 2 个从站。从站是热备用的,以防主站出现故障)。

  1. 正常情况下如何备份?是否所有节点都单独备份并相应地恢复到它们自己的备份文件?
  2. 如果主人失败并且其中一个奴隶被任命为新主人,我该如何重新引入主人?这位老夫子现在要变成奴隶了吗?

谢谢

postgresql
  • 1 个回答
  • 20 Views
Martin Hope
padjee
Asked: 2022-11-10 22:20:51 +0800 CST

WAL 因某种原因增加

  • 5

这对我来说是新的。我一直在网上搜索但没有结果。

我有一台服务器Server A已经运行了几周,它是一台新服务器。我为此服务器设置了 FDW,以访问public来自 2 个数据库(db B1 和 db B2)的模式中的所有表,我们称它为Server B。所有表都“存储”在服务器 A 上 3 个不同数据库(db A1、A2、A3)上的特定模式中。这个服务器和服务器C之间也有streaming replication

这是我做的 FDW 的总结:

  • 设置服务器 B:添加条目pg_hba以接受所有连接create user fdwuser,重新加载配置文件

  • 设置服务器 A:

  1. 在db A1、A2、A3上创建这些模式以保存来自服务器 B的数据:

     CREATE SCHEMA reference;
     CREATE SCHEMA profile;
     GRANT USAGE ON SCHEMA profile TO jhon, bon;
     GRANT USAGE ON SCHEMA reference TO jhon, bon;
    
  2. 为 db A1、A2、A3 上的每个数据库创建 FDW 扩展:

    CREATE EXTENSION IF NOT EXISTS postgres_fdw;
    
  3. 创建外国服务器:

    CREATE SERVER foreign_profile 
      FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.8.40', port '5432', dbname 'db_profile'); ` 
    
    CREATE SERVER foreign_referensi 
      FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host     '10.10.8.40', port '5432', dbname 'db_reference');` 
    
  4. 创建用户映射:

    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password        
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 
    'secret'); 
    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password        
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 
    'secret');  
    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password 
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user referensi, password 
    'secret'); 
    
  5. 将外部模式导入数据库 A1、A2、A3:

    IMPORT FOREIGN SCHEMA public FROM SERVER foreign_profile INTO profile;  
    IMPORT FOREIGN SCHEMA public FROM SERVER foreign_referencd INTO reference; 
    

整个过程是成功的。我可以从 Server A 访问 Server B 上的外部表。很好,没问题。

现在,我使用SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';. 它显示了大约 2100 多个文件。这令人担忧。

这是服务器A上的设置:

archive_command cd .
archive_mode    on
checkpoint_completion_target    0.9
checkpoint_flush_after  32
checkpoint_timeout  300
wal_level   replica
wal_keep_segments   8
max_wal_senders 10
max_wal_size    8192
hot_standby on

然后我做一些检查:

  1. select * from pg_catalog.pg_stat_activity

    共有 250 个条目,以backend_type=parallel worker或client backend

  2. select * from pg_catalog.pg_stat_archiver

    Failed_count = 0;
    Archived_count = 71; 
    
  3. 几分钟后,我又跑select * from pg_catalog.pg_stat_archiver了。它现在说:

    Failed_count = 0;
    Archived_count = 3; -- it seems to be reset for some reasons
    
  4. 检查复制: select * from pg_catalog.pg_stat_replication。结果 :

    state = streaming

    sync_state = async

我认为这台服务器似乎很忙。

问题:

  1. 为什么 WAL 不断增加?这是正常的吗?如果不是,我应该减少它们吗?
  2. 为什么是archived_count复位?
  3. 这个命令是做什么的archive_command cd .:
postgresql
  • 1 个回答
  • 34 Views
Martin Hope
padjee
Asked: 2022-10-27 10:05:55 +0800 CST

postgresql 12流复制不起作用

  • 5

我想在从站上设置流复制。

在主服务器(服务器 A。Ubuntu 18.04;Postgres 12)上:

  1. sudo nano /etc/postgresql/12/main/postgresql.conf
  2. 放listen_addresses = '*'
  3. postgresql.conf 设置为:

wal_level = "logical"

archive_mode = "ON"

archive_timeout = 3600

checkpoint_timeout = 600

hot_standby = "ON"

max_connections = 700

max_wal_sender = 5

max_wal_size = 16GB

min_wal_size = 2GB

max_worker_processes = 30

synchronous_commit = "OFF"

wal_log_hints = "OFF"

wal_recycle = "ON"

wal_keep_segments = 4000

wal_sync_method = "fdatasync"

此主服务器已托管到另一台服务器的逻辑复制(服务器 B。Ubuntu 18.04;Postgres 12)

在从属服务器上(服务器 C. Ubuntu 22.04;Postgres 12):

  • 更改数据目录
  • 将其设置为从服务器 A 的流式复制。

以下是详细信息:安装 postgres(全新安装)后,我确保它正在运行,然后更改数据目录:

  1. sudo -u postgres psql
  2. SHOW data_directory;. --输出/var/lib/postgresql/12/main
  3. 退出 psql :\q
  4. sudo systemctl stop postgresql
  5. sudo systemctl status postgresql
  6. sudo rsync -av /var/lib/postgresql /data/postgresql2
  7. 重命名文件夹:sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak
  8. 编辑 postgresql.conf :sudo nano /etc/postgresql/12/main/postgresql.conf
  9. 设置到新位置:data_directory = '/data/postgresql2/postgresql/12/main'
  10. 再次启动数据库:sudo systemctl start postgresql

结果很好。Postgres 在服务器 C 上运行良好。当我这样做SHOW data_directory;时,它给出了: /data/postgresql2/postgresql/12/main

然后我在服务器 C 上设置流复制:

  1. 停止从服务器上的服务:systemctl stop [email protected]

  2. su - postgres然后cp -R /data/postgresql2/postgresql/12/main /data/postgresql2/postgresql/12/data_original

  3. 删除旧目录:

    rm -rf /data/postgresql2/postgresql/12/main/*

  4. 然后做基础备份:

    pg_basebackup -h 10.100.9.40 -p 5432 -U rep_user -D /data/postgresql2/postgresql/12/main -Fp -Xs -R -P -v

  5. 重新开始 :systemctl start [email protected]

--给出错误:

*`Job for [email protected] failed because the service did not take the steps required by its unit configuration.
See "systemctl status [email protected]" and "journalctl -xeu [email protected]" for details`*
  1. 然后我开始使用另一种方式:sudo -i -u postgres /usr/lib/postgresql/12/bin/pg_ctl start -D /data/postgresql2/postgresql/12/main

它给出了错误:

waiting for server to start....postgres: could not access the server configuration file "/data/postgresql2/postgresql/12/main/postgresql.conf": No such file or directory

请帮忙。什么可能导致这种情况?

postgresql
  • 1 个回答
  • 40 Views
Martin Hope
padjee
Asked: 2022-10-25 06:43:35 +0800 CST

流复制考虑

  • 5

我正在寻求指导。

我想在 3 台服务器之间建立复制:1 台主机 A,2 台从机 B 和 C。主机流向 2 台从机。A 到 B 是逻辑复制,而 A 到 C 是流复制

在我阅读了一些文章之后,我现在知道流复制涉及到pg_basebackup,从站从主站提取数据。

问题 :

  1. 我在这里和这里阅读了这些文章。哪一个是正确的,"ALTER SYSTEM SET listen_addresses TO '*';"或者listen_addresses = 'your_primary_IP_address'。我只是困惑。

  2. 在进行涉及 3 台服务器的复制之前,有哪些注意事项?

谢谢 postgresql 12,Ubuntu 20.04

postgresql
  • 1 个回答
  • 34 Views
Martin Hope
padjee
Asked: 2022-10-20 07:57:20 +0800 CST

postgresql 数据库集群与具有多个数据库的一台服务器

  • 6

原谅我愚蠢的问题。

我想知道 postgreSQL 数据库集群(1 个服务器、N 个数据库、N 个端口)与一台服务器托管多个数据库(1 个服务器、N 个数据库、1 个端口)之间有什么区别?

我已经阅读了集群here以及here和this。我只是不明白。对我来说更奇怪的是(由于我缺乏知识),在 OpDash 上它说集群可以同时运行不同版本的 postgres。:(

现实世界中是否有任何数据库集群使用示例?假设我想用主从复制做高可用性,我需要数据库集群吗?

请赐教或指出方向/文章。

谢谢

postgresql
  • 1 个回答
  • 65 Views
Martin Hope
padjee
Asked: 2022-09-18 18:09:01 +0800 CST

将用户分组为角色以访问 FDW 表

  • 0

最近我设置了 Forward Data Wrapper。这是我所做的:

CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.125.1', port '5432', dbname 'template1 ');  
IMPORT FOREIGN SCHEMA public LIMIT TO (tbl_test) FROM SERVER foreign_server INTO public;

在目标/外部服务器上创建用户:CREATE USER fdwuser WITH PASSWORD 'secret' 然后进行必要的设置,例如GRANT。FDW 工作。

但后来我想做更多。如果我将所有想要访问 FDW 的用户集合到一个GROUP. 然后我执行以下操作:

  • Create group role: 泄气1

  • create user: fdwuser3

  • grant demorole1 to fdwuser3

  • 为组角色“demorole1”创建用户映射:

    为 demorole1 SERVER foreign_server OPTIONS 创建用户映射(用户“fdwuser”,密码“secret”);

  • select * from tbl_test;——失败。

  • 授予 demorole1 对 tbl_test、模式和外部服务器的访问权限:GRANT ALL ON TABLE tbl_test TO demorole1; GRANT USAGE ON FOREIGN SERVER foreign_server TO demorole1; GRANT USAGE ON SCHEMA public TO fdwuser3;

  • 测试:select * from tbl_test; -失败。未找到用户 fdwuser3 的用户映射

  • CREATE USER MAPPING FOR demorole1 SERVER foreign_server OPTIONS (user 'fdwuser', password 'secret');

  • 再次测试:select * from tbl_test; - 仍然失败。找不到“fdwuser3”的用户映射

  • 做用户映射:CREATE USER MAPPING FOR fdwuser3 SERVER foreign_server OPTIONS (user 'fdwuser', password 'secret');

  • select * from tbl_test;--作品

问题:如何创建一个组角色,以便可以将本地服务器上的用户设置为其成员,这样我就不必在每次有用户想要访问 FDW 表时都进行授予和创建用户映射?

谢谢

postgresql users
  • 1 个回答
  • 12 Views
Martin Hope
padjee
Asked: 2022-09-14 05:56:56 +0800 CST

了解 pg_wal 和归档

  • 0

所以我继承了这个数据库。一开始,pg_wal.

然后,几周后,我计算了一下SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';,结果是:8182个文件。

查看目录上文件的时间戳pg_wal,我看到正在创建一些新文件,但文件数量保持不变。我怀疑发生了轮换。

然后我观察pg_stat_archiver:archived_count = **2**; failed_count = 0

大约 3 小时后,我再次数数SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';结果:8183。显然会创建一个新文件。

然后我做pg_stat_archiver:archived_count = **3**; failed_count = 0

archived_count last_archived_wal           last_archived_time   failed_count    last_failed_wal  last_failed_time 
3              000000010000009B00000083    22-09-13 13:14:20.   0
stats_reset                          
2022-09-13 08:14:19

这个数据库很低,一点也不忙。有时没有人访问它。但是有逻辑复制,每天一次将大约 300 条记录同步到另一台服务器。

这是我的设置:

max_wal_size : 1024 Mb
min_wal_size : 2048 Mb
wal_keep_segment : 0
wal_rotation : ON
wal_level : logical
wal_compression : ON
archive_on : ON
archive_mode : test ! -f /Archive/%f && cp %p /Archive/%f
archive_timeout : 900

问题 :

  1. 为什么第二个计数pg_wal增加?我预计它会减少,因为存档数量会增加。
  2. 如果wal_keep_segment = 0,为什么 WAL 的数量pg_wal从不为 0?在文档中,它说:

如果 wal_keep_segments 为零(默认值),系统不会为备用目的保留任何额外的段,

  1. 为什么在低谷期间 WAL 的最小数量不= min_wal_size+ wal_keep_segment?

请赐教。

太感谢了

postgresql postgresql-12
  • 1 个回答
  • 31 Views
Martin Hope
padjee
Asked: 2022-09-13 18:27:03 +0800 CST

pg_dump 将文件转储到 ROOT

  • 0

我昨晚运行 pg_dump 来备份一些 111Gb 数据库: time pg_dump -j 5 -Fd -Z 1 db_profans -f /backup-nfs/

我监控大小增长这里

但是,今天早上突然,数据库宕机了。我检查系统目录。根已满。PS:我没有任何访问服务器的权限,我们有不同的人来管理它。

到底是怎么回事 ?为什么所有备份文件都移动到 root ?或者其他导致根目录填满的东西,比如备份期间创建的 WAL 文件或日志文件堆积?我确实有这个数据库的复制,但它真的很小,每天只同步 300 条记录。而且我也没有打开任何日志记录..

如何手动删除所有备份文件?

这里是整个目录的图片.

更新:

我发现问题的原因实际上是归档过程没有写入外部磁盘。该文件夹“/Archive”,据说是保存归档的 WAL,实际上是在“根”内创建的!我不知道,因为它不像我前几天要求的那样。现在,当我删除存档的 WAL 时,服务器重新启动并运行。所以原因不是来自 pg_dump 进程。

postgresql backup
  • 1 个回答
  • 28 Views
Martin Hope
padjee
Asked: 2022-09-10 00:09:13 +0800 CST

pg_start_backup 与 pg_basebackup

  • 0

我pg_start_backup从这里和pg_base_backup 这里读过一些东西。

我很困惑。那么,在这两种方法中,哪一种通常更好?似乎pg_start_backup比pg_base_backup. 但是,pg_base_backup有参数pg_start_backup与pg_basebackup –xlog-method=stream命令相同。

如果我有这样的情况:

  • 没有聚类
  • 一些表的逻辑复制(不是整个数据库)
  • 无热备
  • 1 db 物理服务器,一个实例中有多个数据库
  • 想要实施 PITR

哪一个适合我?我只是困惑。

12. Postgres

谢谢

postgresql backup
  • 1 个回答
  • 21 Views
Martin Hope
padjee
Asked: 2022-09-09 20:55:35 +0800 CST

我可以安全删除哪些 pg_wal 文件?

  • 0

发出后pg_basebackup -D /var/lib/postgresql/basebackup -l "backup main $(hostname) on $(date)" -P,我看到目录中有 2 个“.backup”文件pg_wal。看到它这里。这就是pg_archive目录的样子这里。问题:

  1. 为什么有2个文件?
  2. 在第一个“.backup”文件(**96.00000028 之上的所有内容)之前或第二个文件(**98.00000028 之上的所有内容)之前,我可以安全删除哪些 WAL 文件?
  3. 还是我必须删除 wal 文件(00028 以上的所有文件)pg_archive?

谢谢

postgresql postgresql-12
  • 1 个回答
  • 80 Views
Martin Hope
padjee
Asked: 2022-09-03 16:07:13 +0800 CST

无法写入文件“pg_wal/xlogtemp.2399”设备上没有剩余空间

  • 0

我正在使用此查询生成虚拟数据:

INSERT INTO tbltest1 (id, kol1, kol2)
SELECT generate_series(1,10000), substr(md5(random()::text), 1, 25), substr(md5(random()::text), 1, 45)
FROM generate_series(1, 1000000);

然后,在这个过程的中间,出现了这个错误:无法写入文件“pg_wal/xlogtemp.2399”,设备上没有剩余空间。

显然,这表明我没有空间了。

psql然后我想通过发出“ ”命令进入数据库。但是出现了这个错误“.s.PGSQL.5432”:连接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服务器失败。没有这样的文件或目录弹出。

我看到一些错误会导致这个“.s.PGSQL.5432”错误。这对我来说真的是一条死胡同。

为什么会发出 no space left 错误?为什么 WAL 文件没有被回收?我有archive_mode = off,wal_level = logical。WAL 应该在此设置中回收。我该怎么做才能再次打开数据库?

我看到我仍然有很多可用空间(大约 20GB 以上)我在运行在 Win 10 主机上的 VM 上运行。

它真的困扰着我。请帮忙

更新

由于没有剩余空间,postgre 似乎无法写入 pg_wal。

  1. 我检查使用$root df -h
  2. 然后我增加空间:从 live USB (Ubuntu ISO) 启动。选择“Try Ubuntu” 打开 gparted 将 postgre 所在的 HDD 空间移动到磁盘末尾 展开以消耗可用空间 重新启动 VM,此处和此处也不使用 ISO Full 指令
  3. 使用引导光盘(上面的 Ubuntu ISO)执行Memory Test(memtest86+)。我不认为这一步是必要的。
  4. Reebot 来宾操作系统(我在 VMWare Workstation 上运行服务器)
  5. 确保 Ubuntu 占用了所有分配的空间。完整的说明在这里。根据您的需要进行调整。
  6. 再次重新启动。
  7. 像往常一样登录到 Ubuntu 并启动 postgres

现在postgres可以正常运行了。不再有“.s.PGSQL.5432”错误。

到目前为止,我的结论是 pg_wal 上没有剩余空间会导致 " .s.PGSQL.5432" 错误。

现在我面临另一个错误。我可以做“ Select * from table Limit 10”但我不能做像“ Select count(id) From table”这样的查询。关于页面块有错误: 关系库/13462/16387的块62052中的无效页面

非常感谢任何评论或帮助。

Ubuntu 22.04 在 VM、Postgres 12 上运行。

[ 错误4 vm_setting

postgresql ubuntu
  • 1 个回答
  • 145 Views
Martin Hope
padjee
Asked: 2022-09-01 07:29:00 +0800 CST

如何在一台服务器上制定多个数据库的备份策略

  • 2

我有一个包含许多数据库的服务器......它包含大约 20 个数据库。其中一些有 1600 万行,但没有那么多。晚上通常很少或没有活动,但白天不会那么忙(除非有活动,例如新注册或会员更新)。虽然不忙,但数据库包含关键数据。没有一个数据库已经备份了一年多!

我怎样才能安全地备份它们而不使服务器崩溃?我需要什么作为早期要求?我已经阅读了许多备份策略,但我只是过于谨慎,因为我不想做愚蠢的事情。我想开发最安全的备份方法并“轻松”恢复。

目前,我已经激活存档并且它已经很好地工作了。

欢迎任何建议,或者也许有我应该阅读的文章。

我的环境:在 Ubuntu 20 上运行的 Postgres 12

谢谢

postgresql backup
  • 1 个回答
  • 34 Views
Martin Hope
padjee
Asked: 2022-08-18 20:49:57 +0800 CST

存档失败,但从未生成新的 WAL

  • 0

目前我遇到了一个奇怪的情况。存档failed_count从 0 飙升至 2475。

这是我检查的一些参数:

  1. 从 pg_stat_archiver 中选择 *;

archived_count3567; last_archived_time2022-08-17 21:36:05; failed_count2516; last_failed_time2022-08-18 10:58

  1. select pg_switch_wal(); WAL 总是在切换,非常 1-2 秒。

  2. 从 pg_stat_replication 中选择 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn);

这也每秒钟都在变化。总是在一段时间内从数千旋转到 0。

  1. SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';

从今天早上 12 点开始,这个值一直是 7450。在此之前,它一直在增加。观察到的最大值是 10811

  1. SELECT * FROM pg_stat_bgwriter ; 这给出了:

    名称 |价值 | ---------------------+---------------------------- -+ checkpoints_timed |109040 --> 增加 |
    checkpoints_req |96 --> 保持不变 |
    checkpoint_write_time|125144712​​88 | checkpoint_sync_time |1373072.0 | 缓冲区检查点 |412734838 | buffers_clean |20745183 | maxwritten_clean |121362 | buffers_backend |98238043 | buffers_backend_fsync|0 | 缓冲区分配 |904724994 | stats_reset |2021-08-04 12:19:41.333 +0700|

看着pg_stat_bgwriter, checkpoints_timed 正在增加,这很好。

这发生在我的生产服务器上(另一个是测试服务器)。

  • 这是怎么回事 ?为什么 WAL 停止生成但存档计数失败?我的印象是,如果没有新的 WAL,则不应进行归档。
  • 我应该打开什么 LOGGING 参数来监控这些错误?

我的配置:

name                        |setting                                   |unit|
----------------------------+------------------------------------------+----+
archive_command             |test ! -f /archive/%f && cp %p /archive/%f|    |
archive_mode                |on                                        |    |
archive_timeout             |2400                                      |s   |
checkpoint_completion_target|0.9                                       |    |
checkpoint_flush_after      |32                                        |8kB |
checkpoint_timeout          |300                                       |s   |
checkpoint_warning          |30                                        |s   |
hot_standby                 |on                                        |    |
log_checkpoints             |off                                       |    |
max_replication_slots       |10                                        |    |
max_wal_senders             |5                                         |    |
max_wal_size                |8192                                      |MB  |
min_wal_size                |2048                                      |MB  |
synchronous_commit          |off                                       |    |
synchronous_standby_names   |*                                         |    |
wal_compression             |off                                       |    |
wal_keep_segments           |4000                                      |    |
wal_level                   |logical                                   |    |
wal_log_hints               |off                                       |    |
wal_segment_size            |16777216                                  |B   |
wal_sender_timeout          |60000                                     |ms  |

请帮忙。谢谢

postgresql performance
  • 1 个回答
  • 24 Views
Martin Hope
padjee
Asked: 2022-08-10 21:44:13 +0800 CST

逻辑复制初始阶段

  • 0

我要复制 1600 万条记录。只想问一下逻辑复制的初始阶段:

  1. 我需要先将初始表从发布者复制到订阅者吗?还是由订阅处理?不知道如果被复制过程处理的话要多久...
  2. 在这里和其他一些网站,https://www.enterprisedb.com/postgres-tutorials/logical-replication-postgresql-explained,上面写着“......产生多个表同步工作者”我怎样才能产生多个表同步工作者?它是哪个参数?我读过的文章都没有提到设置同步工作者的参数

谢谢

在 Ubuntu 上运行的 Postgres 12

postgresql replication
  • 1 个回答
  • 102 Views
Martin Hope
padjee
Asked: 2022-08-02 00:48:35 +0800 CST

逻辑复制上的从属没有实时更新

  • 0

我在测试环境中成功启动了逻辑复制。我insert使用程序在主服务器上生成了一些 60K 记录。在插入过程运行时,我使用“ SELECT count(*)”查询监视从属。但是记录没有添加。如果我在主节点上完成插入后运行查询,则SELECT count工作正常,从属节点和主节点之间的所有记录都是相等的。

这是正常行为吗?我期望奴隶和主要人几乎立即完全相同。

谢谢

postgresql replication
  • 1 个回答
  • 54 Views
Martin Hope
padjee
Asked: 2022-07-18 18:42:15 +0800 CST

min_wal_size 可以大于 max_wal_size 吗?

  • -2

如果min_wal_size大于 有可能max_wal_size吗?如果发生了怎么办?什么情况下 min_wal 大于 max_wal ?

我正在使用 PG 12。

谢谢

postgresql postgresql-performance
  • 1 个回答
  • 58 Views
Martin Hope
padjee
Asked: 2022-07-13 06:37:31 +0800 CST

使用 LSN 监控逻辑复制

  • 0

如何通过查看 lsn 来监控 Postgresql 12 中的逻辑复制?

我所做的:检查发布者和订阅者上的一些列。

出版方:

select * from pg_stat_replication; -- 查看 REPLAY_LSN

select * from pg_replication_slots; -- 见 CONFIRMED_FLUSH_LSN

订阅方:

select * from pg_catalog.pg_stat_subscription; -- 查看 RECEIVED_LSN 和 LATEST_END_LSN

我确保这些列中的所有值都相同。

我对么 ?或者有没有其他方法可以通过检查一些参数来查看复制工作?

postgresql replication
  • 1 个回答
  • 204 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve