base de données postgresql timescaledb base de données restauration de la base de données

Base de données Postgresql Timescaledb base de données de sauvegarde et de restauration de la base de données

J'ai récemment rencontré un problème avec la mémoire du serveur où la base de données timescaledb est pleine. Ajoutez un nouveau disque et réfléchissez à la migration.

Étant donné que la base de données timescaledb télécharge constamment des données. Afin de réduire au maximum les pertes de données, envisagez d'utiliser un nouvel espace table pour migrer les données. La méthode est la suivante

1. Créez un espace table

Créez d'abord l'espace table tbs_cs1 pour spécifier le chemin sur le nouveau disque

1. Créez un répertoire

mkdir -p  /u01/cs/pgdata

2. Attribuer des autorisations

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

3. Créez un espace table

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

2. Créez une nouvelle base de données cs espace table désigné tbs_cs1

2.1 Créer une nouvelle bibliothèque, spécifier l'espace table, installer le plugin timescaledb

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

Maintenant que la nouvelle base de données est construite est de considérer le problème de la migration des données.
J'utilise la sauvegarde-restauration méthode.

Trois sauvegardes de la base de données d'origine

3.1 Sauvegarder toute la bibliothèque

J'ai d'abord sauvegardé toutes les bibliothèques timecaledb

/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 table de sauvegarde

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

La quantité de données dans certaines super-tables est trop grande, et certaines données dont vous ne voulez pas peuvent être filtrées avec où et conditions

4. Restaurer la base de données

4.1 Restaurer toute la bibliothèque

Une fois la sauvegarde des données terminée, j'envisage la restauration. J'utilise d'abord pg_restore pour restaurer l'ensemble de la base de données comme la base de données 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();

Après la restauration, j'ai trouvé qu'il y avait un problème avec la super table et que les données ne pouvaient pas être insérées, mais les partitions fonctionnaient. J'ai cherché sur Internet pendant longtemps et je n'ai pas trouvé de moyen. (Quel grand gars sait le chemin, s'il vous plaît laissez un message ou discutez en privé. Merci) Mais j'ai trouvé que le rétablissement de la super table n'a pas ce problème! ! !
L'erreur est la suivante:

ERREUR: INSERT invalide sur la table racine de l'hypertable «超 表 名»
CONSEIL: Assurez-vous que l'extension TimescaleDB a été préchargée.

4.2 Restauration de super table seule

J'utilise le premier mode de restauration - supprimer la super table - restaurer le reste des données - créer une nouvelle super table - importer les données de la super table

1. Premier mode de restauration

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

2. Supprimez la super table d'origine

drop table "超表名" CASCADE

3. Restaurez d'autres données de table

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

4 Créez une table normale et changez-la en super table

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. Restaurer les données de la super table

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

À ce stade, la base de données est restaurée et le reste consiste à changer de base de données

Base de données cinq commutateurs

Étant donné qu'il existe de nombreux services connectés à la base de données dans la pratique, ces services doivent être arrêtés.

5.1 Arrêter le service

Parce que le service réel n'est pas le même, arrêtez-vous en fonction de la situation réelle

5.2 Changer de base de données

J'ai tué la connexion entre la base de données d'origine et la base de données nouvellement créée 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 = '原库名'
    ;

Parfois, vous ne pouvez pas le tuer et l'exécuter plusieurs fois jusqu'à ce que le résultat d'affichage soit 0.

5.3 Renommer la base de données

Renommez la bibliothèque d'origine sous un autre nom et renommez la nouvelle bibliothèque avec le nom de bibliothèque d'origine

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

5.4 Démarrer le service

Activer le service précédemment arrêté

5.5 Afficher la base de données

Jetez un œil à la base de données? Comptez sur ok

Je suppose que tu aimes

Origine blog.csdn.net/yang_z_1/article/details/111309661
conseillé
Classement