五分钟完成PolarDB替换postgresql

前提:内网项目,无互联网环境,当前操作系统:Centos7.6

1.离线安装docker(如果已有docker可跳过)
(1)将docker的压缩包传入服务器,并解压

tar -zxvf docker-18.06.3-ce.tgz

(2)将解压内容复制到/usr/bin/下

cp docker/* /usr/bin/

(3)创建docker服务

vi /etc/systemd/system/docker.service

输入以下内容

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

Restart=always

TimeoutStartSec=0

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

Delegate=yes

KillMode=process

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

(4)保存后依次执行以下命令

systemctl daemon-reload

systemctl start docker

systemctl enable docker

systemctl status docker

2.运行PolarDB容器
(1)将打包好的镜像传入服务器,并引入

docker load < polardb.tar

(2)执行docker run命令

docker run -d \

  --cap-add=SYS_PTRACE \

  --privileged=true \

  --restart=always \

  --name polardb_container \

  --env POLARDB_PORT=5432 \

  --env POLARDB_USER=postgres \

  --env POLARDB_PASSWORD=postgres \

  -p 5432:5432 \

  polardb/polardb_pg_local_instance:11.9.20.0

3.设置数据库定时备份,以及测试恢复数据库功能
(1)新建存放备份内容的文件夹

mkdir -p /polar_backup/backup

mkdir -p /polar_backup/backup_log

(2)编写备份脚本

vi /polar_backup/db_backup.sh

输入以下内容

#!/bin/bash
# === 配置部分 ===
CONTAINER_NAME="polardb_container"              # 容器名称
DB_NAME="postgres"                                 # 数据库名称
DB_USER="postgres"                               # 数据库用户名
BACKUP_DIR="/polar_backup/backup"                  # 宿主机备份目录
RETENTION_DAYS=30                                # 保留天数
# === 生成备份文件名 ===
TIMESTAMP=$(date +"%Y%m%d_%H%M")
BACKUP_FILE="${DB_NAME}_${TIMESTAMP}.backup"
CONTAINER_PATH="/tmp/${BACKUP_FILE}"
# === 创建宿主机备份目录(如不存在) ===
mkdir -p "$BACKUP_DIR"
# === 执行数据库备份 ===
echo "Starting backup of database '${DB_NAME}' from container '${CONTAINER_NAME}'..."
docker exec "$CONTAINER_NAME" mkdir -p /var/polardb_backup
docker exec "$CONTAINER_NAME" pg_dump -U "$DB_USER" -F c -b -v -f "$CONTAINER_PATH" "$DB_NAME"
if [ $? -ne 0 ]; then
  echo "❌ Backup failed."
  exit 1
fi
# === 拷贝备份文件到宿主机 ===
docker cp "${CONTAINER_NAME}:${CONTAINER_PATH}" "${BACKUP_DIR}/${BACKUP_FILE}"
if [ $? -eq 0 ]; then
  echo "✅ Backup successful: ${BACKUP_DIR}/${BACKUP_FILE}"
else
  echo "❌ Failed to copy backup file to host."
  exit 1
fi
# === 清理超过指定天数的旧备份 ===
echo "     Cleaning up backups older than ${RETENTION_DAYS} days..."
find "$BACKUP_DIR" -name "${DB_NAME}_*.backup" -type f -mtime +${RETENTION_DAYS} -exec rm -f {} \;
echo "✅ Cleanup complete."

(3)给脚本赋权

chmod +x /polar_backup/db_backup.sh

可以执行sh  /polar_backup/db_backup.sh 测试一下脚本

(4)设置每日定时

执行命令 crontab -e

在里面输入
0 2 * * * /polar_backup/db_backup.sh >> /polar_backup/backup_log/backup_log.txt 2>&1

意思是每天凌晨两点执行,备份的日志保存到polar_backup下的backup_log中

(5)恢复备份内容脚本

vi /polar_backup/db_restore.sh

输入以下内容

#!/bin/bash
# === Config===
CONTAINER_NAME="polardb_container"
DB_NAME="postgres"
DB_USER="postgres"
BACKUP_DIR="/polar_backup/backup"
BACKUP_FILE="$1"
if [ -z "$BACKUP_FILE" ]; then
  echo "please input your backup file name:for example"
  echo "   ./restore_yczhdb.sh yczhdb_20250519_1414.backup"
  exit 1
fi
HOST_BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILE}"
CONTAINER_BACKUP_PATH="/tmp/${BACKUP_FILE}"
# === check file is exist===
if [ ! -f "$HOST_BACKUP_PATH" ]; then
  echo "cannot find file:$HOST_BACKUP_PATH"
  exit 1
fi
# === copy to docker ===
echo "copy to docker..."
docker cp "$HOST_BACKUP_PATH" "${CONTAINER_NAME}:${CONTAINER_BACKUP_PATH}"
echo "restore db ${DB_NAME}..."
docker exec -i "$CONTAINER_NAME" pg_restore -U "$DB_USER" -d "$DB_NAME" --clean --verbose "$CONTAINER_BACKUP_PATH"
if [ $? -eq 0 ]; then
  echo "database ${DB_NAME} restore from ${BACKUP_FILE} successfly"
else
  echo "restore fail"
  exit 1
fi

给脚本赋权 chmod +x /polar_backup/db_restore.sh

需要恢复时,执行命令sh /polar_backup/db_restore.sh postgres_20250519_1435.backup即可

后续有空再写每个操作的详细说明,以及需要用的文件

补充:

(1)polardb的镜像,因为原系统用的PG11,固使用的polardb11的版本,在dockerhub中有更高版本,通过网盘分享的文件:polardb.tar
链接: https://pan.baidu.com/s/1foSX_kmEgsFlQYHTSF-A8Q 提取码: n63t

(2)docker的离线安装包,适用于Cerntos7.6,通过网盘分享的文件:docker-18.06.3-ce.tgz
链接: https://pan.baidu.com/s/1ePr5DzIiVutYeaciB0tmAQ 提取码: b7i2

### 关于 PolarDB for PostgreSQL 的 Windows 安装与部署 目前官方文档和社区资源主要集中在 Linux 平台上对于 PolarDB for PostgreSQL 的安装与部署[^1]。然而,在 Windows 上安装和部署 PolarDB for PostgreSQL 尚未被广泛支持或记录,因为该数据库系统的设计初衷更倾向于类 Unix 系统环境。 尽管如此,可以通过以下方法尝试实现 PolarDB for PostgreSQL 在 Windows 上的运行: #### 方法一: 使用虚拟机技术 可以借助 VirtualBox 或 VMware 创建一个基于 Linux 的虚拟机环境,并在其内部完成 PolarDB for PostgreSQL 的安装与配置过程[^2]。此方式能够充分利用现有的成熟安装指南并保持系统的稳定性。 #### 方法二: 利用 WSL (Windows Subsystem for Linux) 微软推出的 WSL 提供了一个兼容层来运行 GNU/Linux 二进制应用程序而无需修改它们。因此,理论上可以在 WSL 中按照标准流程执行 PolarDB for PostgreSQL 的安装操作[^4]。需要注意的是,这种方法可能遇到性能瓶颈或者某些特定功能无法正常工作的情况。 #### 示例代码 - 修改 .bash_profile 文件 如果决定采用上述任一种方案,则需注意编辑用户的 shell 初始化脚本 `.bash_profile` 来设置必要的环境变量: ```bash export PATH=/usr/local/pgsql/bin:$PATH export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH source ~/.bash_profile ``` 以上命令片段展示了如何向 `PATH` 和 `LD_LIBRARY_PATH` 添加自定义路径以便访问 PolarDB 工具集及其依赖库。 #### 注意事项 由于缺乏针对 Windows 平台的具体指导材料,实际实施过程中可能会面临诸多挑战,包括但不限于服务启动失败、权限不足等问题。建议密切跟踪项目更新动态以及查阅相关论坛讨论区获取最新进展信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值