Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - סקריפט פרל מתנהג שונה בין גירסאות

Anonymous - 07/02/2017 - 23:28
נושא ההודעה: סקריפט פרל מתנהג שונה בין גירסאות
שלום,

יש לי את הסקריפט הבא בפרל:
קוד:
/usr/bin/perl

use strict;
use warnings;
use DBI;

sub dbclose {
    my ($dbh) = shift;
    $dbh->disconnect or die "Can't disconnect: $!";
}

sub dbconn {
    my ($dbname) = @_;

    my $host = "rns";
    my $user = "root" ;
    my $pw   = "passwd";

    my $dsn = "DBI:mysql:host=$host;database=$dbname";

    my $dbh = DBI->connect($dsn, $user, $pw)
        or die "Can't connect to $dbname: $!";

    return $dbh;
}

my $database_name = 'list';  # the name of your database

my $dbh = dbconn($database_name);

# do your work with $dbh ...

dbclose($dbh);

כשאני מריץ אותו באובונטו 12.04.5, גירסת פרל v5.14.2 הכול עובד בסדר.
אבל כשאני מריץ את אותו סקריפט על אובונטו 16.04.1 גירסת פרל v5.22.1, אני מקבל את הפלט הבא:
קוד:
DBI connect('list;rns','root',...) failed: Malformed packet at test1.pl


יש למישהו רעיון מה יכולה להיות הבעיה?
Anonymous - 08/02/2017 - 00:10
נושא ההודעה:
מהקונסול אתה מצליח?
קוד:
mysql -h bla -u bla -p

Anonymous - 08/02/2017 - 00:19
נושא ההודעה:
ובנוסף דקדק אומר max_allowed_packet
Anonymous - 08/02/2017 - 15:52
נושא ההודעה:
לא קשור :
מהקונסול אתה מצליח?
קוד:
mysql -h bla -u bla -p


אותה שגיאה
Anonymous - 08/02/2017 - 15:53
נושא ההודעה:
לא קשור :
ובנוסף דקדק אומר max_allowed_packet

זה בשרת נכון? אני לא יכול לשנות את השרת.
Anonymous - 08/02/2017 - 16:28
נושא ההודעה:
WobnI - offline :
לא קשור :
ובנוסף דקדק אומר max_allowed_packet

זה בשרת נכון? אני לא יכול לשנות את השרת.


אוקיי אז אנחנו מבינים שזה לא הפרל.
לפי השורה הזו בקישור שנתתי
קוד:

Change in the my.ini or ~/.my.cnf


הקובץ ~/.my.cnf נראה לי לוקאלי. תנסה ליצור אותו תחת היוזר של הקליינט שלא מתחבר (ולהקטין בהדרגה את הגודל)
Anonymous - 08/02/2017 - 16:38
נושא ההודעה:
כמובן שאתה צריך לרשום [client] או [mysql] ולא [mysqld]

ראה כאן לגבי charset

http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf#3513812

ופשוט תכתוב במקום
קוד:
SET max_allowed_packet=...M

Anonymous - 09/02/2017 - 08:55
נושא ההודעה:
זה לא עובד, שמתי את זה בלוקלי וגם ניסיתי בשורת הפקודה עם הערך של 2 ג'יגה וזה עדיין קורה, יש עוד רעיונות?
Anonymous - 09/02/2017 - 09:08
נושא ההודעה:
תבדוק שלא מדובר על mysql old auth.

https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest
Anonymous - 09/02/2017 - 09:09
נושא ההודעה:
ניסית להבין בכלל מה אתה עושה?
החשד הוא שהקליינט שולח פאקטה גדולה מדי לסרבר.
אז או שמגדילים בסרבר או שמקטינים בקליינט.

אבל עזוב זה לא עובד. זה בטח משהו אחר.
Anonymous - 09/02/2017 - 16:25
נושא ההודעה:
טוב, שיניתי בשרת, ניסיתי ואותה בעיה.
נראה לי שהבעיה נעוצה בכך שהשרת ישן מאוד, מדובע על גירסת שרת 5.0.45.
כל הזמנים הם GMT + 2 שעות