小编Rol*_*DBA的帖子

使用 MyISAM 和 InnoDB 引擎的数据库的一致逻辑备份

我有一个关于同时使用 MyISAM 和 InnoDB 的 MySQL 数据库的逻辑备份的问题。

mysqldump实用程序支持以下两个选项:

  • --single-transaction - 通过在单个事务中转储所有表来创建一致的快照。仅适用于存储在支持多版本的存储引擎中的表(目前只有 InnoDB 支持)[...] 选项自动关闭 --lock-tables。

  • -x, --lock-all-tables - 锁定所有数据库中的所有表。这是通过在整个转储期间获取全局读锁来实现的。自动关闭 --single-transaction 和 --lock-tables 。

    • 对于 InnoDB,我们需要 --single-transaction

    • 对于 MyISAM,我们需要 - 锁定表或锁定所有表(以防我们需要跨数据库一致性)。

那么,混合数据库(同时使用 MyISAM 和 InnoDB 引擎的数据库)应该如何备份?

编辑:

为了澄清,这个问题可以重新表述如下:

lock-[all-]tables 选项是否保证 InnoDB 表的一致备份?

mysql innodb myisam mysqldump

9
推荐指数
1
解决办法
9372
查看次数

尽管总是说作业成功,但计划备份任务并不总是备份所有数据库

我在 SQL 2008 中有一份工作,它运行一个存储过程来备份所有数据库。这通过 sql server 代理作业每天运行。

它每天都成功退出,但有时只有在备份了几个数据库后才成功退出。每次可以是不同数量的数据库。大多数情况下,它会成功备份所有数据库,但有时会成功备份 2 次,有时会成功备份 5 次,等等。

我在作业历史记录、事件查看器或 sql server 日志中没有看到任何错误。

备份是在本地磁盘上进行的,尽管该文件夹是可扩展存储卷上文件夹的“连接点”。

操作系统是 Windows 2003 64 位运行 Sql Server 2008 网络版 64 位作为在 Vmware ESXi 5 主机上运行的虚拟机。

存储过程:

ALTER PROCEDURE [dbo].[backup_all_databases] 
@path VARCHAR(255)='c:\backups\'

AS

DECLARE @name VARCHAR(50) -- database name  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?

DECLARE db_cursor CURSOR FOR  
SELECT name …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server backup

9
推荐指数
2
解决办法
1165
查看次数

如何获取视图的执行计划?

我有一个包含多个视图的模式。我需要检查执行计划以确保适当的索引到位并被使用。

我该怎么做呢?

我宁愿不必将输出复制并粘贴show create view <viewname>到 中explain,尤其是当某些视图构建在其他视图之上时,这将非常痛苦。

mysql performance execution-plan view

9
推荐指数
2
解决办法
1万
查看次数

在任何 RESTORE DATABASE 事件后自动执行存储过程

是否可以让SQL Server 2008 R2 Standard在任何已还原附加到实例的给定数据库中自动执行存储过程?

我已经通过创建服务器级触发器接近解决方案,该触发器在 DDL 事件CREATE_DATABASE或被ALTER_DATABASE触发后执行给定数据库中的存储过程。不幸的是,这不适用于数据备份恢复。

详细地说,我们有一个“清理”存储过程,它存在于我们恢复的每个数据库中,我正在寻找一种方法,每当备份恢复到实例时自动执行此过程。

谷歌搜索指出我可以在 SQL Server 中配置审计策略来获得此功能,但这些功能乍一看非常令人难以抗拒,所以我不知道审计或策略是否是开始调查的途径。

sql-server sql-server-2008-r2

9
推荐指数
2
解决办法
7855
查看次数

Amazon RDS I/O 请求 - 1 次查询 = 1 次计费 I/O?

我有一个 InnoDB 数据库,我想将其迁移到 Amazon RDS。

我当前的实施托管在我自己的服务器上,每月显示大约 800 万次查询。

RDS 站点说 I/O 费率为每 100 万个请求 0.10 美元

1 个 I/O = 1 个查询吗?即,对于此使用量 + RDS 费用,我是否需要支付 80 美元/月的费用?

mysql innodb amazon-rds

9
推荐指数
2
解决办法
5981
查看次数

使单个 MySQL 数据库脱机

MySQL 没有任何 SQL 命令或内部机制

  • 使单个数据库不可用/离线
  • 移动单个数据库

在这种情况下,如何使单个数据库脱机?

mysql mysql-5.1

9
推荐指数
1
解决办法
7450
查看次数

为什么 MySQL 会产生这么多的临时 MYD 文件?

在 Debian Linux 服务器上,托管许多 PHP/MySQL 网站(图片库),有时我有“很多”文件,例如/tmp/#sql_6405_58.MYD.

例如今天:

[2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB
[2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB
[2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB
[2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB
...
[2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB
[2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB
[2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB
Run Code Online (Sandbox Code Playgroud)

(同时 59 个文件,超过 6GB...是的,我在 /tmp 中监控大文件)

不幸的是,/tmp它在同一个分区上/,它暂时中断了 Web 服务器,因为/我想是满的。然后文件消失,服务器恢复正常。

所有文件名都遵循该#sql_6405_*.MYD模式。我想了解哪个 MySQL 操作意味着这么多临时文件。我在这台服务器上有大约 2000 个数据库。是否有可能知道涉及哪个数据库?

mysql myisam temporary-tables

9
推荐指数
2
解决办法
3万
查看次数

是否有关于缓冲池实例的大小和数量的经验法则?

我知道共识似乎是大约 75% 的 ram 应该专用于缓冲池。但是,我对缓冲池实例的最佳数量更感兴趣。确定设置时需要考虑哪些事项?

例如,假设我有一个 75GB 的缓冲池。我应该只分配 75 个 1GB 的缓冲池实例吗?15 个,每个 5GB?或者,每个 7.5GB 的 10 个?

我应该从单个缓冲池开始并根据我是否看到锁定来增加吗?

最大实例数应该基于什么 - 可用内核?

谢谢 - 非常感谢您的回复。

mysql innodb mysql-5.5 locking

9
推荐指数
1
解决办法
3730
查看次数

如何在 /etc/my.cnf 文件中将 binlog-format=ROW 设为启动默认值?

我可以运行查询SET GLOBAL binlog_format = 'ROW'并且它适用于该会话。

停止并重新启动 MySQL 后,如何使此设置保持不变?

注意:我使用的是 MySQL 5.5.19 版本(使用 Moodle),我刚刚从 MyISAM 升级到 InnoDB,因此需要这个新设置。

我曾尝试将这两个命令(单独)添加到 my.cnf 中:binlog-format=ROWbinlog_format=ROW,但都不起作用。每次更改 my.cnf 时,我都会停止并重新启动 MySQL。

我在没有设置的情况下得到的错误是邪恶的错误消息:

调试信息:无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于基于行的日志记录的存储引擎。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

mysql innodb my.cnf binlog

9
推荐指数
1
解决办法
2万
查看次数

授予视图权限,拒绝选择表

我有一个 MySQL 用户,我希望它只查看我想要的视图,而不是数据库中的任何其他表。我仅授予此用户对某些视图的权限,如下所示:

GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Run Code Online (Sandbox Code Playgroud)

如果我做一个show grants;声明,我只能按预期看到这个权限。但是我希望这个用户只查询视图而不是与这些视图相关的表,但我找不到办法做到这一点。似乎是如果我希望用户对视图进行选择,则还必须为表授予选择权,还是我错了?

如果我拒绝select其余表中的语句,并且在命令行中我尝试进行选择,我会得到以下信息:

SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Run Code Online (Sandbox Code Playgroud)

这确实是我想要的,但如果我选择视图数据,我也会被拒绝。

有没有一种方法可以让用户只看到视图而不是表格?

mysql permissions view

9
推荐指数
2
解决办法
3万
查看次数