MariaDB 10.0慢工作mysqldump

我在我的MariaDB 10.0中有1.800(innodb)数据库,“mysqldump”工作非常缓慢!

如果我运行'mysqldump'启动过程:

“SELECT LOGFILE_GROUP_NAME,FILE_NAME,TOTAL_EXTENTS,INITIAL_SIZE,ENGINE,EXTRA FROM INFORMATION_SCHEMA.FILES where FILE_TYPE ='UNDO LOG'AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN(

SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE ='DATAFILE'AND TABLESPACE_NAME IN(

SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN('table_test')))GROUP BY LOGFILE_GROUP_NAME,FILE_NAME,ENGINE ORDER BY LOGFILE_GROUP_NAME“in information_schema

如何解决? 如何在'mysqldump'中禁用这个过程?

谢谢!

编辑:

这个问题在MariaDB 10.0.8和5.5.36中得到了证实,并且由于查询优化器的实现差异,确认在MySQL 5.5.36中不存在。

下面的文字因此根据MariaDB的Elena Stepanova的build议进行调整。


我已经在Debian喘息的MariaDB 10.0.8中再现了这种行为。 我一直无法在MySQL 5.5.36中重现它。

如果执行mysqldump -uroot或具有完全权限的任何用户,则会生成一个查询,导致MariaDB的mysqld扫描这些子目录中所有表的所有子目录和所有表元数据。

如果你使用特定的用户权限执行mysqldump,并且只允许访问一个或两个数据库,那么mysqldump就像你期望的那样快。

有两个解决方法。

解决方法A仍然使用超级特权用户访问所有数据库,但通过禁用半连接function来加速进程。

解决方法B创build一个备份用户,依次授予对每个数据库的访问权限,从而缩小权限集。

哪种方法最适合您取决于您​​使用超级特权用户访问所有数据库,您拥有多less数据库,有多less用户访问多个数据库,多less个数据库之间存在依赖关系,以及在进行数据库转储时如何访问数据库。

解决方法A可能是最快的,解决方法B稍慢。


解决方法A – 超级特权用户,禁用半连接

请注意,禁用semijoin可能会影响其他查询的性能。 虽然它可以在my.cnf中设置,你可能不应该。

  1. 暂时禁用半连接:

     SET GLOBAL optimizer_switch='semijoin=off'; 
  2. 转储数据库,例如作为“根”用户:

     mysqldump db -uroot -prootpassword | gzip > DB.sql.gz 
  3. 重新启用semijoin:

     SET GLOBAL optimizer_switch='semijoin=on'; 

解决方法B – 单独的备份用户

  1. 授予备份用户对数据库的完全权限:

     GRANT USAGE ON `db`.* TO 'backup'@'%' IDENTIFIED BY 'backuppassword'; GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'backup'@'%'; GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `db`.* TO 'backup'@'%'; FLUSH PRIVILEGES; 
  2. 以该用户的身份转储数据库:

     mysqldump db -ubackup -pbackuppassword | gzip > DB.sql.gz 
  3. 撤销权限:

     REVOKE ALL PRIVILEGES ON `db`.* FROM 'backup'@'%'; REVOKE ALL PRIVILEGES ON `mysql`.* FROM 'backup'@'%'; FLUSH PRIVILEGES; 

如果每个数据库都由一个单独的用户拥有,并且您知道这些用户的密码,那么您当然可以使用这些而不是备份用户及其密码,从而完全跳过第1步和第3步。


顺便说一句:我也向MariaDB开发团队汇报过,如果您有任何有用的贡献,请随时关注:

https://mariadb.atlassian.net/browse/MDEV-5723