这是计算所有表并将结果存储在临时表中的过程:
DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `COUNT_ALL`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE TNAME CHAR(255);
DECLARE table_names CURSOR for
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN table_names;
DROP TABLE IF EXISTS TCOUNTS;
CREATE TEMPORARY TABLE TCOUNTS
(
TABLE_NAME CHAR(255),
RECORD_COUNT INT
) ENGINE = MEMORY;
WHILE done = 0 DO
FETCH NEXT FROM table_names INTO TNAME;
IF done = 0 THEN
SET @SQL_TXT = CONCAT("INSERT INTO TCOUNTS(SELECT '" , TNAME , "' AS TABLE_NAME, COUNT(*) AS RECORD_COUNT FROM ", TNAME, ")");
PREPARE stmt_name FROM @SQL_TXT;
EXECUTE stmt_name;
DEALLOCATE PREPARE stmt_name;
END IF;
END WHILE;
CLOSE table_names;
SELECT * FROM TCOUNTS;
SELECT SUM(RECORD_COUNT) AS TOTAL_DATABASE_RECORD_CT FROM TCOUNTS;
END
$$
在mysql>中工作正常终端,所以我可以使用CALL COUNT_ALL语句,过了一段时间我打印了带有结果的表。
任何人都可以帮助如何在PhpMyAdmin中存储此特定程序吗?我正在努力学习文档,我看不到明确的解释,只有几篇文章描述了简单的程序创建,但没有这么复杂的解决方案...
PhpMyAdmin不希望授予对此过程的访问权限,它会在INVOKER / DEFINER字段中生成cPanel会话令牌,并且在注销和登录后再次失去过程。它不适用于root,database_root,database_user,cpanel_user,我已尝试过每个帐户。它适用于临时cPanel会话,例如仅由DEFINER字段中的phpMyAdmin插入的cpses_adyCcgNvgZ @ localhost。否则我有一个信息: MySQL说:#1227 - 访问被拒绝;您需要(至少一个)此操作的SUPER权限
服务器在带有WHM和CPanel的Centos7系统上,我拥有所有root权限。
所以问题是如何将此过程永久存储在phpMyAdmin中并删除此消息?
===========
最终解决了,也许对其他人有帮助。
WHM存在问题。当您登录WHM然后从WHM登录cPanel帐户并输入phpMyAdmin时,您将被识别为session_user @ localhost,然后您只能在会话中创建和执行过程。存储过程和函数,但不能使用不同的会话令牌访问。
要避免此类行为,您应该直接登录cPanel,这样phpMyAdmin就能正确识别您,并且数据库中的每个过程都将INVOKER / DEFINER字段设置为you_cpanel_login @ localhost。因此,每个程序/功能都是完全可访问的。
希望对某人有所帮助。