3.2 归档事务日志

看过图片之后,我们可以看看如何使这些东西进入工作状态。当谈到及时归档时,您需要做的第一件事是归档XLOG。PostgreSQL通过postgresql.conf提供了所有与归档相关的选项。让我们一步一步地看,要启动归档需要在postgresql.conf中做什么:

1. 首先,您应该把archive_mode设置为 on。

2. 第二步,您应该配置您的归档命令。归档命令是一个简单的带有两个参数的shell命令:

1. %p: 这是一个表示应该被归档的的XLOG的占位符,包括它的全路径(源)。

2. %f: 这个变量保存了没有路径指向的XLOG的名字。

现在让我们来设置归档。要做到这一点,我们应该创建一个存放XLOG的位置。理想情况下,您要归档的XLOG不与数据库实例存储在同一硬件上。为了这个例子,我们假设我们要应用一个archive 到/archive。需要在postgresql.conf中做如下改变:

wal_level = archive

# minimal, archive, or hot_standby

# (change requires restart)

archive_mode = on

# allows archiving to be done

# (change requires restart)

archive_command = 'cp %p /archive/%f'

# command to use to archive a logfile segment

# placeholders: %p = path of file to archive

# %f = file name only

一旦做了这些更改之后,就准备好了归档,您只需要重新启动数据库来激活归档。

在我们重新启动数据库实例之前,我们要您把注意力放在wal_level上。目前有三个不同的wal_level设置可供选择:

• minimal

• archive

• hot_standby

迄今为止,在单个节点的情况下,所产生的事务日志的量不足以同步整个第二个实例。在PostgreSQL中有一些优化,在单节点模式情况下,这让XLOG写被跳过。下面的指令可以从wal_level被设置为minimal中受益:CREATE TABLE AS, CREATE INDEX, CLUSTER, 和 COPY(如果在同一个事务中,表被创建或者被清空)。

要重放事务日志,archive是必要的。archive与hot_standby的不同之处是,archive 不需要知道当前运行的事务。对流复制而言,这个信息是至关重要的。

[重新启动可以通过直接使用 pg_ctl –D /data_directory –m fast restart 或者通过一个标准的init 脚本。]

检查我们的归档工作最简单方法是在数据库中创建一些无用的数据。下面的代码片段显示了可以很容易地产生一百万行数据的方法:

test=# CREATE TABLE t_test AS SELECT * FROM generate_series(1,

1000000);

SELECT 1000000

test=# SELECT * FROM t_test LIMIT 3;

generate_series

-----------------

1

2

3

(3 rows)

我们只是创建了一系列数字。重要的是,一百万行数据将出发相当数量的XLOG的交通。您将看到大量的文件使它成了归档:

iMac:archivehs$ ls -l

total 131072

-rw------- 1 hs wheel 16777216 Mar 5 22:31

000000010000000000000001

-rw------- 1 hs wheel 16777216 Mar 5 22:31

000000010000000000000002

-rw------- 1 hs wheel 16777216 Mar 5 22:31

000000010000000000000003

-rw------- 1 hs wheel 16777216 Mar 5 22:31

000000010000000000000004

这些文件可以很容易地用于未来的重放操作。

[如果您要节省存储,您也可以假设这些 XLOG 文件。只需要把gzip添加到您的archive_commmand。 ]

05-11 22:37