有没有办法导出 PostgreSQL 数据库,然后用另一个名称导入它?
我在 Rails 中使用 PostgreSQL,我经常从生产中导出数据,其中数据库名为 blah_production,并在开发或暂存时将其导入,名称为 blah_development 和 blah_staging。在 MySQL 上,这是微不足道的,因为导出在任何地方都没有数据库(可能除了注释),但在 PostgreSQL 上这似乎是不可能的。不可能吗?
我目前正在以这种方式转储数据库:
pg_dump blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
我没有使用 -c 或 -C 选项。该转储包含以下语句:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Run Code Online (Sandbox Code Playgroud)
当我尝试导入时
psql blah_devel < blah.dump
Run Code Online (Sandbox Code Playgroud)
我得到
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Run Code Online (Sandbox Code Playgroud)
也许问题真的不是数据库而是角色?
如果我以这种方式倾倒它:
pg_dump --format=c blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
并尝试以这种方式导入它:
pg_restore -d blah_devel < tmp/blah.psql
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
pg_restore: WARNING: database "blah" does …Run Code Online (Sandbox Code Playgroud) 我偶尔会丢失我的配置文件“/etc/mysql/my.cnf”,并想恢复它。该文件属于mysql-common某些重要功能所需要的包,所以我不能只是purge && install它:依赖项也将被卸载(或者如果我可以暂时忽略它们,它们将无法工作)。
有没有办法在不ar取消包文件的情况下从包中恢复配置文件?
dpkg-reconfigure mysql-common 没有恢复它。
与此问题类似,我将如何在 PostgreSQL 中执行仅模式转储?
我正在将 30GB 的数据库从 mysqldump 文件恢复到新服务器上的空数据库。从转储文件运行 SQL 时,恢复开始非常快,然后开始变得越来越慢。单个插入现在需要 15+ 秒。这些表主要是带有一个小型 InnoDB 的 MyISAM。服务器没有其他活动连接。SHOW PROCESSLIST;仅显示还原中的插入(以及显示进程列表本身)。
有没有人有任何想法可能导致急剧放缓?
是否有任何 MySQL 变量可以更改以在恢复过程中加快恢复速度?
我正在使用 MySQL Administrator 进行数据库备份。我可以完美地备份整个数据库及其所有表。有些表的大小非常大,所以我想知道我是否只能备份表的结构(仅它们的元素)而不是它们的数据。
我们在 Windows SBS 2008 服务器上启用了卷影副本。尝试从卷影副本还原文件出现以下错误 -
源文件名大于文件系统支持的名称。尝试移动到具有较短路径名的位置,或在尝试此操作之前尝试重命名为较短的名称。
文件名有 67 个字符,它的卷影复制路径是 170 个字符。这些似乎低于 NTFS 限制(260?)。
我们尝试了-
在进行复制之前,是否可以重命名卷影副本中的文件?尽管文件名大小似乎在限制范围内,但知道为什么会出现错误吗?
采取的步骤
编辑-(不)幸运的是,我现在无法重现此错误。导致问题的特定文件已被删除,并且无法使用其他类似文件重新创建错误。
我在 dev(Windows Server 2008 上的 SQL Server 2005)中有一个数据库,我需要将其转移到 prod(Windows Server 2003 上的 SQL Server 2000)。我的流程如下:
现在我已准备好恢复数据库,所以我单击“确定”并收到以下错误:
“设备 'E:...bak' 上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。RESTORE DATABASE 异常终止。”
这个错误是即时的。
我尝试了一些不同的变体 - 将数据库恢复到具有不同数据库名称和日志文件名(它起源的地方)的开发机器,创建一个具有相同物理路径的空数据库,然后尝试恢复到那个,制作一些不同的 .bak 文件并确保在将它们上传到 prod 之前验证它们。我知道 prod 上存在 .mdf 和 .ldf 文件的目录,尽管文件本身不存在。如果在单击“确定”还原之前转到“选项”选项卡,则会出现以下错误:
错误 3241:设备“E:...bak”上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。RESTORE FILELIST 异常终止。
有人有什么好主意吗?
您已输入 Amazon EC2 EBS 支持的 Windows 映像 010 的介绍性备份...
我一直在绞尽脑汁想为我们运行 SharePoint Services 的单个 Windows 2008 服务器找到一个简单的备份策略。这是具有一个数据卷的一台服务器的 EBS 支持的映像。我不需要任何异国情调的东西。我只需要“每日”备份(丢失一天的数据并不是灾难性的)。
我们创建并保存了一个 EBS 支持的 AMI 映像 (Windows 2008),我们可以轻松使用。我们开始通过简单地创建一个新的 EBS AMI 映像来进行备份。这真的很简单,但是正在运行的服务器在创建映像的前 10 到 15 分钟内处于离线状态——这并不理想。
创建备份的标准方法似乎是创建附加到正在运行的实例的卷的快照。同样,它非常简单,服务器在快照生成期间仍然可用。显而易见的第 22 条规则是您不能简单地直接从快照启动新实例。
我知道如何将正在运行的实例绑定到 S3 存储,然后从 S3 存储桶注册 AMI。这确实允许我捕获正在运行的实例的备份,如果正在运行的实例丢失,则从 S3 存储桶注册 AMI 并启动新的 AMI 以恢复实例,但这似乎真的很复杂,而且不得不这样做似乎很荒谬在 AWS 控制台和 Firefox 的 S3 Organizer 插件之间来回切换以实现这一目标。(请不要提及命令行方法,这是一门 010 级别的课程)。
通过使用 EBS 支持的图像,以下方法似乎对我有用(全部在 AWS 控制台中完成):
1.对于您的备份,只需根据需要对系统卷 (/dev/sda1) 进行快照。2.如果您丢失了正在运行的实例,请执行以下操作: a. 从上次快照备份创建一个新卷 b. 启动启动 AMI 的另一个实例(必须由 EBS 支持) c. 停止此实例。d. 将现有系统卷与新停止的实例分离并丢弃。e. 将新创建的卷作为系统卷 (/dev/sda1) 附加到停止的实例。f.重新启动新实例。我已经测试了几次,它似乎对我有用。
问题:这种方法有什么问题吗?
从备份还原 SQL 数据库是否会从头开始重建其表和索引?或者它是否保持与备份时相同的内部物理顺序?
我们将 SQL 2000 与 Quest Lightspeed 压缩备份一起使用,如果这有什么不同的话。
假设我有一个 SQL Server 数据库,其数据文件的初始大小为 100 GB,但它只包含 10 GB 的数据。然后,数据库备份的大小将仅为 10 GB。
我想将此备份还原到不同的服务器(或同一服务器上的不同数据库),但我不希望它占用与原始备份相同的磁盘空间 (100 GB),这是默认情况下发生的情况。
在进行备份之前我无法缩小原始数据库(它是一个生产数据库,它需要那么多预先分配的空间);我可以在还原完成后缩小还原的数据库,但我真的希望它在这样做时不占用 100 GB;此外,在这种特定情况下,我没有那么多可用磁盘空间,因此不会进行任何还原。
有什么办法可以恢复数据库并让它只占用与它包含的实际数据一样多的空间?
restore ×10
backup ×5
sql-server ×3
database ×2
mysql ×2
postgresql ×2
amazon-ebs ×1
amazon-ec2 ×1
apt ×1
dependencies ×1
dump ×1
linux ×1
ntfs ×1
schema ×1
shrink ×1
vss ×1