小编Emi*_*lás的帖子

mysqldump转储完整模式所需的最小GRANT?(TRIGGER缺失!!)

我有一个名为dump的MySQL用户,其中包含以下权限:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'
Run Code Online (Sandbox Code Playgroud)

我想使用dump用户转储所有数据(包含的触发器和过程).我用以下方式调用mysqldump:

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql
Run Code Online (Sandbox Code Playgroud)

除了触发器之外,转储文件一切正常,它们都丢失了 !!

如果我使用root MySQL用户尝试mysqldump,则会正确转储触发器:

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql
Run Code Online (Sandbox Code Playgroud)

所以,我想这是一个perms问题... 我的转储 MySQL用户正确执行完全转储所需额外资金多少?

mysql database mysqldump grant database-backups

75
推荐指数
2
解决办法
6万
查看次数

MySQL存储过程使用它们或不使用它们

我们正处于一个新项目的开始阶段,我们真的想知道是否应该在MySQL中使用存储过程.

我们仅使用存储过程来插入和更新业务模型实体.有几个表代表模型实体,我们将在那些存储过程insert/update中抽象它.

另一方面,我们可以从Model层调用insert和update,但不能在MySQL中调用,而是在PHP中调用.

根据您的经验,哪个是最佳选择?两种方法的优点和缺点.哪个是高性能最快的?

PS:这是一个大多数阅读和高性能的网络项目是最重要的必要条件.

mysql database performance database-design stored-procedures

65
推荐指数
5
解决办法
2万
查看次数

当MySQL在更新InnoDB表时确切地锁定了一行?

如果我有这个multiupdate查询

UPDATE user u
INNER JOIN user_profile up ON up.user_id = u.id
SET u.name = 'same_name_i_already_had', up.profile.age = 25
WHERE u.id = 10
Run Code Online (Sandbox Code Playgroud)

假设用户表中的第10行已经具有名称"same_name_i_already_had",因此不应该更新它.

另一方面,user_profile表中的行具有不同的年龄,因此MySQL应该更新它.

假设MySQL作为RDBMS和InnoDB,其行级锁定系统作为两个表的引擎,

MySQL是否会锁定用户表中的行,尽管不必更新该行的名称字段?

mysql innodb locking rowlocking

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

在Mysqldump中跳过或忽略定义器

我想知道我是否可以阻止mysqldump插入此命令

/*!50017 DEFINER=`root`@`localhost`*/
Run Code Online (Sandbox Code Playgroud)

或者,如果我之后必须用sed做,例如

谢谢!

mysql mysqldump database-backups

7
推荐指数
1
解决办法
6669
查看次数

哪些MySQL数据库设计(附件)最适合读取高性能?

我是MySQL的数据库管理员和开发人员.我和MySQL一起工作了几年.我最近询问和研究O'Reilly高性能MySQL第二版,以提高我在MySQL高级功能,高性能和可扩展性方面的技能,因为我经常因为缺乏MySQL的先进知识而感到沮丧(并且在很大程度上,我还有).

目前,我正在开展一个狡猾的网络项目.在这个项目中,我们将从一开始就拥有相当的内容和用户.我是数据库的设计者,这个数据库必须非常快(一些插入但主要是更重要的READS).

我想在这里讨论这些要求:

  • 会有几种物品
  • 这些项目有一些共同的领域和关系
  • 这些项目还有一些特殊的字段和关系,使它们彼此不同
  • 这些项目必须全部一起列出,或按公共字段或关系过滤
  • 这些项目也必须仅按类型列出(对于例如item_specialA)

我有一些基本的设计疑问,我希望你帮我决定和学习哪种设计方法对于高性能MySQL数据库更好.

古典的aproach

下图显示了在数据库中思考思维的第一个可能的思考方法:数据库图

集中的aproach

但也许我们可以通过一些或伪对象导向范例来改进它,将一般项目和关系集中在一个共同项目表上.列出所有类型的项目也很有用:数据库图表


  • 每个人的优点和缺点?
  • 您会选择哪种方法,或者您会看到之前看到的要求会有哪些变化?

在此先感谢!!

mysql database performance database-design

5
推荐指数
0
解决办法
710
查看次数

可以为N的外键与N:M关系的关系表

我是一位存在怀疑的数据库设计师.

如果你有一个table1必须与table2或(独占或一个或另一个)table3有关系,

  • 什么是aproach,为什么你会选择高读取性能?在此输入图像描述

知道可以为空的索引字段(选项A table1)是一个错误的决定(参见O'Reilly高性能MySQL第3章或MySQL手册),但也知道连接需要花时间执行(选项B)......

学术选择将是B,但我想要一个现实世界的解释,如果它真的更好的高性能与否.

提前致谢!!

mysql database performance database-design

4
推荐指数
1
解决办法
1411
查看次数

InnoDB MySQL 5.5中的TEXT vs VARCHAR.何时使用每一个

MySQL 5.5中InnoDB存储引擎中text和varchar之间的主要区别是什么?

如果我们讨论的变量文本字段不超过5000个字符,是否使用text或varchar(5000)?

mysql database varchar text types

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

MySQL数据库设计.在1to1表中插入行.

将行插入到彼此引用为1对1的表中的最佳方法是什么?

我的意思是,在MySQL 5.5和表InnoDB中,我有一个类似于以下的数据库设计 在此输入图像描述

当我们尝试在table1和table2中插入行时出现问题.由于MySQL中没有多表插入,因此我不能插入一行,因为两个表中的外键都是NOT NULL字段,并且应该同时插入两个表中.

哪个是解决这个问题的方法?

我想到了3个可能的解决方案,但我想知道是否有更多这些或哪个是最好的以及为什么.

  1. 将外键字段设置为NULLABLE,并在表中插入一行后插入另一行,然后更新de first.

  2. 正如上面所指出的那样但是有一个像-1这样的特殊值.首先,在一个表中插入一个key = -1等于NULL的外表,但避免将该字段设置为NULLABLE.然后,我们在另一个表中插入行并更新插入的第一行.

  3. 在两者之间创建关系表,虽然它不是必需的,因为它是1比1的比率

谢谢!!

编辑 我简要解释一下我需要这个循环关系:它是从父表到其子节点之间的非规范化.按照高性能的顺序,它始终是父表中排名最高的子项的引用.

mysql database database-design insert relational-database

3
推荐指数
1
解决办法
1543
查看次数