XSwitch运维手册

数据库

数据库默认用户名和密码都是xui,可以使用如下方法登录数据库:

make bash-pg
psql -U xui xui

显示所有表:

\d

查询用户

select * from users limit 10;

修改用户密码

为方便修改用户密码,可以使用如下存储过程:

SELECT update_user_password(id, old_password, new_password, use_a1_hash);

参数说明:

  • id:用户 ID
  • old_password:旧密码,字符串,可以为NULL
  • new_password:新密码,字符串
  • use_a1_hash:是否使用 A1 哈希,布尔型。如果是,则密码使用 A1 哈希存储,否则使用明文密码

示例:

SELECT update_user_password(1, NULL, 'veryGOODpassw0rd', false);
SELECT update_user_password(1, NULL, 'veryGooDpassw0rd', true);

修改域

如果域名改变或发生迁移,所有用户和分机的域都需要修改。

可以用如下存储过程批量修改域,以domain = xswitch.cn为例:

SELECT init_update_domain_user_extn('xswitch.cn');

修改数据库并发连接数

在 PostgreSQL 中系统默认最大并发连接数为100,可以使用show max_connections;查看。

查看正在使用的连接数:

SELECT count(*) from pg_stat_activity;

postgresql.conf配置中的max_connections是设置到数据库服务器的最大并发连接数。

文件位置/var/lib/postgresql/data/pgdata/postgresql.conf,如果不在也可以用 find / -name "postgresql.conf"查找。

修改文件中的max_connections = 100选项,重启服务器即可(修改数量可根据需求及版本限制进行修改)。

开启数据库运行日志

为方便排查数据库异常情况,可以开启 PostgreSQL 运行日志。

编辑postgresql.conf文件(位置参见上节),修改或添加以下配置:

logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'all'
log_min_duration_statement = 1000
log_line_prefix = '%m [%p] %u@%d '

参数说明:

  • logging_collector:开启日志收集器,必须设为on
  • log_directory:日志存放目录,相对于 PostgreSQL 数据目录。
  • log_filename:日志文件名格式,按日期分割便于管理。
  • log_statement:记录哪些 SQL 语句。可选值为noneddlmodall,生产环境建议设为ddlmod,排查问题时可临时设为all
  • log_min_duration_statement:记录执行时间超过指定毫秒数的 SQL 语句(0表示记录所有,-1表示禁用),单位为毫秒。设为1000表示记录执行超过 1 秒的慢查询。
  • log_line_prefix:日志行前缀格式,%m时间、%p进程 ID、%u用户名、%d数据库名。

修改后需要重启 PostgreSQL 服务生效:

make down && make up

如果希望不重启生效,部分参数可以通过 SQL 动态修改:

ALTER SYSTEM SET log_statement = 'all';
ALTER SYSTEM SET log_min_duration_statement = 1000;
SELECT pg_reload_conf();

日志文件位于容器内 PostgreSQL 数据目录的log子目录下,通过以下命令查看:

make bash-pg
ls -l /var/lib/postgresql/data/pgdata/log/

注意log_statement = 'all' 会记录所有 SQL 语句,对性能有一定影响且会产生大量日志,排查完毕后建议改回ddlnone

常用操作