Pthread로 도는 서버에서 mysql_real_connect 에러......

stypr의 이미지

#0  0xdfa79afe in t_splay ()
#1  0xdfa79a04 in t_delete ()
#2  0xdfa79777 in realfree ()
#3  0xdfa79cea in cleanfree ()
#4  0xdfa792fe in _malloc_unlocked ()
#5  0xdfa7921d in malloc ()
#6  0xdfadd7d6 in my_malloc ()
#7  0xdfadc8fa in vio_new ()
#8  0xdfad96e5 in mysql_real_connect ()
.
.
.

	if(!mysql_real_connect(&mysql, host, id, pass, db ,3306, (char *)NULL, 0)) {
			sprintf(log_me,"Email || %s | %s",domain,mysql_error(&mysql));
			make_log(log_me,0);
			return 0;
	}

서버(쓰레드로 구성)로 동작하는 프로그램인데...

가끔 저러네요.. 커넥트 부분에서.... 저러면서 세그먼트폴트 뿌리고 쭉 뻗음

하루에 한번씩 저러는데.. ㅇ ㅔ ㅎ ㅕ 기진 맥진...

혹시 저런 경험 하신분 답변 부탁 드립니다.

행복하세욥.

ilanch의 이미지

저도 간단히 짠 쓰레드 프로그램에서 mysql_real_connect() 함수를 이용할 때 간혹 발생했습니다.
위치는 상황에 따라 달라집니다.

# gdb 실행결과 예
...생략...
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1271411792 (LWP 1754)]
Character set 'latin1' is not a compiled character set and is not specified in the
'/usr/local/mysql/share/mysql/charsets/Index.xml' file
[*WARNING*] not connect to mysql server : ERROR= Can't initialize character set latin1
(path: /usr/local/mysql/share/mysql/charsets/)

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1271579728 (LWP 9225)]
0x00a39b4d in add_collation () from /usr/lib/mysql/libmysqlclient.so.16
(gdb) Quit
(gdb) bt
#0 0x00a39b4d in add_collation () from /usr/lib/mysql/libmysqlclient.so.16
#1 0x00a43807 in cs_leave () from /usr/lib/mysql/libmysqlclient.so.16
#2 0x00a4a5f5 in my_xml_leave () from /usr/lib/mysql/libmysqlclient.so.16
#3 0x00a4ac82 in my_xml_parse () from /usr/lib/mysql/libmysqlclient.so.16
#4 0x00a43cbf in my_parse_charset_xml () from /usr/lib/mysql/libmysqlclient.so.16
#5 0x00a39c6b in my_read_charset_file () from /usr/lib/mysql/libmysqlclient.so.16
#6 0x00a3a6ae in get_charset_by_csname () from /usr/lib/mysql/libmysqlclient.so.16
#7 0x00a4c99b in mysql_init_character_set () from /usr/lib/mysql/libmysqlclient.so.16
#8 0x00a4d9cd in mysql_real_connect () from /usr/lib/mysql/libmysqlclient.so.16

아래 링크 참조하면, 오류와 진행상황을 볼 수 있습니다.

http://bugs.mysql.com/bug.php?id=37653

빨리 해결되길 기원하며...

ljs0766의 이미지

멀티스레드 환경이라면 thread safe한 mysql 라이브러리를 쓰셔야 합니다.
혹시 하나의 스레드에서 작동하더라도 가급적이면 libmysqlclient_r을 사용하시는게 좋습니다.
제가 짠 서비스 프로세스도 저런 문제를 가지고 있다가 thread safe한 라이브러리를 사용한 이후
현재 4개월째 중단없이 잘 운영되고 있습니다.

ilanch의 이미지

윗 글에서 언급한 것처럼, 멀티 쓰레드 환경에서는 다른 라이브러리를 링크해야 하는군요.
관련 정보가 아래 링크에 나와 있습니다. 참고하시길...
http://dev.mysql.com/doc/refman/5.1/en/threaded-clients.html

그런데, 저는 문제가 하나 더 생겼는데요.
멀티스레드로 libmysqlclient_r을 링크하고 난 후부터 초기 접속이 안되는 문제가 발생하는데..
원래 코드에서 더 변경되어야 할 것이 있는건가요?
ERROR(2003)= Can't connect to MySQL server on 'localhost' (111)

libmysqlclient 라이브러리를 사용한 경우에는 한번에 접속됐는데,
libmysqlclient_r 라이브러리를 사용하면 첫 번째 접속 시도에서는 위 에러가 발생하고, 두 번째부터 접속이 되는 경우가 발생합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.