点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
替换GAUSSHOME为2.0.1,然后dump备份数据,重装一个2.0.2,再把数据导入。
1.1 备份软件目录、数据目录(注意磁盘空间使用)
查询磁盘空间大小:
df -h
备份软件目录:
cp /database/panweidb/app database/panweidb/app_bak
备份数据目录:
cp /database/panweidb/data database/panweidb/data_bak
1.2 上传安装包到/soft目录,并创建panweidb_201目录
mkdir panweidb_201
解压安装包:
tar zxvf PanWeiDB-2.0.0_Build0\(9fbca90\)-bclinux_euler21.10-x86_64-no_mot.tar.gz -C panweidb_201
cd panweidb_201
tar xvf PanWeiDB-2.0.0_Build0\(9fbca90\)-bclinux-64bit.tar.bz2 -C database/panweidb/app
1.3 登入omm用户启动数据库
su - omm
pw_ctl start
1.4 检查数据库是否为2.0.1
psql -r查看commit号
1.5 使用dump备份数据
nohup gs_dumpall -p 5432 -U pwadmin -f /database/all_databases_backup.sql > database/backup.log 2>&1 &
1.6 重新安装2.0.2数据库,并创建好相应的数据库用户及赋权
1.7 数据导入
nohup gsql -d postgres -p 5432 -U panweidb -f /database/all_databases_backup.sql > database/restore.log 2>&1 &
替换GAUSSHOME为2.0.1,用patch升级为2.0.2。
2.1 备份软件目录、数据目录(注意磁盘空间使用)
查询磁盘空间大小:
df -h
备份软件目录:
cp /database/panweidb/app database/panweidb/app_bak
备份数据目录:
cp /database/panweidb/data database/panweidb/data_bak
2.2 上传安装包到/soft目录,并创建panweidb_201目录
mkdir panweidb_201
解压安装包:
tar zxvf PanWeiDB-2.0.0_Build0\(9fbca90\)-bclinux_euler21.10-x86_64-no_mot.tar.gz -C panweidb_201
cd panweidb_201
tar xvf PanWeiDB-2.0.0_Build0\(9fbca90\)-bclinux-64bit.tar.bz2 -C database/panweidb/app
2.3 登入omm用户启动数据库
su - omm
pw_ctl start
2.4 检查数据库是否为2.0.1
psql -r查看commit号
2.5 使用dump备份数据
nohup gs_dumpall -p 5432 -U pwadmin -f /database/all_databases_backup.sql > database/backup.log 2>&1 &
2.6 上传2.0.2patch包到/soft目录,并创建panweidb_202B01目录
mkdir panweidb_202B01
2.7 解压安装包
tar zxvf PanWeiDB_V2.0-S2.0.2_B01-patch-bclinux_euler21.10-x86_64.tar.gz -C panweidb_202B01/
cd panweidb_202B01/patch/
tar zxvf PanWeiDB_V2.0-S2.0.2_B01-patch-bclinux_euler21.10-x86_64.tar.gz
2.8 执行升级前置步骤(使用root用户)
cd /soft/panweidb_202B01/patch/PanWeiDB_V2.0-S2.0.2_B01-patch-bclinux_euler21.10-x86_64/PWPatch/script
./pwpatch --setparam -u omm -g dbgrp -a /database/panweidb/app -d database/panweidb/data -p 5432 -t home/omm/omTmp/tmp
./pwpatch -C
./pwpatch -P
2.9 使用omm用户进行升级
cd /soft/panweidb_202B01/patch/PanWeiDB_V2.0-S2.0.2_B01-patch-bclinux_euler21.10-x86_64/PWPatch/script
2.10 检查数据库是否为2.0.2
psql -r查看commit号
2.11 检查 \d+ pg_catalog.pg_subscription
3.1 创建存储表
CREATE TABLE schema_comparison (
database_name TEXT,
schema_name TEXT,
table_name TEXT,
structure_hash TEXT, -- 用于存储系统表的哈希值
row_count BIGINT, -- 用于存储数据表的行数
environment TEXT, -- 'pre_upgrade' 或 'post_upgrade'
PRIMARY KEY (database_name, schema_name, table_name, environment)
);
3.2 生成哈希值和行数
#!/bin/bash
DB_USER="pwadmin"
DB_PASSWORD='pwadmin'
DB_PORT=6432
ENVIRONMENT=$1# 'pre_upgrade' 或 'post_upgrade'
OUTPUT_LOG="/home/omm_mysql/schema_comparison_$ENVIRONMENT.log"
# 获取所有数据库列表(排除模板数据库)
DATABASES=$(psql -U $DB_USER -W $DB_PASSWORD -p $DB_PORT -d postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;")
# 遍历所有数据库
for DB in$DATABASES; do
echo"Processing database: $DB" >> $OUTPUT_LOG
# 在当前数据库中创建存储表(如果尚未创建)
psql -U $DB_USER -W $DB_PASSWORD -p $DB_PORT -d $DB -c "
CREATE TABLE IF NOT EXISTS schema_comparison (
database_name TEXT,
schema_name TEXT,
table_name TEXT,
structure_hash TEXT,
row_count BIGINT,
environment TEXT,
PRIMARY KEY (database_name, schema_name, table_name, environment)
);
" >> $OUTPUT_LOG 2>&1
# 执行表结构和行数比较
psql -U $DB_USER -W $DB_PASSWORD -p $DB_PORT -d $DB -c "
DO \$\$
DECLARE
r RECORD;
tbl_name TEXT;
tbl_schema TEXT;
tbl_structure_hash TEXT;
tbl_row_count BIGINT;
BEGIN
FOR r IN
SELECT schemaname, tablename
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
LOOP
tbl_name := r.tablename;
tbl_schema := r.schemaname;
-- 计算表结构的哈希值
EXECUTE format('SELECT md5(string_agg(column_name || data_type, '','')) FROM information_schema.columns WHERE table_schema = %L AND table_name = %L', tbl_schema, tbl_name) INTO tbl_structure_hash;
-- 计算表的行数
EXECUTE format('SELECT count(*) FROM %I.%I', tbl_schema, tbl_name) INTO tbl_row_count;
-- 插入计算结果
EXECUTE format('INSERT INTO schema_comparison (database_name, schema_name, table_name, structure_hash, row_count, environment)
VALUES (%L, %L, %L, %L, %L, %L)
ON CONFLICT (database_name, schema_name, table_name, environment)
DO UPDATE SET structure_hash = EXCLUDED.structure_hash, row_count = EXCLUDED.row_count',
'$DB', tbl_schema, tbl_name, tbl_structure_hash, tbl_row_count, '$ENVIRONMENT');
END LOOP;
END \$\$
" >> $OUTPUT_LOG 2>&1
done
3.3 比较哈希值和行数
#!/bin/bash
DB_USER="pwadmin"
DB_PASSWORD='pwadmin'
DB_PORT=6432
OUTPUT_LOG="/home/omm_mysql/schema_comparison_diff.log"
# 获取所有数据库列表(排除模板数据库)
DATABASES=$(psql -U $DB_USER -W $DB_PASSWORD -p $DB_PORT -d postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;")
# 初始化输出日志文件
echo"" > $OUTPUT_LOG
# 遍历所有数据库进行比较
for DB in$DATABASES; do
echo"Comparing schema in database: $DB" >> $OUTPUT_LOG
psql -U $DB_USER -W $DB_PASSWORD -p $DB_PORT -d $DB -c "
SELECT
COALESCE(pre.database_name, post.database_name) AS database_name,
COALESCE(pre.schema_name, post.schema_name) AS schema_name,
COALESCE(pre.table_name, post.table_name) AS table_name,
pre.structure_hash AS pre_upgrade_structure_hash,
post.structure_hash AS post_upgrade_structure_hash,
pre.row_count AS pre_upgrade_row_count,
post.row_count AS post_upgrade_row_count,
CASE
WHEN pre.table_name IS NULL THEN 'Missing in Pre-Upgrade'
WHEN post.table_name IS NULL THEN 'Missing in Post-Upgrade'
WHEN pre.structure_hash IS DISTINCT FROM post.structure_hash THEN 'Structure Mismatch'
WHEN pre.row_count IS DISTINCT FROM post.row_count THEN 'Row Count Mismatch'
ELSE 'Match'
END AS status
FROM
(SELECT * FROM schema_comparison WHERE environment = 'pre_upgrade') pre
FULL OUTER JOIN
(SELECT * FROM schema_comparison WHERE environment = 'post_upgrade') post
ON
pre.database_name = post.database_name
AND pre.schema_name = post.schema_name
AND pre.table_name = post.table_name
ORDER BY
database_name, schema_name, table_name;
" >> $OUTPUT_LOG 2>&1
done
3.4 生成哈希值和行数脚本(升级前执行一次,升级后执行一次)
./generate_hash_and_count.sh pre_upgrade
./generate_hash_and_count.sh post_upgrade
3.5 执行比较脚本
./compare_hash_and_count.sh

本文作者:陈 聪(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




