AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

cdr mysql через время краколябры

Asterisk IP PBX 25 сообщений -
#1

не пойму что происходит, cdr mysql через пару дней работы начинат писать в базу кракозябры в место русских букв, хотя до этого всё было ок, перезапускаешь астериск сново всё ок день-два.
Ни кто не сталкивался?

ps: cenoto 5.2
asterisk 1.4.21.1
asterisk-addons 1.4.7
mysql 5.0.22

тоже самое и на centos 4.6 и msql 4X
#2

cat my.cnf И LOCALE в студию
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
#3

cat /etc/my.cnf

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
bind-address=10.0.0.111 127.0.0.1

default-character-set=utf8


skip-character-set-client-handshake
init-connect="SET CHARACTER SET cp1251"

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

set |grep LANG
LANG=ru_RU.UTF-8


но это не важно, так как я же говорю что первые пару дней всё нормально работает, а потом слетает само по себе
#4

Цитата:
cp1251

му-ха-ха!!?
Wink

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#5

база в utf8 !! cp1251 это для подключения клиента, на делфи клиент, иначе не работало
а кодировка сбивается во время работы! тоесть пол для пишется норально, а потом кракозябры
#6

тогда надо
[client]
default-character-set=Кодировка клиента
character-sets-dir = /bla/bla/bla/charsets


[mysqld]

collation_server=utf8_unicode_ci

character_set_server=utf8

default-character-set=utf8

character-sets-dir = /bla/bla/bla/charsets


а вообще тебе сюда

_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
#7

может я невнятно объяснял, но проблемма не в том что пишутся кракозябры , а в том что пару часов нормальной работы у него срывает крышу и именно asterisk начинает писать бяки
победил тем что перешёл на cdr pgsql уже дня 4-5 всё ок
#8

[client]
default-character-set = utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
bind-address=10.0.0.111 127.0.0.1

init-connect = "SET NAMES utf8"
collation-server = utf8_unicode_ci
character-set-server = utf8
default-character-set = utf8


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


[mysql]
no-auto-rehash
default-character-set = utf8

понял в чём причина, глюк cdr_mysql
после реконекта(например после перезапуска mysql) или через пару дней почему-то разрывается слетает кодировка

show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+


вот что стало после перезапуска mysql

select * from cdr.cdr;
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+-------------+------------------------+-----------------------------------------+ dstchannel | lastapp | lastdata | duration | billsec | disposition | amaflags | accountcode | uniqueid | userfield |
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+---------+-------------+------------------------+-----------------------------------------+ IAX2/don-6041 | IAX2/stachki-16385 | Dial | IAX2/stachki/477|120|tT | 21 | 0 | NO ANSWER | 3 | | | Call from 340 to 477 |
| 2008-08-24 13:41:33 | "Сборщики отдел Лес" | 417 | 89081945087 | GLOBAL_OFFICE_AND_VOIP | SIP/417-b7a37118 | SIP/sipnet-don-092907a0 | Dial | SIP/89081945087@sipnet-don|120|tT | 8 | 0 | FAILED | 3 | | | |
| 2008-08-24 13:41:44 | "Михеев Олег отдел Отдел Серви�а" | 400 | 437 | GLOBAL_OFFICE_AND_VOIP | SIP/400-b7b55938 | SIP/437-09251420 | Dial | SIP/437|15|tT | 40 | 32 | ANSWERED
#9

а эта же самая база использует кодировку отличную от utf8 гдето еще?
я думаю что это вовсе вина не crd а самой mysql (или кривости его конфигов)

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#10

делаю unload cdr_addon_mysql.so
load cdr_addon_mysql.so
и снова всё ок, до первого перезапуска mysql или реконекта
#11

это ничего не доказывает.
предлагаю полностью mysql на utf8 перевести целиком. тоесть если есть еще базы то конвертнуть их в utf тоже.
и потом уже поглядеть.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#12

Версия сервера: 5.0.45
Версия протокола: 10
Сервер: Localhost via UNIX socket
Пользователь: root@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: utf8_general_ci


cdr 34 MyISAM utf8_unicode_ci 9.4 КБ

Поле Тип Сравнение Атрибуты Null По умолчанию Дополнительно Действие
calldate datetime Нет 0000-00-00 00:00:00
clid varchar(80) utf8_unicode_ci Нет
src varchar(80) utf8_unicode_ci Нет
dst varchar(80) utf8_unicode_ci Нет
dcontext varchar(80) utf8_unicode_ci Нет
channel varchar(80) utf8_unicode_ci Нет
dstchannel varchar(80) utf8_unicode_ci Нет
lastapp varchar(80) utf8_unicode_ci Нет
lastdata varchar(80) utf8_unicode_ci Нет
duration int(11) Нет 0
billsec int(11) Нет 0
disposition varchar(45) utf8_unicode_ci Нет
amaflags int(11) Нет 0
accountcode varchar(20) utf8_unicode_ci Нет
uniqueid varchar(32) utf8_unicode_ci Нет
userfield varchar(255) utf8_unicode_ci Нет


всё и так в utf8
#13

так mysql РУССИФИЦИРОВАННЫЙ??????? Mad
ну так вот и проблема где, чтож тут нее понятно?! Wink
ps: у меня уже пару лет крутится все в utf8, на оригинальной версии а не неизвестно кем пересобранной и никаких проблем. никогда не любил руссифицированный софт, так как по опыту давно мной замечено что все эти руссификации вносят дополнительные баги в софт.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#14

нет, английский
это просто я вял из phpmyadmin, не знал как получить эту информацию из коммандной строки

решил пока таким способом
в cdr_addon_mysql.c добавил строки
mysql_real_query(&mysql, "charset utf8", strlen("charset utf8"));
mysql_real_query(&mysql, "SET NAMES utf8", strlen("SET NAMES utf8"));

следующие после 247 строки
if (option_debug)
ast_log(LOG_DEBUG, "cdr_mysql: SQL command as follows: %s\n", sqlcmd);

if (connected) {

хоть решение и не красивое, так как выполянется 2 команды перед каждой записью в бд, но в помент подключения почему-то не сработало, хотя не сильно разбирался
#15

и всетаки я думаю что косяк не в софте а гдето в кривости ваших конфигов. сто пудова.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#16

ну как может быть кровость в конфиге если до дисконекта всё работает???
и только если перегрузить mssql , тоесть сделать разрыв соединения то всё слетает
и опять же если после этого перезагрузить cdr mysql в астерике, то опять становится всё ок
#17

предлагаю проапдейтить mysqld до последней версии. 5.0.67 вроде уже есть.
апдейт не должен затронуть ваши базы, так что это вполне безопасно.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#18

для centos 5.2 это последний, если исправится эта ошибка хорошо ..., главное победил, а то наши прогеры постгрес не осолили, что бы статистику в кубы загонять
#19

я думаю что знаю почему у вас такие проблемы Wink
пришлось правда попотеть работая с поиском.
ведь это ваше?
http://asteriskforum.ru/viewtopic.php?t=2150
я думаю ваши глюки от корявых скриптов какихто на самом деле.. Yes
и два часа у вас потому что видимо он по крону это делает...
в любом случае моя версия про корявые конфиги таки косвенно но подтвердилась. гдето у вас коряво локали настроены наверняка в системе.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#20

скрипты выполняются не по крону,
а перед диал, выполняется комманда Set(callerid(name)= name from ad)
так же берётся samsaccauntname добавляется домем и получаем jid
и отправка сообщения о звонке

в консоли астериска всегда всё(что поменял) пишется на русском!!
и уже эту инцу в бд пишет сдр

попробуте ради прикола выставить русское имя и посмотреть что пишется в бд и потом рестартить mysql и посмотреть что будет писаться потом
#21

У mysql есть такая милая штучка, которая иногда сильно осложняет жизнь. Называется auto reconnect. См. http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html
Видимо, проблема в этом. Есть предложение после mysql_init дописать соответствующие mysql_options и проверить, вылечилось ли
#22

Решил кто данную проблему? В астере 1.8 такая же фигня.
#23

Не использовать deprecated модуль.
_________________
Gentoo Linux || Asterisk 11.2-cert3
Решения телефонии на базе Asterisk || http://it-need.ru
#24

aven @ Сб Май 25, 2013 18:49 писал(а):
Не использовать deprecated модуль.
А какой тогда использовать модуль? Под старым вы подразумеваете версию астера 1.8? Уже всю голову сломал, добрые люди подскажите...
#25

использовать odbc модуль.
настройка много времени не займет.