Skip to the content.

上一页      主目录      下一页

22. Databases


本章包括从单用户读/写到具有事务支持的工业数据库服务器的数据库。通常,您将被送到这里来满足对其他应用程序的依赖,尽管在基本LFS系统上构建SQL服务器是完全可能的。

22.1 Important Notes About Upgrading Database Server Software


注意

本节介绍在使用已有数据库时如何重新安装数据库软件。它不适用于初始安装,或者如果要更新的包没有现有的数据库,但是用户应该通读它,以了解将来可能出现的问题。

让我们从一个真实发生的错误的戏剧性截图开始这一章。如果您是第一次安装数据库软件,则不会出现此错误:

$ sudo systemctl status postgresql
-- postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-10-26 17:11:53 CDT; 2min 49s ago
    Process: 17336 ExecStart=/usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120 (code=exited, status=1/FAILURE)
        CPU: 7ms

Oct 26 17:11:53 SVRNAME systemd[1]: Starting PostgreSQL database server...
Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] FATAL:
                database files are incompatible with server
Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] DETAIL:
                The data directory was initialized by PostgreSQL version 13,
                which is not compatible with this version 14.0.
Oct 26 17:11:53 SRVNAME postgres[17336]: pg_ctl: could not start server
Oct 26 17:11:53 SRVNAME postgres[17336]: Examine the log output.
Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Failed with result 'exit-code'.
Oct 26 17:11:53 SRVNAME systemd[1]: Failed to start PostgreSQL database server.

为了避免这种情况(例如,您的数据库服务器软件拒绝启动),请阅读下面关于升级DBMS(数据库管理系统)的最佳方法的讨论。

上面显示的错误的根本原因是将服务器软件升级到较新的主要版本,而数据文件没有受到影响。在这种情况下,管理员能够在不丢失任何数据的情况下恢复DBMS。

即使您是初次安装DBMS,也请通读本节。它提供了关于实现备份和恢复过程(或者至少是创建备份和恢复过程的策略)的信息,这些信息将满足您的需求并保证数据的安全性。

升级数据库服务器包

数据库系统处理保存数据库元数据和数据本身的文件。这些文件的内部结构被优化以供服务器软件使用。当这样的服务器软件升级时,新软件可能使用不同于以前使用的文件格式。有时,新软件既可以使用旧格式,也可以使用新格式,但没有新格式提供的性能改进。其他时候,新的服务器软件会在升级后自动重新格式化数据文件。

不幸的是,最可能的情况是新的服务器软件抱怨过时的文件格式和退出。当这种情况发生时,您已经覆盖了旧的服务器软件,您可能会以系统损坏和数据丢失而告终。

数据文件格式的更改通常发生在主要版本更改时,但也可能发生在其他时间。在升级任何DBMS软件之前,请检查文档,以查看此升级是否进行了需要重新格式化数据库的更改。

当然,如果数据库的内容不容易重新构建,那么不时地创建数据库备份总是一个好主意。在升级服务器软件之前,您应该运行另一个备份。

通过备份和恢复升级

注意

如果没有经过验证的过程从该备份恢复数据,则备份是无用的。在运行数据库服务器时,不仅应该创建备份;您还应该验证恢复过程是否确实有效。测试恢复过程的时间是在紧急需要恢复丢失的数据之前。

大多数数据库服务器软件都提供一些基本工具来创建数据备份。通常使用这些工具创建的备份可以被更新版本的软件读取(通过还原工具)。使用较旧的恢复工具和较新的备份数据是一个坏主意;你不应该盲目地认为它会起作用。可能会,但通常不会。

升级数据库文件的最简单方法是

由于您已经有了备份过程(并且您已经测试了恢复过程,对吗?),这可能是最简单的升级方法,因为您可以像往常一样使用您熟悉的过程进行升级,至少在备份和恢复方面是这样。

使用系统工具升级数据库文件

一些数据库系统(例如Postgresql)提供了一个工具,可以将现有的数据库文件重新格式化(升级)为新的格式。如果需要从备份中恢复(例如,运行升级工具失败),则必须重新安装旧软件才能恢复数据。

即使重新格式化工具可能像宣传的那样工作,您也应该在运行它们之前创建一个完整备份。故障可能会对数据库造成严重损坏。

特定DBMS的注意事项

PostgreSQL

备份/还原上游文档: https://www.postgresql.org/docs/current/backup.html

MariaDB

备份/还原上游文档: https://mariadb.com/kb/en/backup-and-restore-overview/

Sqlite

不要低估Sqlite。它是一个功能丰富的DBMS。与上述两大竞争者的主要区别在于,Sqlite不通过网络API提供访问。Sqlite数据库总是存储在运行使用该数据库的程序的机器上。数据内容的操作是通过直接在程序中调用库函数的API来完成的。

在上游文档中,您可能会发现以下内容很有用:

sqlite3命令行工具文档: https://www.sqlite.org/cli.html

备份API调用的文档: https://www.sqlite.org/backup.html

不幸的是,在上游文档中没有专门的章节讨论备份/恢复,但是在Internet上有几篇关于它的文章。这里有一个例子。

备份/还原文档: https://database.guide/backup-sqlite-database/

Berkeley DB

像Sqlite一样,这个软件作用于本地数据库文件;没有网络接口。

备份/恢复Berkeley数据库的相关资源是db_dump及其对应的db_load的手册页。

22.2 Berkeley DB-5.3.28


简介Berkeley DB

Berkeley DB包包含许多其他应用程序用于数据库相关功能的程序和实用程序。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

Berkeley DB 依赖

可选

libnsl-2.0.0Sharutils-4.15.2 (对于uudecode命令)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/db

安装Berkeley DB

首先应用一个修复,使它可以与当前版本的g++编译:

sed -i 's/\(__atomic_compare_exchange\)/\1_db/' src/dbinc/atomic.h

运行如下命令安装Berkeley DB:

cd build_unix                        &&
../dist/configure --prefix=/usr      \
                  --enable-compat185 \
                  --enable-dbm       \
                  --disable-static   \
                  --enable-cxx       &&
make

现在,作为root用户:

make docdir=/usr/share/doc/db-5.3.28 install &&

chown -v -R root:root                        \
      /usr/bin/db_*                          \
      /usr/include/db{,_185,_cxx}.h          \
      /usr/lib/libdb*.{so,la}                \
      /usr/share/doc/db-5.3.28

命令解释

cd build_unix && ../dist/configure –prefix=/usr…: 这取代了普通的./configure命令,因为Berkeley DB自带针对不同平台的各种构建目录。

--enable-compat185: 此开关允许构建DB-1.85兼容性API。

--enable-cxx: 此开关支持构建C++ API库。

--enable-dbm: 启用一些旧包所需的遗留接口支持。

make docdir=/usr/share/doc/db-5.3.28 install: 这将把文档安装在标准位置,而不是/usr/docs

chown -v -R root:root …: 该命令将各种已安装文件的所有权从构建器的uid:gid更改为root:root。

--enable-tcl --with-tcl=/usr/lib: 在DB中启用Tcl支持并创建libdb_tcl库。

--enable-java: 在DB中启用Java支持并创建libdb_java库。Java-7.x目前不支持。

内容

安装程序: db_archive, db_checkpoint, db_deadlock, db_dump, db_hotbackup, db_load, db_log_verify, db_printlog, db_recover, db_replicate, db_stat, db_tuner, db_upgrade, 和 db_verify

安装库: libdb.so, libdb_cxx.so, 和 libdb_tcl.so

安装目录: /usr/share/doc/db-5.3.28

简短描述

db_archive 打印不再使用的日志文件的路径名。

db_checkpoint 是一个守护进程,用于监视和检查点数据库日志。

db_deadlock 用于在检测到死锁时中止锁请求。

db_dump 将数据库文件转换为db_load可读的平面文件格式。

db_hotbackup 创建Berkeley DB数据库的“热备份”或“热故障转移”快照。

db_load 用于从使用db_dump创建的平面文件创建数据库文件。

db_log_verify 验证数据库的日志文件。

db_printlog 将数据库日志文件转换为人类可读的文本。

db_recover 用于在数据库发生故障后将数据库恢复到一致状态。

db_replicate 是一个守护进程,在事务环境中提供replication/HA服务。

db_stat 显示数据库环境统计信息。

db_tuner 分析btree数据库中的数据,并建议可能提供最佳操作的页面大小。

db_upgrade 用于将数据库文件升级到较新版本的Berkeley DB。

db_verify 用于对数据库文件进行一致性检查。

22.3 lmdb-0.9.29


简介lmdb

lmdb包是一个快速、紧凑的键值嵌入式数据存储。它使用内存映射文件,因此它具有纯内存数据库的读取性能,同时仍然提供基于磁盘的标准数据库的持久性,并且仅受虚拟地址空间大小的限制。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/lmdb

安装lmdb

注意

这个包解压到lmdb-LMDB_0.9.29.

运行如下命令安装lmdb:

cd libraries/liblmdb &&
make                 &&
sed -i 's| liblmdb.a||' Makefile

这个包没有附带测试套件。

现在,作为root用户:

make prefix=/usr install

命令解释

sed … liblmdb.a … Makefile: 包可执行文件使用静态库,因此必须创建它。该命令禁止安装静态库。

内容

安装程序: mdb_copy, mdb_dump, mdb_load, 和 mdb_stat

安装库: liblmdb.so

安装目录: None

22.4 MariaDB-10.6.12


简介MariaDB

MariaDB是一个社区开发的分支,是MySQL关系数据库管理系统的临时替代品。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

注意

MariaDB的安装大小为658 MB,但如果需要,可以通过在安装后删除/usr/share/mysql/test目录来减少大约252 MB。

MariaDB 依赖

必要

CMake-3.25.2

推荐

libevent-2.1.12

可选

Boost-1.81.0, libaio-0.3.113, libxml2-2.10.3, Linux-PAM-1.5.2, MIT Kerberos V5-1.20.1, pcre2-10.42, Ruby-3.2.1, sphinx-6.1.3, unixODBC-2.3.11, Valgrind-3.20.0, Groonga, KyTea, Judy, lz4, MeCab, MessagePack, mruby, MyRocks, Snappy, 和 ZeroMQ

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/mariadb

安装MariaDB

警告

MariaDB和MySQL不能安装在同一个系统上,除非对其中一个应用程序的构建配置进行大量更改。

出于安全考虑,强烈建议以非特权用户和组的身份运行服务器。执行以下命令(以root身份)创建用户和组:

groupadd -g 40 mysql &&
useradd -c "MySQL Server" -d /srv/mysql -g mysql -s /bin/false -u 40 mysql

运行如下命令安装MariaDB:

mkdir build &&
cd    build &&

cmake -DCMAKE_BUILD_TYPE=Release                      \
      -DCMAKE_INSTALL_PREFIX=/usr                     \
      -DGRN_LOG_PATH=/var/log/groonga.log             \
      -DINSTALL_DOCDIR=share/doc/mariadb-10.6.12       \
      -DINSTALL_DOCREADMEDIR=share/doc/mariadb-10.6.12 \
      -DINSTALL_MANDIR=share/man                      \
      -DINSTALL_MYSQLSHAREDIR=share/mysql             \
      -DINSTALL_MYSQLTESTDIR=share/mysql/test         \
      -DINSTALL_PAMDIR=lib/security                   \
      -DINSTALL_PAMDATADIR=/etc/security              \
      -DINSTALL_PLUGINDIR=lib/mysql/plugin            \
      -DINSTALL_SBINDIR=sbin                          \
      -DINSTALL_SCRIPTDIR=bin                         \
      -DINSTALL_SQLBENCHDIR=share/mysql/bench         \
      -DINSTALL_SUPPORTFILESDIR=share/mysql           \
      -DMYSQL_DATADIR=/srv/mysql                      \
      -DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock       \
      -DWITH_EXTRA_CHARSETS=complex                   \
      -DWITH_EMBEDDED_SERVER=ON                       \
      -DSKIP_TESTS=ON                                 \
      -DTOKUDB_OK=0                                   \
      .. &&
make

要测试结果,发出:make test。众所周知,test-connect测试会失败。

注意

可以使用以下命令运行更广泛的测试集:

pushd mysql-test
./mtr --parallel <N> --mem --force
popd

其中N是并行运行的测试数。超过5400个测试在大约24个SBU中运行,N=4。一些测试可能会失败,主要是由于字符集问题。

现在,作为root用户:

make install

命令解释

-DWITH_EMBEDDED_SERVER=ON: 此开关可以编译某些应用程序(如Amarok)所需的嵌入式服务器库。

-DWITH_EXTRA_CHARSETS=complex: 此开关支持复杂字符集。

-DSKIP_TESTS=ON: 此开关禁用MariaDB Connector/C的测试,如果没有额外的设置,这些测试不支持。

-DWITHOUT_SERVER=ON: 如果您不需要服务器,只想构建客户端,请使用此开关。

注意

有许多选项可用于cmake。检查cmake . -LH的输出以获得额外的定制选项。

配置 MySQL

配置文件

/etc/mysql/my.cnf~/.my.cnf

配置信息

root用户使用以下命令创建/etc/mysql/my.cnf:

install -v -dm 755 /etc/mysql &&
cat > /etc/mysql/my.cnf << "EOF"
# Begin /etc/mysql/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /run/mysqld/mysqld.sock

# The MySQL server
[mysqld]
port            = 3306
socket          = /run/mysqld/mysqld.sock
datadir         = /srv/mysql
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M

# Don't listen on a TCP/IP port at all.
skip-networking

# required unique id between 1 and 2^32 - 1
server-id       = 1

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# InnoDB tables are now used by default
innodb_data_home_dir = /srv/mysql
innodb_log_group_home_dir = /srv/mysql
# All the innodb_xxx values below are the default ones:
innodb_data_file_path = ibdata1:12M:autoextend
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 128M
innodb_log_file_size = 48M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

# End /etc/mysql/my.cnf
EOF

你现在可以安装一个数据库,并将所有权更改为非特权用户和组(作为root用户执行):

mysql_install_db --basedir=/usr --datadir=/srv/mysql --user=mysql &&
chown -R mysql:mysql /srv/mysql

进一步的配置需要MariaDB服务器正在运行。以root用户使用以下命令启动服务器:

install -v -m755 -o mysql -g mysql -d /run/mysqld &&
mysqld_safe --user=mysql 2>&1 >/dev/null &

默认安装不会为管理员设置密码,因此使用以下命令作为root用户设置密码。

mysqladmin -u root password

服务器的配置现在已经完成。以root用户使用以下命令关闭服务器:

mysqladmin -p shutdown

Systemd Unit

安装blfs-systemd-units-20220720包中的mysqld.service单元,以root用户在系统启动时启动MariaDB服务器。

make install-mysqld

注意

如果您已经有一个现有的数据库,并且这个二进制文件的安装只是升级到一个较新的版本,请查看上游文档以了解升级。建议运行:

mariadb-upgrade

内容

安装程序: aria_chk, aria_dump_log, aria_ftdump, aria_pack, aria_read_log, aria_s3_copy, galera_new_cluster, galera_recovery, innochecksum, mariabackup, mariadb, mariadbd, mariadb-access, mariadb-admin, mariadb-backup, mariadb-binlog, mariadb-check, mariadb-client-test, mariadb-client-test-embedded, mariadb-conv, mariadb-convert-table-format, mariadb-find-rows, mariadbd-multi, mariadbd-safe, mariadbd-safe-helper, mariadb-dump, mariadb-dumpslow, mariadb-embedded, mariadb-fix-extensions, mariadb-hotcopy, mariadb-import, mariadb-install-db, mariadb-ldb, mariadb-plugin, mariadb-secure-installation, mariadb-setpermission, mariadb-service-convert, mariadb-show, mariadb-slap, mariadb-test, mariadb-test-embedded, mariadb-tzinfo-to-sql, mariadb-upgrade, mariadb-waitpid, mariadb_config, mbstream, msql2mysql, my_print_defaults, myisamchk, myisam_ftdump, myisamlog, myisampack, mysql_config, mytop, perror, replace, resolve_stack_dump, resolveip, sst_dump, wsrep_sst_common, wsrep_sst_mariabackup, wsrep_sst_mysqldump, 和 wsrep_sst_rsync

安装库: libmariadbclient.a, libmariadb.so, libmariadbd.so, libmysqlclient.a, libmysqlclient_r.a (符号链接到 libmariadbclient.a), libmysqld.{so,a}, libmysqlservices.a, 还有一些在 /usr/lib/mysql/plugin/ 下。

安装目录: /etc/mysql, /usr/{include,lib,share}/mysql, /usr/share/groonga{-normalizer-mysql}, 和 /usr/share/doc/mariadb-10.6.12

简短描述

有几个从mysql*到mariadb对应的符号链接。维护它们是为了保持兼容性。

为了使某些MariaDB支持程序正常工作,必须安装Perl DBI模块。

简短描述

aria_chk 用于检查、修复、优化、排序和获取有关Aria表的信息。

aria_dump_log 是一个转储Aria日志页面内容的工具。

aria_ftdump 显示全文索引信息。

aria_pack 是生成压缩的只读Aria表的工具。

aria_read_log 显示Aria日志文件内容。

aria_s3_copy 在AWS S3之间复制aria表。

galera_new_cluster 引导一个新的Galera集群。

galera_recovery 从Galera集群中恢复数据。

innochecksum 打印InnoDB文件的校验和。

mariabackup 是InnoDB和XtraDB的开源备份工具。

mariadb 是一个简单的SQL shell,具有输入行编辑功能。

mariadbd 是MySQL服务器守护进程。

mariadb-access 检查主机名、用户名和数据库组合的访问权限。

mariadb-admin 是执行管理操作的客户机。

mariadb-binlog 读取二进制日志文件。

mariadb-check 执行表维护:检查、修复、优化或分析表。

mariadb-client-test 用于测试MySQL客户端API的某些方面,这些方面无法使用mysqltest及其测试语言进行测试。

mariadb-client-test-embedded 是测试嵌入式服务器客户端API的工具。

mariadb-conv 转换字符集以供MariaDB使用。

mariadb-convert-table-format 将数据库中的表转换为使用特定的存储引擎。

mariadbd-multi 用于管理几个mysqld进程,这些进程监听不同Unix套接字文件和TCP/IP端口上的连接。

mariadbd-safe 是在Unix和NetWare上启动mysqld服务器的推荐方法。

mariadb-dump 是一个备份程序。

mariadb-dumpslow 解析MySQL慢速查询日志文件并打印其内容的摘要。

mariadb-embedded 是一个静态链接到libmariadbd的MySQL客户端。

mariadb-find-rows 读取包含SQL语句的文件,并提取匹配给定正则表达式或包含使用 db_name或SET语句的语句。

mariadb-fix-extensions 将MyISAM(或ISAM)表文件的扩展名转换为规范形式。

mariadb-hotcopy 锁定表,刷新表,然后执行数据库的副本。

mariadb-import 读取一系列数据格式,并将数据插入数据库。

mariadb-install-db 初始化MySQL数据目录,并创建其中包含的系统表(如果它们不存在)。

mariadb-ldb 是RocksDB工具。

mariadb-plugin 是一个实用程序,使MySQL管理员能够管理MySQL服务器加载哪些插件。

mariadb-secure-installation 是一个提高MySQL安装安全性的工具。

mariadb-service-convert 基于当前mariadb设置生成systemd单元。

mariadb-setpermission 设置MySQL授权表中的权限。

mariadb-show 显示了MariaDB数据库的结构。

mariadb-slap 是一个诊断程序,用于模拟MySQL服务器的客户端负载,并报告每个阶段的时间。

mariadb-test 针对MySQL服务器运行一个测试用例,并可选择将输出与结果文件进行比较。

mariadb-test-embedded 类似于mysqltest命令,但是支持libmysqld嵌入式服务器。

mariadb-tzinfo-to-sql 加载mysql数据库中的时区表。

mariadb-upgrade 检查所有数据库中的所有表是否与当前版本的MySQL服务器不兼容。

mariadb-waitpid 向进程发出终止信号,并等待该进程退出。

mariadb_config 获取使用MariaDB Connector/C的编译器标志。

mbstream 是一个通过流发送InnoDB和XTraDB备份的实用程序。

msql2mysql 是一个将mSQL程序转换为MySQL使用的工具。

my_print_defaults 显示选项文件的选项组中的选项。

myisam_ftdump 显示MyISAM表中有关FULLTEXT索引的信息。

myisamchk 获取有关数据库表的信息,或检查、修复或优化它们。

myisamlog 显示MyISAM日志文件内容。

myisampack 是压缩MyISAM表的工具。

mysql_config 提供了编译MySQL客户端并将其连接到MySQL的有用信息。

mytop 是一个基于控制台的工具,用于监视MySQL服务器的线程和整体性能。

perror 是一个实用程序,用于显示系统或存储引擎错误代码的描述。

replace 是对SQL标准的MariaDB/MySQL扩展。

resolve_stack_dump 将数字堆栈转储解析为符号。

resolveip 是一个将IP地址解析为主机名,反之亦然的实用程序。

sst_sump 转储sst文件(RocksDB使用的格式)的内容。

22.5 PostgreSQL-15.2


简介PostgreSQL

PostgreSQL是一种高级的对象关系数据库管理系统(ORDBMS),派生自Berkeley Postgres数据库管理系统。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

PostgreSQL 依赖

可选

ICU-72.1, libxml2-2.10.3, libxslt-1.1.37, OpenLDAP-2.6.4, Linux-PAM-1.5.2, MIT Kerberos V5-1.20.1Bonjour

可选 (重新生成文档)

fop-2.8, docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2, 和 SGMLSpm-1.1

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/postgresql

安装PostgreSQL

为了增强安全性,最好有一个专门的组和用户来运行PostgreSQL服务器。首先,以root用户的身份发布:

groupadd -g 41 postgres &&
useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
        -u 41 postgres

注意

有几个配置项可以通过可选包向PostgreSQL添加额外的功能。使用 ./configure –help 查看列表。

使用以下命令安装PostgreSQL:

sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&

./configure --prefix=/usr          \
            --enable-thread-safety \
            --docdir=/usr/share/doc/postgresql-15.2 &&
make

contrib/目录下有许多程序。如果您打算将此安装作为服务器运行,并希望构建其中的一些,请为每个子目录输入make -C contribmake -C contrib/<SUBDIR-NAME>

测试必须以非特权用户身份运行,因为它们需要启动临时服务器,不能以根用户身份运行。出于同样的原因,您需要停止所有正在运行的PostgreSQL服务器。如果安装的是旧版本的PostgreSQL,可能需要使用–disable-rpathconfigure来避免失败,但不建议安装使用此开关创建的二进制文件。要测试结果,发出:make check

注意

如果您正在安装PostgreSQL以升级现有的安装,那么您需要遵循以下重要步骤。如果新构建的主版本大于以前的版本,则数据文件格式可能已经更改。新的软件不能作用于现有的数据文件。在这种情况下,服务器将不会启动,因为旧的程序已经被覆盖,所以数据在文件格式转换之前是不可用的。

在升级现有PostgreSQL安装之前,请查看文档,了解在升级过程中必须记住的任何注意事项。请注意,新的主要版本可能会在数据对象中使用不同的二进制格式,从而导致潜在的不兼容性。要了解更多信息,请查看upstream关于升级PostgreSQL的文档。https://www.postgresql.org/docs/current/upgrading.html

此时,您的文件系统上可能同时安装了新旧二进制文件。这些二进制文件可用于执行现有数据库文件的升级。对于下面的说明,假设:

首先,做一个临时安装,这使得访问新的二进制文件更容易:

make DESTDIR=$(pwd)/DESTDIR install

接下来,创建一个目录,由可写的postgres用户, 以root用户执行:

install -d -o postgres $(pwd)/DESTDIR/tmp

现在,停止现有的PostgreSQL实例,以root用户启动升级进程:

pushd $(pwd)/DESTDIR/tmp
systemctl stop postgresql
su postgres -c "../usr/bin/initdb -D /srv/pgsql/newdata"
su postgres -c "../usr/bin/pg_upgrade \
                    -d /srv/pgsql/data    -b /usr/bin \
                    -D /srv/pgsql/newdata -B ../usr/bin"
popd

此时,数据库文件在磁盘上的两个位置上可用。旧数据位于/srv/pgsql/data,新数据位于/srv/pgsql/newdata。建议在继续之前备份旧的数据库文件。

接下来,删除旧的数据库文件,并以root用户重命名新的数据目录:

rm -rf /srv/pgsql/data
mv /srv/pgsql/newdata /srv/pgsql/data

现在,作为root用户:

make install      &&
make install-docs

如果你以root用户制作了任何一个contrib/程序:

make -C contrib/<SUBDIR-NAME> install

提示

如果您只打算使用PostgreSQL作为客户端连接到另一台机器上的服务器,那么您的安装已经完成,您不应该运行剩余的命令。

如果升级了现有数据库,请跳过其余命令,因为数据库已经可以使用了。如果这是您第一次安装PostgreSQL,请继续初始化。

使用root用户发出的以下命令初始化数据库集群:

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&
chown -Rv postgres:postgres /srv/pgsql /run/postgresql

现在,以root用户初始化数据库:

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

命令解释

sed -i …: 这个sed将服务器套接字位置从/tmp更改为/run/postgresql

--enable-thread-safety: 这个开关允许libpq和ECPG程序中的并发线程安全地控制它们的私有连接句柄,从而使客户端库线程安全。

--with-openssl: 构建支持OpenSSL加密连接的包。

--with-perl: 构建PL/Perl服务器端语言。

--with-python: 构建PL/Python服务器端语言。默认使用Python3,不再支持Python2。

--with-tcl: 构建PL/Tcl服务器端语言。

配置 PostgreSQL

配置文件

$PGDATA/pg_ident.con, $PGDATA/pg_hba.conf, 和 $PGDATA/postgresql.conf

通过将PGDATA环境变量设置为包含所需集群的目录的值,可以使用它来区分数据库集群。这三个配置文件存在于每个PGDATA/目录中。有关文件格式的详细信息以及可以在每个文件中设置的选项可以在/usr/share/doc/postgresql-15.2/html/index.html中找到。

Systemd Unit

安装blfs-systemd-units-20220720包中的postgresql.service单元:

make install-postgresql

启动PostgreSQL服务器并创建样例数据库

数据库服务器可以用以下命令手动启动(以root用户):

su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                  /srv/pgsql/data/logfile 2>&1 &'

注意

如果要编写此部分的脚本,则应该在继续之前等待服务器启动,例如在上述命令之后添加sleep 2

下面的说明显示了如何创建数据库、向其中添加表、向表中插入一些行并选择它们,以验证安装是否正常工作。仍然作为用户root,问题:

su - postgres -c '/usr/bin/createdb test' &&
echo "create table t1 ( name varchar(20), state_province varchar(20) );" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Billy', 'NewYork');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Evanidus', 'Quebec');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Jesse', 'Ontario');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

当你完成测试,你可以关闭服务器,通过发出root:

su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

内容

安装程序: clusterdb, createdb, createuser, dropdb, dropuser, ecpg, initdb, pg_amcheck, pg_archivecleanup, pg_basebackup, pg_checksums, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivewal, pg_recvlogical, pg_resetwal, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_verifybackup, pg_waldump, pgbench, postgres, postmaster (弃用), psql, reindexdb, vacuumdb, optionally, 如果建立了对Tcl的支持, pltcl_delmod, pltcl_listmod, pltcl_loadmod, 和可选 (在contrib/) oid2name, pg_standby, vacuumlo, 还有很多其他的

安装库: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgcommon_shlib.a, libpgfeutils.a, libpgport.a, libpgport_shlib.a, libpgtypes.{so,a}, libpq.{so,a}, /usr/lib/postgresql 下的各种字符集模块和可选的编程语言模块

安装目录: /usr/include/{libpq,postgresql}, /usr/lib/postgresql, /usr/share/{doc/postgresql-15.2,postgresql}, 和 /srv/pgsql

简短描述

clusterdb 是一个用于重新聚集PostgreSQL数据库中的表的实用程序。

createdb 创建新的PostgreSQL数据库。

createuser 定义一个新的PostgreSQL用户帐户。

dropdb 删除一个PostgreSQL数据库。

dropuser 删除一个PostgreSQL用户帐户。

ecpg 是嵌入式SQL预处理器。

initdb 创建一个新的数据库集群。

oid2name 解析PostgreSQL数据目录中的OIDs (Object IDs)和文件节点。

pg_amcheck 检查一个或多个PostgreSQL数据库中的损坏。

pg_archivecleanup 清理PostgreSQL WAL(预写日志)归档文件。

pg_basebackup 对正在运行的PostgreSQL集群进行基本备份。

pg_checksums 启用、禁用或检查PostgreSQL数据库集群中的数据校验和。

pg_config 获取PostgreSQL版本信息。

pg_controldata 返回在initdb期间初始化的信息,例如目录版本和服务器区域设置。

pg_ctl 控制停止和启动数据库服务器。

pg_dump 将数据库数据和元数据转储到用于重新创建数据库的脚本中。

pg_dumpall 递归地为集群中的每个数据库调用pg_dump

pg_isready 检查PostgreSQL服务器的连接状态。

pg_receivewal 用于从PostgreSQL服务器流化预写日志。

pg_recvlogical 控制PostgreSQL逻辑解码流。

pg_resetwal 重置PostgreSQL数据库集群的预写日志和其他控制信息。

pg_restorepg_dump创建的转储文件创建数据库。

pg_rewind 将一个PostgreSQL数据目录与另一个从第一个数据目录派生出来的数据目录同步。

pg_standby 支持创建PostgreSQL热备服务器。

pg_test_fsync 决定了PostgreSQL最快的wal_sync方法。

pg_test_timing 测量计时开销。

pg_upgrade 升级PostgreSQL服务器实例。

pg_verifybackup 验证PostgreSQL集群基本备份的完整性。

pg_waldump 显示PostgreSQL数据库集群的预写日志的人类可读呈现。

pgbench 在PostgreSQL上运行基准测试。

pltcl_delmod 是一个支持脚本,用于从PL/Tcl表中删除模块。该命令需要安装Pgtcl包。

pltcl_listmod 是一个支持脚本,用于列出PL/Tcl表中的模块。该命令需要安装Pgtcl包。

pltcl_loadmod 是一个支持脚本,用于将模块加载到PL/Tcl表中。该命令还需要安装Pgtcl包。

postgres 为PostgreSQL数据库服务器。

postmaster (已弃用,指向postgres的符号链接)是一个多用户数据库守护进程。

psql 是一个基于控制台的数据库shell。

reindexdb 是用于在数据库中重建索引的实用程序。

vacuumdb 压缩数据库并为查询分析器生成统计信息。

vacuumlo 从PostgreSQL数据库中删除孤立的大对象。

libecpg.{so,a} 包含在C程序中支持嵌入式SQL的函数。

libecpg_compat.{so,a} 是ecpg兼容性库。

libgport.a 是Postgres后端的端口特定子系统。

libpgtypes.{so,a} 包含处理Postgres数据类型的函数。

libpq.{so,a} 是C程序员对Postgres的API。

22.6 SQLite-3.40.1


简介SQLite

SQLite包是一个软件库,它实现了一个自包含的、无服务器的、零配置的事务性SQL数据库引擎。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

额外下载

可选文档

SQLite 依赖

可选

libeditUnZip-6.0 (解压缩文档所需)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/sqlite

安装SQLite

如果你下载了可选的文档,发出以下命令将文档安装到源代码树中:

unzip -q ../sqlite-doc-3400100.zip

运行如下命令安装SQLite:

./configure --prefix=/usr     \
            --disable-static  \
            --enable-fts5     \
            CPPFLAGS="-DSQLITE_ENABLE_FTS3=1            \
                      -DSQLITE_ENABLE_FTS4=1            \
                      -DSQLITE_ENABLE_COLUMN_METADATA=1 \
                      -DSQLITE_ENABLE_UNLOCK_NOTIFY=1   \
                      -DSQLITE_ENABLE_DBSTAT_VTAB=1     \
                      -DSQLITE_SECURE_DELETE=1          \
                      -DSQLITE_ENABLE_FTS3_TOKENIZER=1" &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

如果你下载了可选的文档,以root用户发出以下命令来安装它:

install -v -m755 -d /usr/share/doc/sqlite-3.40.1 &&
cp -v -R sqlite-doc-3400100/* /usr/share/doc/sqlite-3.40.1

命令解释

--disable-static: 此开关防止安装库的静态版本。

--enable-fts5: 这个开关支持全文搜索扩展的版本5。

CPPFLAGS="-DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_TOKENIZER=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1": 像SeaMonkey这样的应用程序需要打开这些选项。这样做的唯一方法是将它们包含在CFLAGSCPPFLAGS中。我们使用后者,所以CFLAGS的默认值(或用户设置的任何值)不会受到影响。有关可指定内容的进一步信息,请参阅https://www.sqlite.org/compile.html

内容

安装程序: sqlite3

安装库: libsqlite3.so

安装目录: /usr/share/doc/sqlite-3.40.1

简短描述

sqlite3 是SQLite库的基于终端的前端,可以交互式地评估查询并显示结果。

libsqlite3.so 包含SQLite API函数。

上一页      主目录      下一页