尝试对单个 Postgres 服务器(Win7 64)进行每小时增量备份。
我有以下设置postgresql.conf:
max_wal_senders = 2
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
Run Code Online (Sandbox Code Playgroud)
(重新开始)
我做了一个基本备份 pg_basebackup -U postgres -D ..\foo -F t -x
它在base.tar文件foo夹中创建了一个大文件并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。
我不明白的是为什么 WALfoo不会改变。data/pg_xlog变化中的 WAL 。pg 不应该复制它们吗?它是如何决定这样做的?
也许我需要设置archive_timeout=3600?
我见过几个站点(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?
次要问题:
多久data/pg_xlog写入一次 WAL ?什么触发写入?
如果我\q在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。
最佳实践?pg_basebackup 每周一次?将 …
在 PostgreSQL v9.0 上,我有一个 WAL 归档系统在工作。因此 WAL 文件定期存档(当创建 3 个 WAL 或 WAL 超过 15 分钟时)。
现在我添加 PG_DATA 目录(不包括 pg_xlog 子目录)的二进制包。为此,我执行了pg_start_backup(),二进制副本和pg_stop_backup().
我想我很清楚 pg_start_backup 和 pg_stop_backup 在做什么,第一个创建检查点,最后一个确保最后一个 WAL 文件被存档。
从官方文档中我们可以看到对于二进制数据副本我们应该:
使用任何方便的文件系统备份工具执行备份,例如 tar 或 cpio(不是 pg_dump 或 pg_dumpall)。在执行此操作时停止数据库的正常操作既不必要也不可取。
所以我很困惑。这意味着在我们制作副本时可以执行检查点。我看到很多文档说明复制命令应该允许在执行复制时更改数据,我对此没意见,只是找到合适的工具的问题。但我的问题是postgreSQL 将如何处理包含一些不一致文件(一些来自检查点之前,一些来自检查点之后)的 pg_data 内容的恢复?
通过重放事务日志 Postgresql 能够将所有这些文件置于正确的状态吗?我看到在执行备份时创建表和删除操作是危险的,是不是有一些像vacuum命令这样的危险操作?pg_backup 是否暂停真空操作?我应该在二进制复制过程开始时复制 global/pg_control 文件吗?我应该使用启用快照的文件系统(如使用 xfs-freeze)来获得更快的恢复过程吗?
我看到备份脚本崩溃不会自动启动 pg_stop_backup,所以我的备份状态有可能会持续很长时间(直到我的 nagios 打电话给某人修复 pg_stop_backup() )。因此,如果这两个命令在 PostgreSQL 中有任何不同,我想知道它,以了解它可能产生的影响。
请赐教。
我一直在为 Postgres 9.1 进行热备份工作一段时间,但遇到了一个一致的问题。在从服务器上重新启动 Postgres 后,pg_log 目录下的 pgstartup 日志文件和每日日志文件读取没有错误。但是,当我尝试使用 psql 命令进入数据库时,出现错误:
致命:数据库系统正在启动。
recovery.conf 文件也不会转为 recovery.done。我已经广泛研究了这个错误并始终找到相同的响应:在我尝试重新启动 Postgres 之前,数据库没有完全关闭。我重新启动 Postgres 的唯一方法是通过service postgresql-9.1 restartor/etc/init.d/postgresql-9.1 restart命令。收到此错误后,我终止了所有进程并再次尝试重新启动数据库,但仍然收到相同的错误。我不知道从哪里开始以及如何解决这个问题。以下是我为完成热备份所做的确切过程。
主服务器配置:
pg_hba.conf,添加了以下行:
主机复制 postgres IPAddressOfSlaveServer 信任
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 听地址 = '*' 端口 = 5432 max_wal_senders = 5 wal_keep_segments = 32
从服务器配置:
postgresql.conf:
hot_standby = 开
恢复.conf:
待机模式 = 开 primary_conninfo = host=IPAddressOfMasterServer 端口 = 5432 用户 = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "%p"'
配置两台服务器后
我在主服务器上更改为 postgres 用户并运行命令:
psql -c …
我有一些.bak来自 SQL Server 2005 转储的大文件。
我可以在不使用 SQL Server 的情况下将这些恢复到 PostgreSQL、MySQL 或纯文本文件吗?
开源解决方案将是最有用的。
我的计算机上安装了 SQL 2012 SP1。我做了一个数据库的备份test.bak。
我有一个test2同名的数据库,但数据发生了变化。
我想test.bak通过test2数据库恢复。
我总是收到错误:
错误 3154:备份集包含现有数据库以外的数据库的备份。
我试过:
我右键单击 test2 -> Restore database -> From device
我选择test.bak并检查了With Replace但我收到错误。
然后我尝试右键单击 test2 -> Restore file and filegroups
我选择test.bak并检查了With Replace但我收到错误。
我可以删除旧数据库,然后使用正确的名称恢复备份,但是当我使用 SQL 2008 时,恢复现有数据库没有问题。
好像是因为我用的是SQL2012,所以经常出现这个错误!
我们有一个非常大的生产数据库,有 10 TB。我们正在考虑将其迁移到云服务,但我必须了解风险并估计整个过程的持续时间。我使用 Native SQL Server 2014 SP2 备份解决方案每月备份一次数据库。持续时间几乎是 720 分钟 - 12 小时。压缩比为 5,这意味着备份大小几乎为 2 TB。我们负担不起差异备份,因为累积的差异备份需要与完整备份一样多的时间和空间,因此我们进行 T-log 备份(每个 ~200 Mb)而不是每 10 分钟 ~ 每天 144 个文件。最大的问题是拥有所有这些统计数据,有没有人知道恢复包含 10 TB 数据的 2 TB 备份需要多长时间?它会比完整备份持续时间长得多吗?
我们想在完整备份后创建远程增量备份。这将使我们能够在发生故障时进行恢复,并使用 SQL Anywhere 网络服务器启动另一台具有尽可能接近实时备份的机器。
我们正在做一个完整的备份如下:
dbbackup -y -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)"
c:\backuppath\full
Run Code Online (Sandbox Code Playgroud)
这会备份数据库和日志文件,并且可以按预期恢复。对于增量备份,如果有多个增量备份,我已经使用重命名方案尝试了实时和增量事务日志:
dbbackup -y -t -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)"
c:\backuppath\inc
dbbackup -y -l -c "eng=ServerName.DbName;uid=dba;pwd=sql;links=tcpip(host=ServerName)"
c:\backuppath\live
Run Code Online (Sandbox Code Playgroud)
但是,在将事务日志应用于还原时,将事务日志应用于数据库时总是收到错误消息:
10092:无法找到事务日志中引用的表的表定义
事务日志恢复命令是:
dbeng11 "c:\dbpath\dbname.db" -a "c:\backuppath\dbname.log"
Run Code Online (Sandbox Code Playgroud)
该错误没有指定它找不到哪个表,但这是一个受控测试,没有创建或删除任何表。我插入几行然后在尝试恢复之前启动增量备份。
有谁知道在 Sql Anywhere 11 上进行增量备份和还原的正确方法吗?
更新:考虑可能与目标数据库的复杂性有关,我做了一个新的空白数据库和网络服务。然后添加了一个包含两列的表格并插入了几行。进行完整备份,然后插入和删除更多行并提交事务,然后进行增量备份。在恢复完整备份后尝试应用事务日志的增量备份时,这也失败并出现相同的错误...
编辑:
您可以点击此链接查看相同的问题,并提供更多关于 SA 的反馈:http : //sqlanywhere-forum.sybase.com/questions/4760/restoring-incrementallive-backup-failure
在 MongoDB 中备份大型数据集的推荐方法是什么?假设我们有大约 10TB 的数据大小 - 您将如何备份它?
我们正在考虑一个隐藏的、可能延迟的副本集节点。延迟将保护我们免受整个数据库的意外丢失。这是一个可行的解决方案,您还建议调查哪些其他选项?
谢谢!
经过一番搜索,我最终得到了以下设置:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但我对参数和执行有一些疑问。
关于我的第一个问题,我只想确保所有这些都是必需的,并且一起使用时不会引起任何冲突。最终,我想制作一个非常强大且一致的转储文件,其中包含数百万条记录,用于创建表、数据库和插入数据。好消息是让数据库暂时不可用对我来说不是问题。我唯一的目标是制作一个健壮且一致的转储文件。
关于我的第二场音乐会,我想知道如何在命令出错时获得通知,如果是,则抛出异常。
有任何想法吗?
编辑
这是我根据 RolandoMySQLDBA 的反馈更新的 mysqldump 命令。
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
Run Code Online (Sandbox Code Playgroud) 我的数据库大于 250GB。我使用第三方工具进行计划备份。
计划数据库备份是保护 SQL Server 数据库免受损坏的最佳方法吗?或者你能推荐其他东西吗?
backup ×10
restore ×4
sql-server ×4
postgresql ×3
mongodb ×1
mysql ×1
mysqldump ×1
replication ×1
windows ×1