На моем веб-сайте есть несколько приложений 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 'root@localhost.localdomain' 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 был запущен на порту 3306 08/12/2011 и работал на> 3.5. дней. Затем 15 августа был запущен другой mysqd на порту 0.
Я подозреваю, что оба процесса MySQL обращаются к одним и тем же таблицам базы данных и вызвали сбой. Я никогда не настраивал несколько процессов mysql на своем веб-сервере, и я не знаю, почему другой mysqld был запущен на порту 0.
Вот часть файла 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, похоже, вообще не работает. Мне пришлось исправить поврежденные таблицы с помощью функции Repair DB в PhpMyadmin после того, как весь мой сайт вышел из строя. Было бы очень полезно, если бы я мог заставить myisam-recovery работать
Еще одна проблема, которую я заметил, - это очень много времени, чтобы остановить службу mysqld. и в ответе всегда написано «Ошибка», но я все еще могу запустить службу mysqld.
Версия MySQl - 5.0.77
Похоже, у меня еще есть пара дней, прежде чем эта проблема повторится снова. Кто-нибудь может мне помочь?
socket: '/var/lib/mysql/mysql.sock' port: 0 Source distribution
Кажется, что когда вы используете --skip-networking
вы увидите это сообщение, потому что вы должны подключиться через именные каналы или сокет Unix.
Вы сказали, что у вас несколько процессов, пожалуйста, покажите нам результат ps -ef | grep mysql
и my.cnf
оставшихся процессов.
Слишком много «учетных записей» пытается войти в систему каждый раз, когда осуществляется доступ к базе данных? У них нет постоянных сессий?