暂时在Windows下对postgres进行备份恢复。
在进行备份之前,在认证文件中增加一行,否则无法进行备份
host replication postgres 127.0.0.1/24 md5
开始使用pg_basebackup命令进行备份。当pgbak文件夹不存在的时候,备份的过程中会自动创建该文件夹。
关于pg_basebackup的命令,可以参考文档
C:\PostgreSQL\9.4\bin>pg_basebackup -h 127.0.0.1 -U postgres -D C:\pgbak -Ft -R -z -v --checkpoint=fast 口令: pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed 已复制 1 个文件。 已复制 1 个文件。 已复制 1 个文件。 NOTICE: pg_stop_backup complete, all required WAL segments have been archived pg_basebackup: base backup completed
进行模拟破坏。停掉库。 删除掉data目录(注意wal日志以.backup结尾及以后的文件不要删除,因为这些文件没有备份,恢复的时候要使用)。把备份好的tar.gz文件解压到data。
在恢复之前,修改加压后的tar.gz里面的recovery.conf文件(其实是指定归档的位置,这样就会进行恢复)。否则无法启动数据库。修改后的内容如下(#屏蔽掉了备份生成的命令):
#standby_mode = 'on' #primary_conninfo = 'user=postgres password=postgres host=127.0.0.1 port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres' restore_command = 'C:\\PostgreSQL\\9.4\\data\\pg_xlog\\archive_status\\%f'
C:\PostgreSQL\9.4\bin>pg_ctl start -D C:\PostgreSQL\9.4\data 正在启动服务器进程 C:\PostgreSQL\9.4\bin>2019-08-06 21:22:29 HKT 日志: 日志输出重定向到日志收集进 程 2019-08-06 21:22:29 HKT 提示: 后续的日志输出将出现在目录 "pg_log"中. 已复制 1 个文件。 已复制 1 个文件。 C:\PostgreSQL\9.4\bin>
这样数据库就起来了。恢复正常。
下面是恢复后的wal日志文件情况。
问题1 。这个原因,是因为在recovery.conf中没有指定restore_command。是按照replicate来进行复制了。所以出错。
2019-08-06 21:20:25 HKT LOG: database system was shut down in recovery at 2019-08-06 21:15:46 HKT 2019-08-06 21:20:25 HKT LOG: could not open tablespace directory "pg_tblspc/16419/PG_9.4_201409291": No such file or directory 2019-08-06 21:20:25 HKT LOG: could not open tablespace directory "pg_tblspc/16577/PG_9.4_201409291": No such file or directory 2019-08-06 21:20:25 HKT LOG: starting archive recovery 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D6' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 2019-08-06 21:20:25 HKT LOG: invalid checkpoint record 2019-08-06 21:20:25 HKT FATAL: could not locate required checkpoint record 2019-08-06 21:20:25 HKT HINT: If you are not restoring from a backup, try removing the file "C:/PostgreSQL/9.4/data/backup_label". 2019-08-06 21:20:25 HKT 日志: 启动进程 (PID 544) 已退出, 退出代码 1 2019-08-06 21:20:25 HKT 日志: 由于启动进程失败, 终止启动
问题2,这样原因,是因为在恢复的时候,tar.gz文件夹里面,包含有自己建立的表空间。而在模拟故障的是时候,表空间没有被删除,也就是说,没有使用tar.gz里面的表空间文件覆盖原来的表空间。覆盖后OK。
2019-08-06 21:22:29 HKT LOG: database system was shut down in recovery at 2019-08-06 21:15:46 HKT 2019-08-06 21:22:29 HKT LOG: could not open tablespace directory "pg_tblspc/16419/PG_9.4_201409291": No such file or directory 2019-08-06 21:22:29 HKT LOG: could not open tablespace directory "pg_tblspc/16577/PG_9.4_201409291": No such file or directory 2019-08-06 21:22:29 HKT LOG: starting archive recovery 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D6' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 2019-08-06 21:22:29 HKT LOG: redo starts at 0/D6000090 2019-08-06 21:22:29 HKT LOG: consistent recovery state reached at 0/D60000B8 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D7' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 2019-08-06 21:22:29 HKT LOG: record with zero length at 0/D7000090 2019-08-06 21:22:29 HKT LOG: redo done at 0/D7000028 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D7' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\00000002.history' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 2019-08-06 21:22:29 HKT LOG: selected new timeline ID: 2 'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\00000001.history' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 2019-08-06 21:22:29 HKT FATAL: the database system is starting up 2019-08-06 21:22:29 HKT LOG: archive recovery complete 2019-08-06 21:22:29 HKT LOG: MultiXact member wraparound protections are now enabled 2019-08-06 21:22:29 HKT 日志: 数据库系统准备接受连接 2019-08-06 21:22:29 HKT LOG: autovacuum launcher started 2019-08-06 21:22:30 HKT LOG: statement: SET DateStyle=ISO; SET client_min_messages=notice; SELECT set_config('bytea_output','escape',false) FROM pg_settings WHERE name = 'bytea_output'; SET client_encoding='UNICODE'; 2019-08-06 21:22:30 HKT LOG: statement: SELECT db.oid as did, db.datname, db.datallowconn, pg_encoding_to_char(db.encoding) AS serverencoding, has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid FROM pg_database db WHERE db.datname = current_database() 2019-08-06 21:22:30 HKT LOG: statement: SELECT oid as id, rolname as name, rolsuper as is_superuser, rolcreaterole as can_create_role, rolcreatedb as can_create_db FROM pg_catalog.pg_roles WHERE rolname = current_user 2019-08-06 21:22:30 HKT LOG: statement: /*pga4dash*/
补充:pgsql的pg_basebackup
pg_basebackup:是从pgsql提供的一个方便基础备份的工具。经常用来搭建流复制环境
属于物理备份。pgsql的逻辑备份是pg_dump工具。
参数说明(pg_basebackup --help 详细查看):
-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip。
-U 指定连接的用户名,专门负责流复制的repl用户。
-F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。
-x 表示备份开始后,启动另一个流复制连接从主库接收WAL日志。
-P 表示允许在备份过程中实时的打印备份的进度。
-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建。(12.0有差异)
-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(比如:/usr/local/postgresql/data)目录需要手动清空。
-l 表示指定一个备份的标识
如:pg_basebackup -h 192.168.23.193 -p 3012 -U testacc -F p -P -X s -R -D /data -r 50M -l label_1576225683"
12 版本pg_basebackup 命令的 -R 参数的效果和之前不同,主要体现在:
命令执行后在 $PGDATA 目录创建 standby.signal 标识文件,文件内容为空
命令执行后在 $PGDATA 目录的 postgresql.auto.conf 文件中添加 primary_conninfo 参数信息
以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。
Gitea 已经实现了 dump 命令可以用来备份所有需要的文件到一个zip压缩文件。该压缩文件可以被用来进行数据恢复。 备份命令 (dump) 先转到git用户的权限: su git. 再Gitea目录运行 ./gitea dump。一般会显示类似如下的输出: 2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
查看MySQL的备份数据 (重要) egrep -v "#|\/|^$|--" /mnt/database_bak.sql MySQL查看bin-log日志的方法 mysqlbinlog mysql-bin.000001 拆分总的binlog为指定库的增删改操作(恢复指定库的binlog时使用) mysqlbinlog -d test mysql-bin.000001 基于位置点的增量恢复 指定开
本文向大家介绍MySQL5.7 mysqldump备份与恢复的实现,包括了MySQL5.7 mysqldump备份与恢复的实现的使用技巧和注意事项,需要的朋友参考一下 MySQL 备份 冷备份: 停止服务进行备份,即停止数据库的写入 热备份: 不停止服务进行备份(在线) mysql 的 MyIsam 引擎只支持冷备份,InnoDB 支持热备份,原因: InnoDB引擎是事务性存储引擎,每一条语句都
Oracle 数据库的备份和恢复是每个数据库管理员必须要掌握的技能,备份是保存数据库的副本,恢复是把备份好的副本还原到数据库当中,本篇幅将学习如何进行数据库的备份和恢复。
5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 本节讨论如何进行数据库备份(完全备份和增量备份),以及如何执行表的维护。本节描述的SQL语句语法参见第5章:数据库管理。此处提供的大多数信息主要适合MyISA
如果只使用了RDB,则首先将redis-server停掉,删除dump.rdb,最后将备份的dump.rdb文件拷贝回data目录并修改相关属主保证其属主和redis-server启动用户一致,然后启动redis-server。 如果是RDB+AOF的持久化,只需要将aof文件放入data目录,启动redis-server,查看是否恢复,如无法恢复则应该将aof关闭后重启,redis就会从rdb进