Пожалуйста, помогите решить проблему! Собственно говоря, имеется FreeBSD 8.2, систему ставил с нуля с портами где-то в конце декабря. Вчера вот, по приказу с выше, решил установить из портов программу статистики atslog-2.1.1_3 для нашей офисной АТСки. Собралась, поставилась нормально. После её установки необходимо выполнить ещё кое какие шаги, и один из таких шагов это выполнить скрипт sql, который создает пользователей, таблицы, базы данных и чего-то в эти базы и таблицы прописывает ещё. Вот собственно на нем и застопорился. Выскакивает ошибка об ошибке синтаксиса sql(
Creating user...OK
Creating tables...You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(14) NOT NULL,
`x_forwardeded_for` varchar(64) default NULL,
KEY `username` ' at line 5OK
Inserting data...OK
Patching configuration file...
Done

У меня стоит mysql-server-5.5.19, у кого 5.0 у тех все нормально. Ставить версию 5.0 очень бы не хотелось! В самом языке я плохо понимаю, может кто-нибудь поможет со скриптом, ошибку исправить? Сам скрипт, если кто устанавливал знает, запускается так /usr/local/share/atslog/sql/install-sql.pl /usr/local/etc/atslog.conf . Выкладываю все файлики, что затрагиваются в этом шаге.
install-sql.pl
Код: Выделить всё
#!/usr/bin/perl
# ATSlog version 2.1.1 build 664 www.atslog.com
# Copyright (C) 2003 Denis CyxoB www.yamiyam.dp.ua
BEGIN {
print "\nATSlog SQL database installer/updater\n\n";
}
use DBI;
use File::Copy; # copy/move functions
$config=$ARGV[0];
if ( ! -f $config) {
die ("USAGE: install-sql <atslog_config>\n\nCant open \"$config\" file\n");
}
my $dbtype =input('Database type: (mysql or postgresql)', 'mysql');
my @drivers = DBI->available_drivers;
die "No drivers found!\n" unless @drivers; # should never happen
if ($dbtype !~ /^(mysql|postgresql)$/){
die("Wrong database type '$dbtype'\n");
}
if ($dbtype eq "postgresql"){
$sqltype="Pg";
$dbname="template1";
}
else{ # mysql
$sqltype="mysql";
$dbname="mysql";
}
if (!grep { /^(${sqltype})$/ } @drivers) {
die("Please install DBI:$sqltype driver\n");
}
my $root =input('Database manager', 'root');
my $rpsw =input('Manager\'s password', '');
my $dbhost =input('Database host', 'localhost');
my $atslogdb =input('Database name', 'atslog');
my $atslogdu =input('Database user', 'atslog');
my $atslogdp =input('User\'s password', randomPassword(8));
my $dsn="DBI:$sqltype:database=$dbname;";
if($dbhost ne "localhost") { $dsn .= "host=$dbhost;";}
print "Connecting to '$dsn' as '$root'...\n";
my $db=DBI->connect($dsn,$root,$rpsw,{PrintError => 0})
||die("Could not connect to $sqltype as '$root'. ".$DBI::errstr);
print "Creating database...";
$db->do("CREATE DATABASE ${atslogdb};");
if($db->err){
if($db->err==7 || $db->err==1007){ # mysql and Pg
print "FAILED\n";
print("WARNING: Database \"${atslogdb}\" already exists.\nInstaller will drop it and create a new one.\n");
if(input('Continue (yes|no)?','no')!~/^yes$/i) {
die("Please backup your existing database and try again.\n");
}
print "Drop database ${atslogdb}...";
$db->do("DROP DATABASE ${atslogdb};"); print $db->err ? $db->errstr : '';
print "OK\n";
$db->do("CREATE DATABASE ${atslogdb};");
}
elsif($db->err) {
die($db->err.":".$db->errstr."\n");
}
}
else { print "OK\n";}
print "Creating user...";
if ($sqltype eq "mysql") {
$db->do("delete from mysql.user where user=\'${atslogdu}\';"); print $db->err ? $db->errstr : '';
$db->do("GRANT USAGE ON *.* TO \'${atslogdu}\'@\'${dbhost}' IDENTIFIED BY \'${atslogdp}\' WITH GRANT OPTION;"); print $db->err ? $db->errstr : '';
$db->do("GRANT ALL PRIVILEGES ON ${atslogdb}.* TO \'${atslogdu}\'@\'localhost\'"); print $db->err ? $db->errstr : '';
$db->do("FLUSH PRIVILEGES;"); print $db->err ? $db->errstr : '';
}
elsif($sqltype eq "Pg"){
$db->do("SET client_min_messages = 'ERROR';"); print $db->err ? $db->errstr : '';
$db->do("DROP USER ${atslogdu}");
$db->do("CREATE USER ${atslogdu} PASSWORD '${atslogdp}' CREATEDB CREATEUSER;"); print $db->err ? $db->errstr : '';
$db->do("SET SESSION AUTHORIZATION '${atslogdu}';"); print $db->err ? $db->errstr : '';
$db->do("GRANT ALL ON DATABASE ${atslogdb} TO ${atslogdu};"); print $db->err ? $db->errstr : '';
}
print "OK\n";
if ($sqltype eq "mysql") {
$db->do("USE ${atslogdb};"); print $db->err ? $db->errstr : '';
}
elsif ($sqltype eq "Pg") {
$db->disconnect;
$dsn="DBI:$sqltype:database=${atslogdb};";
if($dbhost ne "localhost") { $dsn .= "host=$dbhost;";}
print "Connecting to '$dsn' as '$root'...\n";
$db=DBI->connect($dsn,$root,$rpsw,{PrintError => 0})
||die("Could not connect to $sqltype as '$root'. ".$DBI::errstr);
}
my $row;
my $cmd ='';
my $cmt ='';
print "Creating tables...";
open(DATA,"/usr/local/share/atslog/sql/createsqltables.${sqltype}.sql") || die print("Can open SQL dump /usr/local/share/atslog/sql/createsqltables.${sqltype}.sql");
readsql();
close(DATA);
print "OK\n";
print "Inserting data...";
open(DATA,"/usr/local/share/atslog/sql/data.sql") || die print("Cant open SQL dump");
readsql();
close(DATA);
print "OK\n";
print("Patching configuration file...\n");
move($config,$config.".bak");
open IN, $config.".bak" or die $!;
open OUT, ">$config" or die $!;
while ($row =<IN>) {
$row =~ s/^sqlhost=.*$/sqlhost=$dbhost/g;
$row =~ s/^sqldatabase=.*$/sqldatabase=$atslogdb/g;
$row =~ s/^sqlmasteruser=.*$/sqlmasteruser=$atslogdu/g;
$row =~ s/^sqlmaspasswd=.*$/sqlmaspasswd=$atslogdp/g;
$row =~ s/^sqltype=.*$/sqltype=$dbtype/g;
print OUT $row;
}
close IN;close OUT;
print("Done :)\n");
sub input {
my ($pr, $dv) =@_;
print $pr, @_ >1 ? ' [' .(defined($dv) ? $dv : 'null') .']' :'', ': ';
my $r =<STDIN>;
chomp($r);
$r eq '' ? $dv : $r
}
sub readsql {
while ($row =<DATA>) {
chomp($row);
if ($cmd && ($row =~/^#/ || ($cmd !~/^\s*\{/ && $cmd =~/;\s*$/) )) {
my $v;
chomp($cmd);
#print $cmt ||$cmd, " -> ";
if ($cmd =~/^\s*\{/) {$v =eval($cmd); print $@ ? $@ : ''}
else {$v =$db->do($cmd); print $db->err ? $db->errstr : ''}
#print ': ', defined($v) ? $v : 'null', "\n\n";
$cmd ='';
$cmt ='';
}
next if $row =~/^\s*#*\s*$/;
if ($row =~/^#/ && $cmd !~/^\s*\{/) {
$cmt =$row;
}
elsif ($row =~/^\s*#/ || $row eq '') {
}
else {
$cmd .=($cmd ? "\n" : '') .$row;
}
}
}
sub randomPassword {
my $password;
my $_rand;
my $password_length = $_[0];
if (!$password_length) {
$password_length = 10;
}
my @chars = split(" ",
"a b c d e f g h i j k l m n o p q r s t u v w x y z
- _ % #
0 1 2 3 4 5 6 7 8 9");
srand;
for (my $i=0; $i <= $password_length ;$i++) {
$_rand = int(rand 41);
$password .= $chars[$_rand];
}
return $password;
}
Код: Выделить всё
CREATE TABLE `calls` (
`timeofcall` datetime NOT NULL default '0000-00-00 00:00:00',
`forwarded` char(3) default NULL,
`internally` smallint(6) unsigned default NULL,
`co` smallint(6) unsigned default NULL,
`way` char(3) default NULL,
`number` decimal(65,0) unsigned NOT NULL default '0',
`duration` int(10) unsigned NOT NULL default '0',
`cost` decimal(65,3) unsigned default '0.000',
KEY `co` (`co`),
KEY `internally` (`internally`),
KEY `timeofcall` (`timeofcall`),
KEY `cost` (`cost`)
) COMMENT='www.ATSlog.dp.ua';
CREATE TABLE `country` (
`id` int(4) unsigned NOT NULL default '0',
`name` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) COMMENT='List of countries with tel codes';
CREATE TABLE `unauth` (
`username` varchar(64) NOT NULL default '',
`pass` varchar(64) NOT NULL default '',
`ip` varchar(64) default NULL,
`logintime` timestamp(14) NOT NULL,
`x_forwardeded_for` varchar(64) default NULL,
KEY `username` (`username`),
KEY `pass` (`pass`),
KEY `logintime` (`logintime`),
KEY `ip` (`ip`)
) COMMENT='Attempts of authentifications';
CREATE TABLE `users` (
`internally` varchar(25) NOT NULL default '0',
`login` varchar(25) NOT NULL default '',
`password` varchar(100) default NULL,
`firstname` varchar(25) default NULL,
`secondname` varchar(25) default NULL,
`lastname` varchar(25) default NULL,
PRIMARY KEY (`internally`,`login`)
) COMMENT='Personnels';
CREATE TABLE `usersgroups` (
`login` varchar(25) NOT NULL default '',
`groups` varchar(25) NOT NULL default '',
KEY `login` (`login`),
KEY `groups` (`groups`)
) COMMENT='Permissions';
CREATE TABLE `extlines` (
`line` varchar(25) NOT NULL default '0',
`name` varchar(25) NOT NULL default '',
UNIQUE KEY `line` (`line`),
KEY `name` (`name`)
) COMMENT='Names of external lines';
CREATE TABLE `intphones` (
`intnumber` varchar(25) NOT NULL default '0',
`name` varchar(25) NOT NULL default '',
UNIQUE KEY `intnumber` (`intnumber`),
KEY `name` (`name`)
) COMMENT='Names of internally phones';
CREATE TABLE `phonebook` (
`login` varchar(25) default NULL,
`number` decimal(65,0) unsigned default '0',
`description` varchar(255) default NULL,
UNIQUE KEY `number` (`number`),
KEY `login` (`login`),
KEY `description` (`description`)
) COMMENT='Phone book';
CREATE TABLE `towns` (
`id` int(6) unsigned NOT NULL default '0',
`id_country` smallint(4) unsigned NOT NULL default '0',
`name` varchar(50) NOT NULL default '',
KEY `id` (`id`),
KEY `id_country` (`id_country`)
) COMMENT='Towns codes with the links to country';
Код: Выделить всё
#
# Дамп данных таблицы users
#
INSERT INTO users VALUES ('atslog', 'atslog', MD5('atslog'), 'by', 'default', 'Administrator');
# --------------------------------------------------------
#
# Дамп данных таблицы usersgroups
#
INSERT INTO usersgroups VALUES ('atslog', 'parameters');
INSERT INTO usersgroups VALUES ('atslog', 'allabonents');
INSERT INTO usersgroups VALUES ('atslog', 'usersadmin');
INSERT INTO usersgroups VALUES ('atslog', 'access');
#
# Дамп данных таблицы country
#
INSERT INTO country VALUES (43, 'Австрия');
INSERT INTO country VALUES (61, 'Австралия');
INSERT INTO country VALUES (380, 'Украина');
INSERT INTO country VALUES (994, 'Азербайджан');
INSERT INTO country VALUES (213, 'Алжир');
INSERT INTO country VALUES (54, 'Аргентина');
INSERT INTO country VALUES (374, 'Армения');
INSERT INTO country VALUES (880, 'Бангладеш');
INSERT INTO country VALUES (375, 'Беларусь');
INSERT INTO country VALUES (32, 'Бельгия');
INSERT INTO country VALUES (359, 'Болгария');
INSERT INTO country VALUES (591, 'Боливия');
INSERT INTO country VALUES (387, 'Босния и герцеговина');
INSERT INTO country VALUES (55, 'Бразилия');
INSERT INTO country VALUES (44, 'Великобритания');
INSERT INTO country VALUES (36, 'Венгрия');
INSERT INTO country VALUES (58, 'Венесуэла');
INSERT INTO country VALUES (49, 'Германия');
INSERT INTO country VALUES (30, 'Греция');
INSERT INTO country VALUES (995, 'Грузия');
INSERT INTO country VALUES (45, 'Дания');
INSERT INTO country VALUES (20, 'Египет');
INSERT INTO country VALUES (260, 'Замбия');
INSERT INTO country VALUES (263, 'Зимбабве');
INSERT INTO country VALUES (972, 'Израиль');
INSERT INTO country VALUES (91, 'Индия');
INSERT INTO country VALUES (62, 'Индонезия');
INSERT INTO country VALUES (962, 'Иордания');
INSERT INTO country VALUES (964, 'Ирак');
INSERT INTO country VALUES (98, 'Иран');
INSERT INTO country VALUES (353, 'Ирландия');
INSERT INTO country VALUES (34, 'Испания');
INSERT INTO country VALUES (39, 'Италия');
INSERT INTO country VALUES (967, 'Йемен');
INSERT INTO country VALUES (7, 'Россия');
INSERT INTO country VALUES (237, 'Камерун');
INSERT INTO country VALUES (1, 'Канада');
INSERT INTO country VALUES (254, 'Кения');
INSERT INTO country VALUES (357, 'Кипр');
INSERT INTO country VALUES (86, 'Китай');
INSERT INTO country VALUES (57, 'Колумбия');
INSERT INTO country VALUES (996, 'Кыргызстан');
INSERT INTO country VALUES (856, 'Лаос');
INSERT INTO country VALUES (371, 'Латвия');
INSERT INTO country VALUES (218, 'Ливия');
INSERT INTO country VALUES (370, 'Литва');
INSERT INTO country VALUES (423, 'Лихтенштейн');
INSERT INTO country VALUES (389, 'Македония');
INSERT INTO country VALUES (223, 'Мали');
INSERT INTO country VALUES (212, 'Марокко');
INSERT INTO country VALUES (52, 'Мексика');
INSERT INTO country VALUES (373, 'Молдова');
INSERT INTO country VALUES (976, 'Монголия');
INSERT INTO country VALUES (234, 'Нигерия');
INSERT INTO country VALUES (31, 'Нидерланды');
INSERT INTO country VALUES (505, 'Никарагуа');
INSERT INTO country VALUES (64, 'Новая зеландия');
INSERT INTO country VALUES (47, 'Норвегия');
INSERT INTO country VALUES (971, 'Объединенные арабские эмираты');
INSERT INTO country VALUES (92, 'Пакистан');
INSERT INTO country VALUES (51, 'Перу');
INSERT INTO country VALUES (48, 'Польша');
INSERT INTO country VALUES (351, 'Португалия');
INSERT INTO country VALUES (40, 'Румыния');
INSERT INTO country VALUES (966, 'Саудовская аравия');
INSERT INTO country VALUES (963, 'Сирия');
INSERT INTO country VALUES (421, 'Словакия');
INSERT INTO country VALUES (386, 'Словения');
INSERT INTO country VALUES (232, 'Сьера-Леоне');
INSERT INTO country VALUES (992, 'Таджикистан');
INSERT INTO country VALUES (216, 'Тунис');
INSERT INTO country VALUES (993, 'Туркменистан');
INSERT INTO country VALUES (90, 'Турция');
INSERT INTO country VALUES (998, 'Узбекистан');
INSERT INTO country VALUES (63, 'Филиппины');
INSERT INTO country VALUES (358, 'Финляндия');
INSERT INTO country VALUES (33, 'Франция');
INSERT INTO country VALUES (385, 'Хорватия');
INSERT INTO country VALUES (420, 'Чехия');
INSERT INTO country VALUES (56, 'Чили');
INSERT INTO country VALUES (41, 'Швейцария');
INSERT INTO country VALUES (46, 'Швеция');
INSERT INTO country VALUES (94, 'Шри-ланка');
INSERT INTO country VALUES (593, 'Эквадор');
INSERT INTO country VALUES (372, 'Эстония');
INSERT INTO country VALUES (381, 'Югославия');
INSERT INTO country VALUES (27, 'Южно-африканская республика');
INSERT INTO country VALUES (81, 'Япония');
# --------------------------------------------------------
#
# Дамп данных таблицы towns
#
INSERT INTO towns VALUES (89, 61, 'Фару');
INSERT INTO towns VALUES (89, 61, 'Фару');
INSERT INTO towns VALUES (99, 61, 'Микатарра');
INSERT INTO towns VALUES (77, 61, 'Бихач');
INSERT INTO towns VALUES (4, 61, 'Форрест');
INSERT INTO towns VALUES (99, 61, 'Карнавон');
INSERT INTO towns VALUES (51, 61, 'Траралгон');
INSERT INTO towns VALUES (53, 61, 'Арарат');
INSERT INTO towns VALUES (85, 61, 'Ренмарк');
INSERT INTO towns VALUES (86, 61, 'Кубер-Педи');
INSERT INTO towns VALUES (49, 61, 'Нью Касл');
INSERT INTO towns VALUES (91, 61, 'Онслоу');
INSERT INTO towns VALUES (68, 61, 'Кондоболин');
INSERT INTO towns VALUES (90, 61, 'Норсмен');
INSERT INTO towns VALUES (63, 61, 'Ориндж');
INSERT INTO towns VALUES (98, 61, 'Катаннинг');
INSERT INTO towns VALUES (74, 61, 'Арамак');
INSERT INTO towns VALUES (90, 61, 'Эсперанс');
INSERT INTO towns VALUES (74, 61, 'Чарлвилл');
INSERT INTO towns VALUES (98, 61, 'Хьюэнден');
INSERT INTO towns VALUES (7, 61, 'Брисбен');
INSERT INTO towns VALUES (51, 61, 'Орбост');
INSERT INTO towns VALUES (90, 61, 'Кулгарди');
INSERT INTO towns VALUES (65, 61, 'Тари');
INSERT INTO towns VALUES (86, 61, 'Порт-Линкольн');
INSERT INTO towns VALUES (77, 61, 'Бихач');
INSERT INTO towns VALUES (2, 61, 'Сидней');
INSERT INTO towns VALUES (80, 61, 'Брокен-Хилл');
INSERT INTO towns VALUES (648, 61, 'Бомбала');
INSERT INTO towns VALUES (70, 61, 'Куктаун');
INSERT INTO towns VALUES (9, 61, 'Перт');
INSERT INTO towns VALUES (89, 61, 'Фару');
INSERT INTO towns VALUES (96, 61, 'Каланни');
INSERT INTO towns VALUES (86, 61, 'Порт Лири');
INSERT INTO towns VALUES (91, 61, 'Дерби');
INSERT INTO towns VALUES (42, 61, 'Вуллонгонг');
INSERT INTO towns VALUES (90, 61, 'Леонора');
INSERT INTO towns VALUES (74, 61, 'Лонгрич');
INSERT INTO towns VALUES (68, 61, 'Кобар');
INSERT INTO towns VALUES (3, 61, 'Мельбурн');
INSERT INTO towns VALUES (86, 61, 'Стрики Бей');
INSERT INTO towns VALUES (79, 61, 'Гладстон');
INSERT INTO towns VALUES (90, 61, 'Калгурли');
INSERT INTO towns VALUES (77, 61, 'Бихач');
INSERT INTO towns VALUES (90, 61, 'Мукинбудин');
INSERT INTO towns VALUES (98, 61, 'Ньюдегит');
INSERT INTO towns VALUES (90, 61, 'Лавертон');
INSERT INTO towns VALUES (76, 61, 'Легьюм');
INSERT INTO towns VALUES (97, 61, 'Нортклифф');
INSERT INTO towns VALUES (8, 61, 'Аделаида');
INSERT INTO towns VALUES (67, 61, 'Кингстон');
INSERT INTO towns VALUES (90, 61, 'Налларбор');
INSERT INTO towns VALUES (62, 61, 'Канберра');
INSERT INTO towns VALUES (95, 61, 'Мура');
INSERT INTO towns VALUES (66, 61, 'Лисмор (Новый Южный Уэльс)');
INSERT INTO towns VALUES (90, 61, 'Мерредин');
INSERT INTO towns VALUES (91, 61, 'Порт Хеналенд');
INSERT INTO towns VALUES (55, 61, 'Лисмор (Виктория)');
INSERT INTO towns VALUES (79, 61, 'Рокгемптон');
INSERT INTO towns VALUES (79, 61, 'Маккай');
INSERT INTO towns VALUES (91, 61, 'Дампир');
INSERT INTO towns VALUES (79, 61, 'Мариан');
INSERT INTO towns VALUES (90, 61, 'Саутерн-Кросс');
INSERT INTO towns VALUES (74, 61, 'Каннамапла');
INSERT INTO towns VALUES (77, 61, 'Бихач');
INSERT INTO towns VALUES (4233, 43, 'Гриффен');
INSERT INTO towns VALUES (2732, 43, 'Кремс На Донау');
INSERT INTO towns VALUES (2266, 43, 'Штоккерау');
INSERT INTO towns VALUES (6543, 43, 'Брукк');
INSERT INTO towns VALUES (2622, 43, 'Винер-Нойштадт');
INSERT INTO towns VALUES (2852, 43, 'Гмюнд');
INSERT INTO towns VALUES (3512, 43, 'Книттельфельд');
INSERT INTO towns VALUES (2682, 43, 'Айзенштадт');
INSERT INTO towns VALUES (5372, 43, 'Куфштайн');
INSERT INTO towns VALUES (4852, 43, 'Лиенц');
INSERT INTO towns VALUES (5522, 43, 'Ранквайль');
INSERT INTO towns VALUES (2742, 43, 'Санкт-Пельтен');
INSERT INTO towns VALUES (4715, 43, 'Кечах-Маутен');
INSERT INTO towns VALUES (7472, 43, 'Амштеттен');
INSERT INTO towns VALUES (6245, 43, 'Халляйн');
INSERT INTO towns VALUES (3862, 43, 'Капфенберг');
INSERT INTO towns VALUES (4227, 43, 'Ферлах');
INSERT INTO towns VALUES (3842, 43, 'Леобен');
INSERT INTO towns VALUES (4268, 43, 'Фризах');
INSERT INTO towns VALUES (5474, 43, 'Пфундс');
INSERT INTO towns VALUES (662, 43, 'Зальдбург');
INSERT INTO towns VALUES (3112, 43, 'Глайсдорф');
INSERT INTO towns VALUES (3452, 43, 'Лайбниц');
INSERT INTO towns VALUES (2915, 43, 'Дрозендорф На Тайе');
INSERT INTO towns VALUES (7221, 43, 'Офтеринг');
INSERT INTO towns VALUES (3632, 43, 'Санкт-Галлен');
INSERT INTO towns VALUES (512, 43, 'Инсбрук');
INSERT INTO towns VALUES (5332, 43, 'Вергль');
INSERT INTO towns VALUES (4242, 43, 'Филлах');
INSERT INTO towns VALUES (463, 43, 'Клагенфурт');
INSERT INTO towns VALUES (732, 43, 'Линц');
INSERT INTO towns VALUES (3848, 43, 'Айзенэрц');
INSERT INTO towns VALUES (5522, 43, 'Фельдкирх');
INSERT INTO towns VALUES (5285, 43, 'Майръхофен');
INSERT INTO towns VALUES (5522, 43, 'Ненцинг');
INSERT INTO towns VALUES (6564, 43, 'Криммль');
INSERT INTO towns VALUES (5574, 43, 'Брегенц');
INSERT INTO towns VALUES (316, 43, 'Грац');
INSERT INTO towns VALUES (3852, 43, 'Мюрцдушлаг');
INSERT INTO towns VALUES (7268, 43, 'Грайн');
INSERT INTO towns VALUES (7442, 43, 'Вайдхофен На Иббсе');