数据库安装

550 阅读18分钟

国产数据库OpenGauss 安装

安装环境

  1. OS: centos7.9
  2. 数据库:轻量版 openGauss -version 5.0.0
  3. 安装:单节点安装

参考网址

用户的构建

Mac 的远程连接工具 royal tsx 安装

安装步骤

可参考的网址

  1. 安装软件下载 Royal tx
  2. 安装 选择ignore license
  3. 安装插件
    1. Royal tx 的plugins
    2. 安装拆件terminal
    3. 安装插件file transfer
  4. 重新启动使得插件生效
  5. 创建Document
    1. File -> New Document
    2. Royal 中以document 管理连接。安装后默认会有一个名为application的document 并且免费版只可以构建一个Document
  6. 创建远程主机凭证
    1. 连接远程主机时,通常需要提供密码进行安全校验,在 Royal TSX 中,可以创建凭证,将服务器的用户名和密码保存起来,在进行连接或进行 FTP 操作时,直接关联,就不用每次都输入了.
    2. Credentials->add->Credential

image.png

  1. Terminal 基础设置
    1. 设置 Terminal 的默认凭证 给Termianl绑定上述定义的credential

image.png

  1. 设置Terminal 默认不断开 Session
    1. Terminal->Advanced->Seesion image.png
  2. FTP 基础设置
    1. File Transfer

image.png 10. 连接测试

  1. 如果认证信息已经如上述步骤已配置,则该步骤秩序填写远程要连接的计算机名称,与链接名称 image.png

Ubuntu14.04 下oracle11g 的安装

环境

  1. OS : ubuntu14.04 Ubuntu 14.04.5 LTS
    1. lsb_release -a 命令行查看系统信息
  2. JDK: JDK:jdk-8u121-linux-x64.tar.gz
  3. Oracle: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
  4. Mac:Ruyal TSX & XQuartz
    1. XQuartz-款集成了XServer 的命令行窗体。使用其可直接实现与ubuntu的X11通信。 实现在XQuartz上显示GUI

安装步骤

[按照参照](ubuntu 14.04 oracle 11g 64位数据库安装 - 简书 (jianshu.com))

事前准备

安装包下载
  1. 安装软件的下载--- 下载地址

  2. 下载步骤

    1. 搜索需要的版本 image.png

    2. 加入到下载队列后,点击View items image.png

    3. 点击continue image.png

  3. 下载完成后,可得到文件

    1. linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
  4. 上传安装文件

安装依赖
  1. 更新apt源文件
    1. 备份原有的apt源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_back
    2. 添加下列的镜像源到文件sources.listsudo vim /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
 
deb http://extras.ubuntu.com/ubuntu trusty main
deb-src http://extras.ubuntu.com/ubuntu trusty main
deb http://archive.ubuntu.com/ubuntu/ raring main restricted universe multiverse
 
#163源:
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
#阿里源:
 
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://mirrors.aliyuncs.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyuncs.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyuncs.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyuncs.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyuncs.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyuncs.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyuncs.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyuncs.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyuncs.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyuncs.com/ubuntu/ trusty-backports main restricted universe multiverse

  1. 更新apt 使得上述更新的文件生效

    1. sudo apt-get update
  2. 安装依赖包--一定要确保每个包安装成功

    sudo apt-get install bzip2
    sudo apt-get install elfutils
    sudo apt-get install automake
    sudo apt-get install autotools-dev
    sudo apt-get install binutils
    sudo apt-get install expat
    sudo apt-get install gawk
    sudo apt-get install gcc
    sudo apt-get install gcc-multilib
    sudo apt-get install g++-multilib
    sudo apt-get install ia32-libs
    sudo apt-get install ksh
    sudo apt-get install less
    sudo apt-get install lesstif2
    sudo apt-get install lesstif2-dev
    sudo apt-get install lib32z1
    sudo apt-get install libaio1
    sudo apt-get install libaio-dev
    sudo apt-get install libc6-dev
    sudo apt-get install libc6-dev-i386
    sudo apt-get install libc6-i386
    sudo apt-get install libelf-dev
    sudo apt-get install libltdl-dev
    sudo apt-get install libmotif4
    sudo apt-get install libodbcinstq4-1 libodbcinstq4-1:i386
    sudo apt-get install libpth-dev
    sudo apt-get install libpthread-stubs0
    sudo apt-get install libpthread-stubs0-dev
    sudo apt-get install libstdc++5
    sudo apt-get install lsb-cxx
    sudo apt-get install make
    sudo apt-get install openssh-server
    sudo apt-get install pdksh
    sudo apt-get install rlwrap
    sudo apt-get install rpm
    sudo apt-get install sysstat
    sudo apt-get install unixodbc
    sudo apt-get install unixodbc-dev
    sudo apt-get install unzip
    sudo apt-get install x11-utils
    sudo apt-get install zlibc

4. check 上述的依赖包是否完全安装成功
apt-get install XXX 会看到提示信息,包已经存在,无更新,无error

  1. 检查系统变量

           sudo /sbin/sysctl -a | grep sem 
           sudo /sbin/sysctl -a | grep shm 
           sudo /sbin/sysctl -a | grep file-max 
           sudo /sbin/sysctl -a | grep aio-max 
           sudo /sbin/sysctl -a | grep ip_local_port_range 
           sudo /sbin/sysctl -a | grep rmem_default 
           sudo /sbin/sysctl -a | grep rmem_max 
           sudo /sbin/sysctl -a | grep wmem_default 
           sudo /sbin/sysctl -a | grep wmem_max 
           
    
  2. 根据上面命令5中得到的参数值在/etc/sysctl.conf中增加对应数据

    1. sudo vim /etc/sysctl.conf 打开文件配置上述的系统变量
    2. 配置5 中获取的数据
    fs.aio-max-nr = ? 
    fs.file-max = ?
    kernel.shmall = ?
    kernel.shmmax = ?
    kernel.shmmni = ?
    kernel.sem = ?
    net.ipv4.ip_local_port_range = ?
    net.core.rmem_default = ?
    net.core.rmem_max = ?
    net.core.wmem_default = ?
    net.core.wmem_max = ?
    
    
  3. 配置完成之后,使用command sudo sysctl -p 使得6中的更新生效

  4. 添加【对当前用户】的内核限制

    1. /etc/security/limits.conf 文件中增加以下数据
        XXX  soft nproc 2047
        XXX  hard nproc 16384 
        XXX  soft nofile 1024 
        XXX  hard nofile 65536 
        XXX  soft stack 10240
    
    

    备考-上述的XXX为当前的普通用户而非root用户

  5. 检查 /etc/pam.d/login的文件内容

    1. 不存在 session required pam\_limits.so内容时,进行追加
  6. 检查 /etc/pam.d/su的文件内容

    1. 不存在session required pam\_limits.so内容时,进行追加
  7. 在/etc/ubuntu-release 文件中如果不存在Ubuntu Linux release 14.04则进行追加

  8. oracle配置环境变量--oracle安装的时候差不多要占系统空间8个G左右

    1. 创建oracle 的环境目录 //上述第8步中的普通用户 xxx@Ubuntu14:~$ mkdir oracle11gsudo mkdir oracle11g

    2. 配置环境变量 export ORACLE_BASE=/home/xxx/oracle11g

    3. oracle安装目录 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

    4. 配置global database name -- 非必要【如果先选择only install software】

       // 创建oracle database 实例时应用 
       export ORACLE_SID=orcl
       // 在安装时会有一个设置的地方,默认是orcl,也可以设置成其他
       export ORACLE_UNQNAME=orcl
    

    5. 环境变量 export PATH=${PATH}:${ORACLE_HOME}/bin/:$ORACLE_HOME/lib64;

  9. Oracle默认不支持ubuntu需要欺骗一下Oracle安装程序,执行下述命令:

        sudo mkdir /usr/lib64 
        sudo ln -s /etc /etc/rc.d
        sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/
        sudo ln -s /usr/bin/awk /bin/awk
        sudo ln -s /usr/bin/basename /bin/basename
        sudo ln -s /usr/bin/rpm /bin/rpm
        sudo ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
        sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
        sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib64/
        sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/
        
    
正式安装
  1. 从官网下载oracle安装包,复制到/home/xxx/oracle11g,而后进行解压
cd /home/xxx/oracle11g/
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip

解压之后会出现一个database文件夹。

  1. 使用XServer 进行连接 非常重要,否则无法弹出安装的GUI画面【具体实施可参照安装问题中的XQuartz的使用】
  2. 启动oracle安装程序正式开始安装 进入database目录下,执行./runInstaller 然后进入图形化安装界面,接着根据安装向导提示进行。
    先决条件检查会提示一堆fails,不用管它,直接把ignore All勾上,然后直接按 finish.
  3. 安装后的目录 /tmp/oracle_install_package/database

安装中的问题

问题 1.

  1. 事象:依赖包-lesstif2无法直接安装成功 sudo apt-get -y install lesstif2 sudo apt-get -y install lesstif2-dev
  2. 原因:上述的依赖包是32位需要切换数据源镜像
  3. 解决方案:

问题 2:

  1. 事象:sudo apt-get install libstdc++5 无法安装
  2. 原因:libstdc++5 包太旧,无法通过apt-get install 进行下载。下载libstdc++5版本的deb包,试了很多源,包括阿里源等,没有这个版本的libstdc++
  3. 解决方案
    1. 离线下载文件---下载网址
    2. 下载对应的版本 32 位下载 XXX_i386
      64 位下载ibstdc++5_3.3.6-25ubuntu4_amd64.deb
    3. 将下载的文件上传到服务器中
    4. 执行sudo dpkg -i libstdc++5\_3.3.6-17ubuntu1\_amd64.deb命令进行安装

问题 3:

  1. 事象:在oracle服务安装过程中,安装进度为68% 时的出现的错误,提示 安装途中出现 ins_ctx.mk什么什么的错误提示,直接continue跳过。 image.png

问题 4:

  1. 事象:Error in invoking target ‘agent nmhs’ ofmakefile ‘/home/shiyajing/oracle11g/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk’ image.png

  2. 原因:主要就是对应的C++库的相关问题,具体原因可以查看提示信息中的log文件

  3. 解决方案

    1. 打开一个新终端,找到文件 /home/coldog/app/coldog/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk
    2. 将文件中的字符串$(MK_EMAGENT_NMECTL) 改修为 $(MK_EMAGENT_NMECTL)   -lnnz11 而后进行retry

问题 5:

  1. 事象: image.png 上述问题会出现多次。

  2. 原因:

  3. 解决方案

    1. 上述问题会出现多次,每次出现后需要按顺序依次执行下述脚本
    sudo sed -i 's/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/bin/genorasdksh 
    sudo sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk 
    sudo sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk 
    sudo sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk 
    

上述脚本需要再当前用户下,且每次执行一个脚本后,进行retry.若继续出现error提示,则执行下一个,依次直至不再弹出error信息

问题 6:

  1. 事象:安装过程提示swap 空间不够
  2. 原因:oracle11g 安装时关于swap(交换分区)的大小预期为3.74G
  3. 解决方案 创建swap 并指定其大小为
    // 查看当前系统的内存 空间
    free -m
    // 创建swapfile
    mkdir /swapfile
    // 指定swap 的大小
    cd /swapfile
    sudo dd if=/dev/zero of=swap bs=1024 count=400000
    sudo mkswap -f swap
    sudo swapon swap

补充说明`sudo dd if=/dev/zero of=swap bs=1024 count=400000`

  • sudo:以管理员权限运行该命令;
  • dd:数据备份和复制程序;
  • if=/dev/zero:使用 /dev/zero 设备中的零值作为输入;
  • of=swap:输出到名为 swap 的文件中;
  • bs=1024:输入/输出的字节数为 1024;
  • count=400000:复制 400000 块(每块大小为 bs);

总而言之,这个命令是创建一个名为 swap 的文件,并向其中写入 400000KB 的零值,用于作为 Linux 系统的交换区。可以根据实际情况调整 bs 和 count 参数的值。

服务安装完成后,创建DB实例

可参照的网址

安装步骤

前提只是要点

dbca //创建一个数据库
netca //配置监听器 --配置servicename
lsnrctl start //打开监听器
lsnrctl stop //停止监听器
lsnrctl status //查看监听器状态
sqlplus / as sysdba  // 链接数据库
startup  //开启数据库
  1. 安装实例前必要环境变量设定。【在普通用户下】登录控制台,配置当前用户下的环境变量ORACLE_SID 是指定数据库实例的唯一标识符,而 ORACLE_UNQNAME 则是指定唯一数据库名称.
    1. export ORACLE_SID=orcl
    2. export ORACLE_UNQNAME=orcl
    3. 使用source /etc/profile 使得上述设定生效
    4. 注意的问题点: 在使用oracle database assistant 时,创建的db的SID 与上述1.1中的内容保持一致
  2. 在普通用户下,执行dbca.成功打开oracle database assistant的图形页面 iShot_2023-05-25_23.10.46.png 3. 依据提示进行安装 -配置的global database name 与sid与上述设定的环境变量中的export ORACLE_SID=orcl一致

iShot_2023-05-25_23.12.16.png 4. 配置database的create option。选中Gnerate Database Scripts iShot_2023-05-25_23.18.02.png

  1. 最终实例安成功装完成 iShot_2023-05-25_23.34.54.png

  2. 解锁账户锁定 - 点击Password Management 按钮。 iShot_2023-05-25_23.34.54.png

  3. 在Database Configuration Assistant 中创建实例时,需要配置其listener

    1. 开启另一个窗体,以普通用户登录。在terminal 中输入netca即可打开监听的创建页面,而后依据提示进行listener的创建。
    2. 创建完成后,可通过lnsrctrl status查看创建的监听状态。
    3. lnsctrl start lnsctrl stop 分别用于开启监听与关闭监听
  4. 实例创建完成后,可通过在sqlplus中进行实例确认。

    1. 以普通用户登录,同时在terminal中输入sqlplus即可打开sqlplus image.png
    2. 依据提示进行登录。输入可访问oracle实例的用户名密码。如scott用户,其首次登录时,密码为 tiger首次登录后,系统会提示进行密码变更

. 数据库实例安装成功后,可进入sqlplus 进行数据实例确认。或执行必要的脚本 1 以普通用户进行登录,同时在terminal 中输入sqlplus即可打开sqlplus image.png

创建DB时的问题

问题1:

  1. 事象:查看监听状态时倒数第二行可能会报no service
  2. 原因
  3. 解决方案:
    cd  $ORACLE_HOME/network/admin,修改下面的listener.ora:
    //添加以下字段
    SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (SID_NAME = orcl)
      )
    )
    //其中orcl为你创建的数据库名
    //sqldeveloper连不上oracle的问题 
    解决方法:使用netmgr命令
    打开后Oracle Net Configuration->Local->Listeners->LISTENER->Add Address添加地址,
    Protocal: TCP/IP       Host: oracle所在的IP地址      Port:1521```
    
    

Centos 7 上离线安装postgresql-12

安装步骤

  1. 下载必要的依赖 image.png

2.按照顺序lib->12->server->contrib的顺序依次安装

安装中的问题

依赖一览下载

1.统一先运行

yum -y install libicu 
yum -y install libxslt

安装lib时提示缺少依赖

  1. 事象 image.png
  2. 解决案

image.png

image.png

安装12.15时提示依赖缺失

1.事象 image.png 2.解决案 image.png image.png image.png

安装server时提示缺少依赖

  1. 事象 image.png
  2. 解决方案 image.png image.png

安装contrib 时缺少依赖

  1. 事象

image.png 2. 解决案 跳过错误,强制安装 image.png

配置服务

  1. 初始化DB
/usr/pgsql-12/bin/postgresql-12-setup initdb 

2. 启动服务

systemctl start postgresql-12

3. 初始安装后postgre用户默认未设定密码 1. 使用命令sudo -u postgres psql进入psql环境 2. 设定用户密码:ALTER USER postgres WITH PASSWORD '新密码'; 4. 使用dump 文件恢复数据库 1. 使用命令创建要构建的DBcreate database 数据库名称 2. 使用命令行导出数据文件pg_dump -U postgres -d 数据库 -h 数据库服务地址> dump文件 3. 使用命令导入数据psql -U postgres -d 数据库 -f dump文件 5. 配置访问机制vi /var/lib/pgsql/12/data/postgresql.conf

listen_addresses = '*' 表示监听所有的ip信息
port = 5432 表示服务的端口,可以自定义为其他端口

6. 配置连接vi /var/lib/pgsql/12/data/pg_hba.conf

# IPv4 remote connections:
host all all 0.0.0.0/0 md5

7. 重启服务使更新的配置生效

sudo systemctl restart postgresql-12

使用PostgreSql的Stream copy 构建postgresql 集群

参考网址1

参考网址2

宿主机

10.212.225.87 -从机 10.212.225.88 -主机

前提 启动主数据服务,从数据库安装后先不启动

主机配置

添加流复制用户

create role pgrepuser replication login password 'pgreppass'
  1. 修改sudo vi /var/lib/pgsql/12/data/postgresql.conf
listen_addresses = '*'
port = 5432
max_connections = 100       # 最大连接数,据说从机需要大于或等于该值

# 控制是否等待wal日志buffer写入磁盘再返回用户事物状态信息。同步流复制模式需要打开。
synchronous_commit = off
# *=all,意思是所有slave都被允许以同步方式连接到master,但同一时间只能有一台slave是同步模式。
# 另外可以指定slave,将值设置为slave的application_name即可。
#synchronous_standby_names = '*'
wal_level = replica
max_wal_senders = 10   		#最多有2个流复制连接
wal_keep_segments = 20  	
wal_sender_timeout = 60s	#流复制超时时间

2. 修改sudo vi /var/lib/pgsql/12/data/pg_hba.conf

local all all trust
host all all 0.0.0.0/0 md5  #配置外部访问
host all all ::1/128 trust
host replication pgrepuser 0.0.0.0/0 md5 # 或可以变更MD5为trust

从机配置

  1. 备份原数据文件&清空数据文件夹 重点
# 先停掉服务,备份下本地数据,并清除本地数据
systemctl stop postgresql-12.service

# 备份本地数据
tar -zcvf /var/lib/pgsql/12/data.tar.gz /var/lib/pgsql/12/data
# 清楚本地数据
rm -rf /var/lib/pgsql/12/data

清空数据文件夹-问题

  1. 事象:无法清空

  2. 原因:权限不足

  3. 解决方案:sudo 方式删除。已然提示删除不可

  4. 最终解决方案:sudo su 切换到超级用户下。再次执行删除指令

  5. 使用pg_basebackup 备份主库数据

pg_basebackup -h 主数据库ip -p 5432 -U pgrepuser -Fp -Xs -Pv -R -D /var/lib/pgsql/12/data

# 正常终了后
pg_basebackup: base backup completed

3. 备份完成后会在目录 /var/lib/pgsql/12/data 下生成 standby.signal 文件 使用pg_basebackup 备份主库数据-问题 1. 事象: 部分数据提无法备份 2. 原因:部分文件权限不足 3. 解决方案:修改主机中针对/var/lib/pgsql/12/data下的操作权限 4. 设置从机上数据目录的权限/var/lib/pgsql/12/data下文件的拥有者都是postgres 且chmod 750 -R /var/lib/pgsql/12/data/*

    ![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ab1fb80c5f03434ca45a72051044152c~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=548\&h=681\&s=120691\&e=png\&b=010101)

设定热备模式,则需要进行下述4,5 的配置

  1. 编辑standby.signal文件 添加内容standby_mode = 'on'
  2. 配置sudo vi /var/lib/pgsql/12/data/postgresql.conf 的内容
primary_conninfo = 'host=主库ip port=5432 user=pgrepuser password= pgreppass'
recovery_target_timeline = latest # 默认
max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_wal_senders = 15

6. 启动从库sudo systemctl start postgresql-12 若报错:Job for postgresql-12.service failed because the control process exited with error code. See "systemctl status postgresql-12.service" and "journalctl -xe" for details.通过journalctl -xe 查看原因

配置完成后检查集群是否生效

  1. 在主机下执行
postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
# 结果可以看到从机的信息

2. 在主机下执行

# 设定输出内容扩展显示
postgres=# \x
 
# 使用查询语句 select * from pg_stat_replication
postgres=# select * from pg_stat_repliaction

# 可获取slave 从机的信息证明复制设定成功

postgresql 下手动主从切换

从库变更为主库

  1. 复制模式下,主数据库(Primary)数据库为读写的,备份数据库为只读的
  2. 主库出现故障时,需要将从库提升为主库
    1. 方式【psotgreSQL-version-12】中提供内置函数 pg_promote()进行切换
    # 关闭主库
    systemctl stop postgresql-12
    # 在从库上执行
    postgres=# select pg_promote(true,60)
    
    
    验证方式:
  •   关闭主库后,在从库中执行写语句,提示`cannot execute INSERT in a read-only transaction`
    
  •   执行命令 select pg_promote(true,60)后,即可执行写命令
    

    2. 使用pg_ctl 方式,在备库上执行pg_ctl promote shell脚本。

    # 在从库上执行
    /usr/pgsql-12/bin/pg_ctl promote -D /var/lib/pgsql/12/data
    
    
  1. 将原从库变更为主库后,需要变更文件pg_hba.conf文件追加复制信息
replication     all             0.0.0.0/0               md5

4. 在将原主库变更为从库后,最新的主库重新启动。启动后执行

# 查看从库信息
\x 
SELECT * FROM pg_stat_replication;

主库变更为从库

  1. 在目录/var/lib/pgsql/12/data/ 下创建文件standby.signal
  2. 修改数据库配置文件postgresql.auto.conf 文件
 primary_conninfo='user=postgres password=xxx host=xxx.xxx.xxx.xxx port=5432'

3. 注释掉原主库中的配置信息。如pg_hba.conf中的复制信息 4. 注释掉原主库信息中配置的信息。sudo vi /var/lib/pgsql/12/data/postgresql.conf 的内容 primary_conninfo = 'host=10.212.229.88 port=5432 user=pgrepuser password= pgreppass' recovery_target_timeline = latest # 默认 max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小 hot_standby = on max_standby_streaming_delay = 30s wal_receiver_status_interval = 10s hot_standby_feedback = on max_wal_senders = 15

centos7 中设定SSH免密登录

两台服务器。服务器A中免密登录服务器B

  1. 在服务器A中使用下述命令生成公钥
# 点击enter 键
ssh-keygen -t rsa

2. 使用cat 指令查看生成的key

cat ~/.ssh/id_rsa.pub

3. 使用ssh指令将2中的key复制到服务器B中的 authorized_keys

# 2中的key值替换下述脚本中的 your_public_key_here
ssh scapp@10.247.170.33 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo 'your_public_key_here' >> ~/.ssh/authorized_keys"

4. 检证免密登录成功

# 服务器A中执行小数脚本,无登录密码提示
ssh 服务器B的ip

postgresql 查看database

image.png

Postgresql 完全卸载

Centos7 下卸载postgresql-12 -删除目录

# 停止服务
sudo systemctl stop postgresql-12
# 停止相关的进程
sudo killall -9 postgres
# 移除相关文件
sudo rm -rf /usr/pgsql-12/
sudo rm -rf /var/lib/pgsql/12/data/
sudo rm -rf /var/lib/pgsql/12/

# 移除环境变量
export PATH=/usr/pgsql-12/bin:$PATH
# 移除服务
sudo rm -rf /etc/systemd/system/postgresql-12.service
# 移除log文件
sudo rm -rf /var/log/postgresql/

Centos7 下卸载postgresql-12 -删除已安装的安装包

# 查看已经安装的postgresql的包
rpm -qa | grep postgresql12

# 卸载-卸载顺序,contrib->server->12->lib 与安装顺序相反
rpm -e package_name

Centos7 上离线安装pgpool4.1

参考网址

安装步骤

  1. 下载离线安装包

image.png

  1. 按照顺序依次安装pg12-4.1.1->debuginfo->devel-extension

  2. 配置文件pgpool.conf中设定允许其他链接访问

# 将listen_addresses的值由localhost=>*
listen_addresses='*'

4. 设定PCP命令 pgpool为了管理的目的默认提供了用于获取数据库的节点信息的接口。为了使用PCP Command需要配置用户名与md5加密后密码 1. 获取暗号化的密码

<!---->

    # 首先使用工具获取暗号化后的密码
    sudo /usr/bin/pg_md5 Admin@postgres
    6edfd5096c8135cb346b82c07ee21eb1
2.  文件`pcp.conf`中追加暗号化的用户名与密码

<!---->

     postgres:6edfd5096c8135cb346b82c07ee21eb1

5. 配置文件pgpool.conf中设定设置数据库节点信息 1. 设定数据库节点 pgpool connection setting ``` # Backend Connection Settings # Host name or IP address to connect to for backend 0 backend_hostname0 = '10.212.226.8'

    backend_port0 = 5432
    # Weight for backend 0 (only in load balancing mode)                               
    backend_weight0 = 1
                                    
    backend_data_directory0 = '/var/lib/pgsql/12/data'
                                     
    backend_flag0 = 'ALLOW_TO_FAILOVER'
                                    
    backend_application_name0 = 'server0'
                                      
    backend_hostname1 = '10.212.226.9'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_data_directory1 = '/var/lib/pgsql/12/data'
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    backend_application_name1 = 'server1'

```
2.  设定**authentication** 模块
    是否启用pgpool 自己的认证,默认开启。其用户名,密码等信息在文件`pool_passwd`文件中进行维护
    可以使用command 添加新用户 `pg_md5 -p -m -u username pool_passwd`后续提示输入密码

<!---->

    # - Authentication
    # Use pool_hba.conf for client authentication
    enable_pool_hba = on
    # File name of pool_passwd for md5 authentication.
    # "" disables pool_passwd.
    # (change requires restart)                                  
    pool_passwd = 'pool_passwd
    # Delay in seconds to complete client authentication
                                      # 0 means no timeout.     
    authentication_timeout = 60
                                      
    # Allow Pgpool-II to use clear text password authentication
    # with clients, when pool_passwd does not
    # contain the user password
    allow_clear_text_frontend_auth = off
3.  配置健康检查以及流复制用户信息
```

#------------------------------------------------------------------------------
# MASTER/SLAVE MODE
#------------------------------------------------------------------------------

# Activate master/slave mode
# (change requires restart)                                 
master_slave_mode = on
# Master/slave sub mode
# Valid values are combinations stream, slony
# or logical. Default is stream.
# (change requires restart)                                                             
master_slave_sub_mode = 'stream'
                                  

# - Streaming -
# Streaming replication check period
# Disabled (0) by default
sr_check_period = 0
                                  
# Streaming replication check user 
# This is necessary even if you disable
# streaming replication delay check with
# sr_check_period = 0                                
sr_check_user = 'postgres'
                                  
                                   
                                  
# Password for streaming replication check user.
# Leaving it empty will make Pgpool-II to first look for the
# Password in pool_passwd file before using the empty password
sr_check_password = 'Admin@postgres'
                                   
                                 
# Database name for streaming replication check
sr_check_database = 'iiotkit'
# Threshold before not dispatching query to standby node                                   # Unit is in bytes
# Disabled (0) by default
delay_threshold = 0
```

6. 验证pgpool的读写分离设定成功

 # 使用pgpool的构建连接
 psql -U postgres -d iiotkit -p 9999
 
 # 执行下述命令查看各个节点的具体的信息
 show pool_nodes;

image.png

安装中的问题

🟥 安装 pgpool-II-pg12-4.1.1-1pgdg.rhel7.x86_64.rpm

  1. 事象:

image.png

  1. 原因:缺少依赖
  2. 解决方案
sudo yum install libnsl

image.png

使用PostgresSQL-XL构建PostgreSQL集群

基础知识

  1. 说明

    • PostgreSQL-XL 水平扩展开源的SQL数据库集群。
  2. 架构

    • 组成图示 image.png
    • 组件说明
      1. GMT
        • GTM是XL的关键组件,用于提供一致的事务管理和元组可见性控制。
      2. Coordinators
        • 协调器管理用户会话,并与GTM和数据节点进行交互。协调器解析和计划查询,并向语句中涉及的每个组件发送序列化的全局计划。
      3. Data Nodes
        • 数据节点是存储实际数据的地方。数据的分布可以由DBA配置。为了提高可用性,可以将数据节点的热备用配置为故障转移就绪
  3. pgpool-ii 与 PostgreSQL-XL的对比

PGPOOL_IIPOSTGRESQL_XL
实现机制独立于PG的中间件在PG的特定版本上改进
适用场景主从结构的小集群大规模的集群
扩展性不支持扩展节点可进行节点扩展,但存在部分限制
功能提供数据库连接池,虚拟IP,自动的负载均衡多个Coordinators 间的负载均衡需要依赖第三方实现,故障恢复手动实现
数据分布数据冗余分布在每一个节点支持冗余分布,也支持分片存储
存在问题写的性能受限,其写性能低于单机版的PG无法使用任意版本的PG,创建新的Datanode后之前的数据无法自动同步

Centos 7 下postgresql-12 提示磁盘空间已满

原因:

  1. 日志文件,未及时归档。
  2. 数据量较大

解决方案-磁盘挂载

实现步骤:

  1. 查看当前系统文件信息 df -h image.png

  2. 查看磁盘空间 fdisk -l image.png

  3. 查看一下分区情况(发现vdb还没有分区) lsblk image.png

  4. 格式化磁盘,否则无法绑定。创建ext4 在设备vdb 上 dev 表示设备 mkfs.ext4 /dev/vdb check 文件是否创建成功

    1. 使用 lsblk 命令确认设备名称。运行以下命令来查看设备列表:
    1. sudo file -s /dev/vdb
  • 如果输出显示为 filesystem 或 Linux filesystem,则说明 ext4 文件系统已成功创建。 注意点:mkfs.ext4 命令会格式化设备并删除其中的所有数据,因此在运行该命令之前,确保你已经备份了设备上的重要数据。
  1. 创建挂载目录 sudo mkdir -p /mnt/postgresql-data/
  2. 挂载 sudo mount /dev/vdb /mnt/postgresql-data/
    1. /dev/vdb 表示磁盘文件【被挂载的磁盘空间-存储空间大】
    1. /mnt/postgresql-data 表示构的挂载目录 注意:验证挂载成功 执行mount | grep /mnt/postgresql-data若生成
/dev/vdb on /mnt/postgresql-data type ext4 (rw)

则表示挂载成功

  1. 配置挂载目录的用户,用户组
    sudo chown postgres:postgres /mnt/postgresql-data/
  2. 备份原要挂载的目录
    sudo rsync -av /var/lib/pgsql/12/data/ /mnt/postgresql-data
  3. 修改postgresql中的postgresql.conf 文件中
data_directory = '/mnt/postgresql-data'

10. 设定挂载持久有效 编辑/etc/fstab文件来实现。/etc/fstab文件包含了系统启动时自动挂载的文件系统的信息。

  • /etc/fstab文件中添加一行来描述你要挂载的设备或分区。UUID行的格式如下
    UUID=<设备UUID> <挂载路径> <文件系统类型> <挂载选项> <dump> <fsck顺序>
  • 设备路径挂载
    /dev/<设备路径> <挂载路径> <文件系统类型> <挂载选项> <dump> <fsck顺序>

示例:

/dev/vdb /mnt/postgresql-data ext4 defaults  0  0