programing

mysql.proc의 열 개수가 잘못되었습니다.예상 20명, 16명 발견테이블이 파손되었을 가능성이 있습니다.

kingscode 2022. 10. 2. 21:39
반응형

mysql.proc의 열 개수가 잘못되었습니다.예상 20명, 16명 발견테이블이 파손되었을 가능성이 있습니다.

저는 000webhost.com을 사용하고 있으며, 그곳에서 phpMyAdmin을 사용하고 있습니다.제목에 다음과 같이 PHP 스크립트를 실행하면 MySQL에서 이 오류가 발생합니다.

mysql.proc의 열 개수가 잘못되었습니다.예상 20명, 16명 발견

테이블이 파손되었을 가능성이 있습니다.

이에 대한 해결책이 있습니까?

<?php
$username="usrname";
$password="passwd";
$database="a1xxxxx_mydb";
$host="mysqlxx.000webhost.com";
mysql_connect($host,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
if (isset($_GET["userLatitude"]) && isset($_GET["userLongitude"])) {

 $userLatitude=$_GET['userLatitude']; 
 $userLongitude=$_GET['userLongitude']; 
 $result = mysql_query("SELECT locationName, ( 6371 * acos( cos( radians(floatval(     $userLatitude) )) * cos( radians( locationLatitude ) ) * cos( radians( locationLongitude ) - radians( floatval($userLatitude)) ) + sin( radians(floatval($userLongitude)) ) * sin( radians( locationLatitude) ) ) ) AS distance 
         FROM Location HAVING distance < 2 ORDER BY distance LIMIT 0 ,20") or die(mysql_error()); 
echo $result;

 // check for empty result
if (mysql_num_rows($result) > 0) {
   // looping through all results
   // products node
  $response["Location"] = array();

  while ($row = mysql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["locationName"] = $row["locationName"];
    $product["locationInfo"] = $row["locationInfo"];
    $product["locationLatitude"] = $row["locationLatitude"];
    $product["locationLongitude"] = $row["locationLongitude"];
    $product["locationPic"] = $row["locationPic"];
    $product["city"] = $row["city"];

    // push single product into final response array
    array_push($response["Location"], $product);
 }
 // success
 $response["success"] = 1;

   // echoing JSON response
   echo json_encode($response);
 } else {
// no products found
$response["success"] = 0;
$response["message"] = "No products found";

// echo no users JSON
echo json_encode($response);
 }
 }
  else {
    // required field is missing
   $response["success"] = 0;
   $response["message"] = "Required field(s) is missing";

  // echoing JSON response
  echo json_encode($response);
 }
mysql_close();
?>

저도 이 오류가 있었어요.달려서 고쳤다.

mysql_upgrade -u root -p

또한 를 실행하여 mysql 서비스를 재시작합니다.

service mysqld restart

MacOS 모하비에서 XAMPP를 xampp-osx-7.2.10에서 7.3.9로 업데이트 했을 때도 같은 문제가 있었습니다.해결책은 다음과 같습니다.

"Macintosh HD applic Applications x XAMPP x xamppfiles bin bin" 에서 mysql_upgrade 파일을 찾아 더블 클릭합니다.

이 오류는 잘못된 업그레이드가 수행되었을 때 발생합니다.예를 들어 5.0에서5.1로 업그레이드 했을 때 mysql_upgrade 스크립트를 실행하지 않았을 때 발생합니다.또한 드물지만 5.0에서 5.5로 직접 업그레이드 했을 때 발생할 수 있습니다.(많은 사용자가 이렇게 하는데 이러한 업데이트는 공식적으로 지원되지 않습니다.)호스팅 서비스를 사용하고 있다고 합니다.티켓을 생성하여 알려야 한다고 생각합니다.그 문제에 대해서.SUPER 특권이 없으면 할 수 있는 일이 없습니다.단, 권한이 있는 경우 mysql_upgrade를 실행하기만 하면 됩니다.

Ubuntu 18.04에 XAMPP 7.4.8을 설치한 후 MySQL Workbench 8.0.21에서도 동일한 오류가 발생하였습니다.phpMyAdmin 사용에는 문제가 없었습니다.

Error Code: 1558 Column count of mysql.proc is wrong. Expected 21, found 20. Created with MariaDB 100108, now running 100413. Please use mysql_upgrade to fix this error

솔루션:

sudo /opt/lampp/lampp start
/opt/lampp/bin/mysql_upgrade

문제는 해결됐습니다.

크레딧:XAMPP에 오류가 있는 것 같습니다(https://community.apachefriends.org/f/viewtopic.php?f=17&t=78386&sid=3d3824dd0b6aa2e33c3adc73c744b4b4).

Debian 8(jessie)에서 mysql 서버를 5.5에서 5.7로 업데이트 했을 때도 같은 문제가 있었습니다.제 경우 다음 명령을 실행했을 때 정상적으로 동작했습니다.

mysql_upgrade --force -uroot -p

Ubuntu 20.04에서 xampp를 사용하고 있는데, 동일한 메시지 오류를 반환하는 문제는 이 솔루션으로 해결되었습니다.

  1. xampp 디렉토리 cd /opt/lampp/로 이동합니다.
  2. bin 디렉토리: cd bin으로 이동합니다.
  3. sudo ./mysql_upgrade 스크립트를 실행합니다.

크레딧 : https://askubuntu.com/questions/1171409/how-to-run-mysql-upgrade-when-using-xampp

업그레이드의 필요성에 대해서는 정확하지만, 이 에러가 발생하는 것은 그것뿐만이 아닙니다.

1 행을 반환하는 쿼리로 다음 호출 시

 my $rv = $sth_indexq->fetchall_arrayref;

다음 오류가 보고됩니다.

DBD::mysql::st execute failed: Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50520, now running 50528. Please use mysql_upgrade to fix this error. at 
...

그러나 오류의 진짜 원인은 fetchrow_arrayref 대신 fetchall_arrayref를 사용한 것입니다.다음은 오류 없이 작동했습니다.

my $rv = $sth_indexq->fetchrow_arrayref;

$rv의 데이터는 2가 아니라 1레벨에 불과했습니다.

mysql_upgrade 솔루션은 이 문제를 매우 잘 해결할 수 있지만 간단한 솔루션은 데이터를 알고 올바른 검색 코드를 사용하는 것입니다.

제이 화이트

Windows 10 시스템을 사용하고 있었는데, 그 솔루션은 mysql_upgrade -u root -p였습니다.

그러나 이 명령어가 작동하려면 설치 디렉토리의 mysql/bin 폴더에 있는 mysql_upgrade 스크립트에 대한 경로를 환경 변수 경로에 추가해야 합니다.

아래 명령어를 브라우저로 누르다

/opt/lampp/bin/mysql_upgrade

Linux의 경우

LAMPP 를 사용하고 있는 경우는, 다음과 같이 수정할 수 있습니다.

sudo /opt/lampp/lampp start
/opt/lampp/bin/mysql_upgrade

그렇지 않으면 mysql을 별도로 설치한 경우 다음과 같이 할 수 있습니다.

mysql_upgrade -u root -p 
service mysqld restart

다른 OS의 경우 lampp 설치의 bin 디렉토리로 이동하여 mysql_upgrade 파일을 검색하여 실행해 보십시오.

예를 들어 이행이 아닌 업그레이드 시 발생합니다.

the where 라고 쓰여있는 부분version check failed련련: :

Version check failed. Got the following error when calling the 'mysql' command line client
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
FATAL ERROR: Upgrade failed

되지 않는 만, 「호환성이 없는 클라이언트 버전은, 「호환성이 없다」라고 하는 것입니다.mysql데이터베이스도 다릅니다.

이것이 테이블의 현재 정의입니다.enum 컬럼을 보여줍니다.type 컬럼이 되어 있습니다.aggregate3.3

또 다른 문제는 다음과 같습니다.

MariaDB 10.4 이상에서는 이 테이블은 Aria 스토리지 엔진을 사용합니다.

5.파일을 한 후 " 5.x"를 한다.InnoDB " " "proc도움말; (MariaDB 5.x의 경우): https://github.com/google/mysql/blob/master/scripts/mysql_system_tables.sql

경우에는 에일리어스 에일리어스를 문제가 하였습니다.COUNT()★★★★★★★★★★★★★★★★★★:

MariaDB> SELECT x.COUNT(1) FROM (SELECT 1) AS x;
ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 21, found 20. Created with MariaDB 100137, now running 100334. Please use mysql_upgrade to fix this error

MariaDB> SELECT COUNT(1) FROM (SELECT 1) AS x;
+-------------+
| COUNT(test) |
+-------------+
|           1 |
+-------------+
1 row in set (0.001 sec)

바와 같이 COUNT()그건 효과가 있다. SELECT 로 SELECT 필드 앞에 되어 버렸습니다.COUNT()새로운 데이터베이스에 다른 에러 메시지가 표시되는지 어떨지는 모르겠지만 서버는 수년간 정상적으로 동작하고 있으며 쿼리를 수정함으로써 에러는 해소됩니다.따라서...이 스레드의 다른 문제처럼 업그레이드/실행 문제가 아니라 런타임/실행 오류인 것 같습니다.

언급URL : https://stackoverflow.com/questions/16177465/column-count-of-mysql-proc-is-wrong-expected-20-found-16-the-table-is-probabl

반응형