多个 mysql 进程导致数据库表崩溃

多个 mysql 进程导致数据库表崩溃

我的网站有多个 PHP+MySQL 应用程序。我注意到安装 Limesurvey 后我的网站变得非常不稳定。myisam 表每 3-4 天就会崩溃一次。

我把 mysql 日志复制到这里:

110812 04:10:47  mysqld started
110812  4:10:47 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
110815 23:11:02  mysqld started
110815 23:11:02 [Warning] 'user' entry '[email protected]' ignored in --skip-name-resolve mode.
110815 23:11:02 [Warning] 'user' entry '@localhost.localdomain' ignored in --skip-name-resolve mode.
110815 23:11:02 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/var/lib/mysql/mysql.sock'  port: 0  Source distribution
110815 23:14:10 [ERROR] /usr/libexec/mysqld: Table './DBXXX/TableXXX' is marked as crashed and should be repaired

如您所见,mysqld 于 2011 年 8 月 12 日在端口 3306 上启动,并且已运行了 3.5 天以上。然后另一个 mysqd 于 2011 年 8 月 15 日在端口 0 上启动。

我怀疑两个 MySQL 进程都访问了相同的数据库表并导致了崩溃。我从未在我的 Web 服务器上设置多个 mysql 进程,也不知道为什么在端口 0 上启动了另一个 mysqld。

以下是 my.cnf 文件中可能相关的部分:

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
skip-locking
skip-name-resolve
local-infile = 0
skip-networking
myisam-recover=backup,force
key_buffer_size = 375M

max_connections = 1200

thread_cache_size=60

interactive_timeout=1200

wait_timeout=1200

max_connect_errors=50

max_allowed_packet = 64M

myisam_sort_buffer_size = 64M

query_cache_limit=1M

query_cache_size=64M

query_cache_type=1

read_buffer_size = 256k

read_rnd_buffer_size = 512k

sort_buffer_size = 512k

join_buffer_size=512K

tmp_table_size = 64M # default is 32M = 33554432      

max_heap_table_size = 64M #recommend same size as tmp_table_size

bulk_insert_buffer_size = 64M     #recommend same size as tmp_table_size

table_cache=512

thread_concurrency=4 

skip-innodb

[myisamchk]

key_buffer=64M

sort_buffer=64M

read_buffer=16M

write_buffer=16M

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysqldump]

quick

quote-names

max_allowed_packet=128M

myisam 设置似乎根本不起作用。在我的整个网站瘫痪后,我不得不使用 PhpMyadmin 中的 Repair DB 功能修复崩溃的表。如果我能让 myisam-recover 正常工作,那将非常有帮助

我注意到的另一个问题是停止 mysqld 服务需要很长时间。并且响应总是显示“失败”,但我仍然可以启动 mysqld 服务。

MySQl版本是5.0.77

看来这个问题还要过几天才会再次发生。有人能帮我吗?

答案1

socket: '/var/lib/mysql/mysql.sock'  port: 0  Source distribution

看来当您使用--skip-networking选项时您会看到此消息,因为您必须通过名称管道或 Unix 套接字进行连接。

您说您有多个进程,请向我们展示剩余进程的ps -ef | grep mysql输出my.cnf

答案2

每次访问数据库时是否有太多“账户”尝试登录?它们是否不具有持久会话?

相关内容