国产数据库OpenGauss 安装
安装环境
- OS: centos7.9
- 数据库:轻量版 openGauss -version 5.0.0
- 安装:单节点安装
参考网址
Mac 的远程连接工具 royal tsx 安装
安装步骤
- 安装软件下载 Royal tx
- 安装 选择ignore license
- 安装插件
- Royal tx 的plugins
- 安装拆件terminal
- 安装插件file transfer
- 重新启动使得插件生效
- 创建Document
- File -> New Document
- Royal 中以document 管理连接。安装后默认会有一个名为application的document 并且免费版只可以构建一个Document
- 创建远程主机凭证
- 连接远程主机时,通常需要提供密码进行安全校验,在 Royal TSX 中,可以创建凭证,将服务器的用户名和密码保存起来,在进行连接或进行 FTP 操作时,直接关联,就不用每次都输入了.
- Credentials->add->Credential
- Terminal 基础设置
- 设置 Terminal 的默认凭证 给Termianl绑定上述定义的credential
- 设置Terminal 默认不断开 Session
- Terminal->Advanced->Seesion
- Terminal->Advanced->Seesion
- FTP 基础设置
- File Transfer
10. 连接测试
- 如果认证信息已经如上述步骤已配置,则该步骤秩序填写远程要连接的计算机名称,与链接名称
Ubuntu14.04 下oracle11g 的安装
环境
- OS : ubuntu14.04 Ubuntu 14.04.5 LTS
lsb_release -a命令行查看系统信息
- JDK: JDK:jdk-8u121-linux-x64.tar.gz
- Oracle: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
- Mac:Ruyal TSX & XQuartz
- XQuartz-款集成了XServer 的命令行窗体。使用其可直接实现与ubuntu的X11通信。 实现在XQuartz上显示GUI
安装步骤
[按照参照](ubuntu 14.04 oracle 11g 64位数据库安装 - 简书 (jianshu.com))
事前准备
安装包下载
-
安装软件的下载--- 下载地址
-
下载步骤
-
搜索需要的版本
-
加入到下载队列后,点击View items
-
点击continue
-
-
下载完成后,可得到文件
- linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
-
上传安装文件
安装依赖
- 更新apt源文件
- 备份原有的apt源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list_back - 添加下列的镜像源到文件
sources.list中sudo vim /etc/apt/sources.list
- 备份原有的apt源文件
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
-
更新apt 使得上述更新的文件生效
sudo apt-get update
-
安装依赖包--一定要确保每个包安装成功
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
-
检查系统变量
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 -
根据上面命令5中得到的参数值在/etc/sysctl.conf中增加对应数据
sudo vim /etc/sysctl.conf打开文件配置上述的系统变量- 配置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 = ? -
配置完成之后,使用command
sudo sysctl -p使得6中的更新生效 -
添加【对当前用户】的内核限制
- /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用户
-
检查 /etc/pam.d/login的文件内容
- 不存在
session required pam\_limits.so内容时,进行追加
- 不存在
-
检查 /etc/pam.d/su的文件内容
- 不存在
session required pam\_limits.so内容时,进行追加
- 不存在
-
在/etc/ubuntu-release 文件中如果不存在
Ubuntu Linux release 14.04则进行追加 -
oracle配置环境变量--oracle安装的时候差不多要占系统空间8个G左右
-
创建oracle 的环境目录 //上述第8步中的普通用户 xxx@Ubuntu14:~$ mkdir oracle11gsudo mkdir oracle11g
-
配置环境变量
export ORACLE_BASE=/home/xxx/oracle11g -
oracle安装目录
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 -
配置global database name -- 非必要【如果先选择only install software】
// 创建oracle database 实例时应用 export ORACLE_SID=orcl // 在安装时会有一个设置的地方,默认是orcl,也可以设置成其他 export ORACLE_UNQNAME=orcl5. 环境变量
export PATH=${PATH}:${ORACLE_HOME}/bin/:$ORACLE_HOME/lib64; -
-
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/
正式安装
- 从官网下载oracle安装包,复制到/home/xxx/oracle11g,而后进行解压
cd /home/xxx/oracle11g/
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
解压之后会出现一个database文件夹。
- 使用XServer 进行连接 非常重要,否则无法弹出安装的GUI画面【具体实施可参照安装问题中的XQuartz的使用】
- 启动oracle安装程序正式开始安装
进入database目录下,执行
./runInstaller然后进入图形化安装界面,接着根据安装向导提示进行。
先决条件检查会提示一堆fails,不用管它,直接把ignore All勾上,然后直接按 finish. - 安装后的目录
/tmp/oracle_install_package/database
安装中的问题
问题 1.
- 事象:依赖包-lesstif2无法直接安装成功 sudo apt-get -y install lesstif2 sudo apt-get -y install lesstif2-dev
- 原因:上述的依赖包是32位需要切换数据源镜像
- 解决方案:
问题 2:
- 事象:sudo apt-get install libstdc++5 无法安装
- 原因:libstdc++5 包太旧,无法通过apt-get install 进行下载。下载libstdc++5版本的deb包,试了很多源,包括阿里源等,没有这个版本的libstdc++
- 解决方案
- 离线下载文件---下载网址
- 下载对应的版本 32 位下载 XXX_i386
64 位下载ibstdc++5_3.3.6-25ubuntu4_amd64.deb - 将下载的文件上传到服务器中
- 执行
sudo dpkg -i libstdc++5\_3.3.6-17ubuntu1\_amd64.deb命令进行安装
问题 3:
- 事象:在oracle服务安装过程中,安装进度为68% 时的出现的错误,提示
安装途中出现 ins_ctx.mk什么什么的错误提示,直接continue跳过。
问题 4:
-
事象:
Error in invoking target ‘agent nmhs’ ofmakefile ‘/home/shiyajing/oracle11g/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk’ -
原因:主要就是对应的C++库的相关问题,具体原因可以查看提示信息中的log文件
-
解决方案
- 打开一个新终端,找到文件
/home/coldog/app/coldog/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk - 将文件中的字符串
$(MK_EMAGENT_NMECTL)改修为$(MK_EMAGENT_NMECTL) -lnnz11而后进行retry
- 打开一个新终端,找到文件
问题 5:
-
事象:
上述问题会出现多次。
-
原因:
-
解决方案
- 上述问题会出现多次,每次出现后需要按顺序依次执行下述脚本
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:
- 事象:安装过程提示swap 空间不够
- 原因:oracle11g 安装时关于swap(交换分区)的大小预期为3.74G
- 解决方案 创建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 //开启数据库
- 安装实例前必要环境变量设定。【在普通用户下】登录控制台,配置当前用户下的环境变量
ORACLE_SID是指定数据库实例的唯一标识符,而ORACLE_UNQNAME则是指定唯一数据库名称.export ORACLE_SID=orclexport ORACLE_UNQNAME=orcl- 使用
source /etc/profile使得上述设定生效 - 注意的问题点: 在使用oracle database assistant 时,创建的db的SID 与上述1.1中的内容保持一致
- 在普通用户下,执行
dbca.成功打开oracle database assistant的图形页面3. 依据提示进行安装 -配置的global database name 与sid与上述设定的环境变量中的
export ORACLE_SID=orcl一致
4. 配置database的create option。选中Gnerate Database Scripts
-
最终实例安成功装完成
-
解锁账户锁定 - 点击Password Management 按钮。
-
在Database Configuration Assistant 中创建实例时,需要配置其listener
- 开启另一个窗体,以普通用户登录。在terminal 中输入
netca即可打开监听的创建页面,而后依据提示进行listener的创建。 - 创建完成后,可通过
lnsrctrl status查看创建的监听状态。 lnsctrl startlnsctrl stop分别用于开启监听与关闭监听
- 开启另一个窗体,以普通用户登录。在terminal 中输入
-
实例创建完成后,可通过在
sqlplus中进行实例确认。- 以普通用户登录,同时在terminal中输入
sqlplus即可打开sqlplus - 依据提示进行登录。输入可访问oracle实例的用户名密码。如
scott用户,其首次登录时,密码为tiger首次登录后,系统会提示进行密码变更
- 以普通用户登录,同时在terminal中输入
. 数据库实例安装成功后,可进入sqlplus 进行数据实例确认。或执行必要的脚本
1 以普通用户进行登录,同时在terminal 中输入sqlplus即可打开sqlplus
创建DB时的问题
问题1:
- 事象:查看监听状态时倒数第二行可能会报no service
- 原因
- 解决方案:
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
安装步骤
- 下载必要的依赖
2.按照顺序lib->12->server->contrib的顺序依次安装
安装中的问题
1.统一先运行
yum -y install libicu
yum -y install libxslt
安装lib时提示缺少依赖
- 事象
- 解决案
安装12.15时提示依赖缺失
1.事象
2.解决案
安装server时提示缺少依赖
- 事象
- 解决方案
安装contrib 时缺少依赖
- 事象
2. 解决案 跳过错误,强制安装
配置服务
- 初始化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'
- 修改
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
从机配置
- 备份原数据文件&清空数据文件夹 重点
# 先停掉服务,备份下本地数据,并清除本地数据
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
清空数据文件夹-问题
-
事象:无法清空
-
原因:权限不足
-
解决方案:
sudo方式删除。已然提示删除不可 -
最终解决方案:
sudo su切换到超级用户下。再次执行删除指令 -
使用
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/*

设定热备模式,则需要进行下述4,5 的配置
- 编辑
standby.signal文件 添加内容standby_mode = 'on' - 配置
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 查看原因
配置完成后检查集群是否生效
- 在主机下执行
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 下手动主从切换
从库变更为主库
- 复制模式下,主数据库(Primary)数据库为读写的,备份数据库为只读的
- 主库出现故障时,需要将从库提升为主库
- 方式【psotgreSQL-version-12】中提供内置函数
pg_promote()进行切换
验证方式:# 关闭主库 systemctl stop postgresql-12 # 在从库上执行 postgres=# select pg_promote(true,60) - 方式【psotgreSQL-version-12】中提供内置函数
-
关闭主库后,在从库中执行写语句,提示`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
- 将原从库变更为主库后,需要变更文件
pg_hba.conf文件追加复制信息
replication all 0.0.0.0/0 md5
4. 在将原主库变更为从库后,最新的主库重新启动。启动后执行
# 查看从库信息
\x
SELECT * FROM pg_stat_replication;
主库变更为从库
- 在目录
/var/lib/pgsql/12/data/下创建文件standby.signal - 修改数据库配置文件
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
- 在服务器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
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
安装步骤
- 下载离线安装包
-
按照顺序依次安装pg12-4.1.1->debuginfo->devel-extension
-
配置文件
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;
安装中的问题
🟥 安装 pgpool-II-pg12-4.1.1-1pgdg.rhel7.x86_64.rpm
- 事象:
- 原因:缺少依赖
- 解决方案
sudo yum install libnsl
使用PostgresSQL-XL构建PostgreSQL集群
基础知识
-
说明
- PostgreSQL-XL 水平扩展开源的SQL数据库集群。
-
架构
- 组成图示
- 组件说明
- GMT
- GTM是XL的关键组件,用于提供一致的事务管理和元组可见性控制。
- Coordinators
- 协调器管理用户会话,并与GTM和数据节点进行交互。协调器解析和计划查询,并向语句中涉及的每个组件发送序列化的全局计划。
- Data Nodes
- 数据节点是存储实际数据的地方。数据的分布可以由DBA配置。为了提高可用性,可以将数据节点的热备用配置为故障转移就绪
- GMT
- 组成图示
-
pgpool-ii 与 PostgreSQL-XL的对比
| PGPOOL_II | POSTGRESQL_XL | |
|---|---|---|
| 实现机制 | 独立于PG的中间件 | 在PG的特定版本上改进 |
| 适用场景 | 主从结构的小集群 | 大规模的集群 |
| 扩展性 | 不支持扩展节点 | 可进行节点扩展,但存在部分限制 |
| 功能 | 提供数据库连接池,虚拟IP,自动的负载均衡 | 多个Coordinators 间的负载均衡需要依赖第三方实现,故障恢复手动实现 |
| 数据分布 | 数据冗余分布在每一个节点 | 支持冗余分布,也支持分片存储 |
| 存在问题 | 写的性能受限,其写性能低于单机版的PG | 无法使用任意版本的PG,创建新的Datanode后之前的数据无法自动同步 |
Centos 7 下postgresql-12 提示磁盘空间已满
原因:
- 日志文件,未及时归档。
- 数据量较大
解决方案-磁盘挂载
实现步骤:
-
查看当前系统文件信息
df -h -
查看磁盘空间
fdisk -l -
查看一下分区情况(发现vdb还没有分区)
lsblk -
格式化磁盘,否则无法绑定。创建ext4 在设备vdb 上 dev 表示设备
mkfs.ext4 /dev/vdbcheck 文件是否创建成功
-
- 使用
lsblk命令确认设备名称。运行以下命令来查看设备列表:
- 使用
-
sudo file -s /dev/vdb
- 如果输出显示为
filesystem或Linux filesystem,则说明 ext4 文件系统已成功创建。 注意点:mkfs.ext4命令会格式化设备并删除其中的所有数据,因此在运行该命令之前,确保你已经备份了设备上的重要数据。
- 创建挂载目录
sudo mkdir -p /mnt/postgresql-data/ - 挂载
sudo mount /dev/vdb /mnt/postgresql-data/
-
- /dev/vdb 表示磁盘文件【被挂载的磁盘空间-存储空间大】
-
- /mnt/postgresql-data 表示构的挂载目录
注意:验证挂载成功
执行
mount | grep /mnt/postgresql-data若生成
- /mnt/postgresql-data 表示构的挂载目录
注意:验证挂载成功
执行
/dev/vdb on /mnt/postgresql-data type ext4 (rw)
则表示挂载成功
- 配置挂载目录的用户,用户组
sudo chown postgres:postgres /mnt/postgresql-data/ - 备份原要挂载的目录
sudo rsync -av /var/lib/pgsql/12/data/ /mnt/postgresql-data - 修改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