base de datos postgresql timescaledb base de datos de restauración de base de datos

Base de datos postgresql timescaledb copia de seguridad y restauración de la base de datos

Recientemente encontré un problema con la memoria del servidor donde la base de datos timescaledb está llena. Agregue un nuevo disco y considere cómo migrar.

Debido a que la base de datos timescaledb está cargando datos constantemente. Teniendo en cuenta la posibilidad de reducir la pérdida de datos tanto como sea posible, considere usar un nuevo espacio de tabla para migrar datos. El método es el siguiente

1. Crea un espacio de mesa

Primero cree el espacio de tabla tbs_cs1 para especificar la ruta en el nuevo disco

1. Crea un directorio

mkdir -p  /u01/cs/pgdata

2. Asignar permisos

[root@localhost ~]# chown postgres:postgres /u01/cs/pgdata

3. Crea un espacio de mesa

create tablespace tbs_cs1 owner postgres location '/u01/cs/pgdata';

2. Cree una nueva base de datos cs espacio de tabla designado tbs_cs1

2.1 Cree una nueva biblioteca, especifique el espacio de tabla, instale el complemento timescaledb

CREATE DATABASE cs SET TABLESPACE tbs_cs1 ;
cs=# CREATE SCHEMA hrmw;
cs=# set search_path to hrmw; 
cs=# CREATE EXTENSION timescaledb;

Ahora que la nueva base de datos está construida es para considerar el problema de la migración de datos,
yo uso el método de copia de seguridad-restauración .

Tres copias de seguridad de la base de datos original

3.1 Hacer una copia de seguridad de toda la biblioteca

Primero hice una copia de seguridad de todas las bibliotecas timescaledb

/usr/pgsql-11/bin/pg_dump --file "/u01/pgsql.backup" --host "0.0.0.0" --port "5432" --username "postgres" --dbname "原数据库名" --verbose --role "postgres" --format=c --blobs --encoding "UTF8"

3.2 Super tabla de respaldo

 psql --host "0.0.0.0"  --port "5432" --dbname "原数据库名"  --username "postgres" \
-c "\COPY (SELECT * FROM 超级表名 {后面可以跟where 加限制条件}) TO /u01/data.csv DELIMITER ',' CSV"

La cantidad de datos en algunas supertablas es demasiado grande y algunos datos que no desea se pueden filtrar con dónde y condiciones.

Cuatro. Restaurar la base de datos

4.1 Restaurar toda la biblioteca

Una vez que se completa la copia de seguridad de los datos, considero la restauración. Primero uso pg_restore para restaurar toda la base de datos como la base de datos de Postgres.

cs=#  SELECT timescaledb_pre_restore();
pg_restore --username "postgres" --host "1.1.1.1" --port "5432"  --password  --role "postgres" --dbname "cs"    --verbose /u01/pgsql.backup 
cs=# SELECT timescaledb_post_restore();

Después de la restauración, descubrí que había un problema con la supertabla y no se podían insertar los datos, pero las particiones funcionaban. Busqué en Internet durante mucho tiempo y no pude encontrar la manera. (¿Qué tipo grande sabe? el camino, por favor deje un mensaje o chatee en privado. Gracias) ¡Pero descubrí que restablecer la super mesa no tiene este problema! ! !
El error es el siguiente:

ERROR: INSERTAR inválido en la tabla raíz del hipertexto “超 表 名”
SUGERENCIA: Asegúrese de que la extensión TimescaleDB haya sido precargada.

4.2 Restauración de Super mesa sola

Utilizo el primer modo de restauración, elimino la supertabla, restauro el resto de los datos, creo una nueva supertabla, importo los datos de la supertabla

1. Primer modo de restauración

pg_restore -s --username "postgres" --host "1.1.1.1" --port "5432"  --password  --role "postgres" --dbname "cs"    --verbose /u01/pgsql.backup 

2. Elimina la supermesa original.

drop table "超表名" CASCADE

3. Restaurar otros datos de la tabla

pg_restore -a --username "postgres" --host "1.1.1.1" --port "5432"  --password  --role "postgres" --dbname "cs"    --verbose /u01/pgsql.backup 

4 Crea una tabla normal y cámbiala a una super mesa

CREATE TABLE b1("ID" varchar(36) NOT NULL"alarm_time" timestamp(6) NOT NULL,;
SELECT create_hypertable('b1', 'alarm_time', chunk_time_interval => INTERVAL '7 day');
CREATE INDEX "b1_alarm_time_idx" ON "b1" USING btree (
  "create_time"  DESC NULLS LAST
);

5. Restaurar datos de supertabla

psql --host "1.1.1.1"  --port "5432" --dbname "cs"  --username "postgres"   -c "\COPY   FROM b1 /u01/data.csv CSV"

En este punto, la base de datos se restaura y el resto es cambiar la base de datos

Base de datos de cinco conmutadores

Debido a que en la práctica hay muchos servicios conectados a la base de datos, estos servicios deben detenerse.

5.1 Detener el servicio

Debido a que el servicio real no es el mismo, deténgase según la situación real

5.2 Cambiar base de datos

Maté la conexión entre la base de datos original y la base de datos recién creada cs

 postgres=# 
 SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE
    -- don't kill my own connection
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = '原库名'
    ;

A veces no puede eliminarlo y ejecutarlo varias veces hasta que el resultado de la pantalla sea 0.

5.3 Cambiar el nombre de la base de datos

Cambie el nombre de la biblioteca original a otro nombre y cambie el nombre de la nueva biblioteca al nombre de la biblioteca original

 postgres=# ALTER DATABASE 原库名 RENAME TO aa;
 postgres=# ALTER DATABASE cs RENAME TO 原库名;

5.4 Iniciar servicio

Encienda el servicio detenido anteriormente

5.5 Ver base de datos

¿Echa un vistazo a la base de datos? Cuenta con ok

Supongo que te gusta

Origin blog.csdn.net/yang_z_1/article/details/111309661
Recomendado
Clasificación