我有一个名为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中使用存储过程.
我们仅使用存储过程来插入和更新业务模型实体.有几个表代表模型实体,我们将在那些存储过程insert/update中抽象它.
另一方面,我们可以从Model层调用insert和update,但不能在MySQL中调用,而是在PHP中调用.
根据您的经验,哪个是最佳选择?两种方法的优点和缺点.哪个是高性能最快的?
PS:这是一个大多数阅读和高性能的网络项目是最重要的必要条件.
mysql database performance database-design stored-procedures
如果我有这个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是否会锁定用户表中的行,尽管不必更新该行的名称字段?
我想知道我是否可以阻止mysqldump插入此命令
/*!50017 DEFINER=`root`@`localhost`*/
Run Code Online (Sandbox Code Playgroud)
或者,如果我之后必须用sed做,例如
谢谢!
我是MySQL的数据库管理员和开发人员.我和MySQL一起工作了几年.我最近询问和研究O'Reilly高性能MySQL第二版,以提高我在MySQL高级功能,高性能和可扩展性方面的技能,因为我经常因为缺乏MySQL的先进知识而感到沮丧(并且在很大程度上,我还有).
目前,我正在开展一个狡猾的网络项目.在这个项目中,我们将从一开始就拥有相当的内容和用户.我是数据库的设计者,这个数据库必须非常快(一些插入但主要是更重要的READS).
我想在这里讨论这些要求:
我有一些基本的设计疑问,我希望你帮我决定和学习哪种设计方法对于高性能MySQL数据库更好.
古典的aproach
下图显示了在数据库中思考思维的第一个可能的思考方法:数据库图
集中的aproach
但也许我们可以通过一些或伪对象导向范例来改进它,将一般项目和关系集中在一个共同项目表上.列出所有类型的项目也很有用:数据库图表
在此先感谢!!
我是一位存在怀疑的数据库设计师.
如果你有一个table1必须与table2或(独占或一个或另一个)table3有关系,

知道可以为空的索引字段(选项A table1)是一个错误的决定(参见O'Reilly高性能MySQL第3章或MySQL手册),但也知道连接需要花时间执行(选项B)......
学术选择将是B,但我想要一个现实世界的解释,如果它真的更好的高性能与否.
提前致谢!!
MySQL 5.5中InnoDB存储引擎中text和varchar之间的主要区别是什么?
如果我们讨论的变量文本字段不超过5000个字符,是否使用text或varchar(5000)?
将行插入到彼此引用为1对1的表中的最佳方法是什么?
我的意思是,在MySQL 5.5和表InnoDB中,我有一个类似于以下的数据库设计

当我们尝试在table1和table2中插入行时出现问题.由于MySQL中没有多表插入,因此我不能插入一行,因为两个表中的外键都是NOT NULL字段,并且应该同时插入两个表中.
哪个是解决这个问题的方法?
我想到了3个可能的解决方案,但我想知道是否有更多这些或哪个是最好的以及为什么.
将外键字段设置为NULLABLE,并在表中插入一行后插入另一行,然后更新de first.
正如上面所指出的那样但是有一个像-1这样的特殊值.首先,在一个表中插入一个key = -1等于NULL的外表,但避免将该字段设置为NULLABLE.然后,我们在另一个表中插入行并更新插入的第一行.
在两者之间创建关系表,虽然它不是必需的,因为它是1比1的比率
谢谢!!
编辑 我简要解释一下我需要这个循环关系:它是从父表到其子节点之间的非规范化.按照高性能的顺序,它始终是父表中排名最高的子项的引用.