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。 ]