Base de datos postgresql timescaledb copia de seguridad y restauración de la base de datos
Directorio de artículos
- 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