Блог » MySQL
Чиним таблицу mysql с помощью myisamchk
Туторы, MySQL, Debian
Случилось однажды у меня что полетела таблица в бд, и простые способы починить, проверить, оптимизировать таблицу mysql не помогали. При попытке починить базу, появлялась следующая ошибка:
Я починил mysql таблицу на своём сервере с Debian следующим способом...
1. идем в папку:
2. и уже там выполняем команду для починки таблицы:
расширение .TMD нам не нужно указывать в названии таблицы.
Я не проверял, но думаю что и в CentOS должно быть примерно так же.
Туторы, MySQL, Debian
Случилось однажды у меня что полетела таблица в бд, и простые способы починить, проверить, оптимизировать таблицу mysql не помогали. При попытке починить базу, появлялась следующая ошибка:
error : Can't create new tempfile: './mysuperbd/mysupertable.TMD'
status : Operation failed
status : Operation failed
Я починил mysql таблицу на своём сервере с Debian следующим способом...
1. идем в папку:
cd /var/lib/mysql/<название_базы>
2. и уже там выполняем команду для починки таблицы:
myisamchk -r -v -f ./<название таблицы>
расширение .TMD нам не нужно указывать в названии таблицы.
Я не проверял, но думаю что и в CentOS должно быть примерно так же.
Включаем лог медленных запросов MySQL
Туторы, MySQL
Чтобы включить лог медленных запросов открываем mysql конфиг:
ищем настройку именяем её на следующие параметры:
log_slow_queries - путь до файла в который будут записываться медленные запросы.
long_query_time - время в секундах, запросы выполняющиеся дольше указанного времени попадут в лог.
перезапускаем mysql
Туторы, MySQL
Чтобы включить лог медленных запросов открываем mysql конфиг:
nano /etc/mysql/my.cnf
ищем настройку именяем её на следующие параметры:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_slow_queries - путь до файла в который будут записываться медленные запросы.
long_query_time - время в секундах, запросы выполняющиеся дольше указанного времени попадут в лог.
перезапускаем mysql
/etc/init.d/mysql restart
Выборка из MySQL по длине строки
MySQL
Простой запрос для выборки из mysql базы по размеру строки.
Выбираем все записи в которых длина данных в ячейке field менее 30 символов:
MySQL
Простой запрос для выборки из mysql базы по размеру строки.
Выбираем все записи в которых длина данных в ячейке field менее 30 символов:
SELECT * FROM `table` WHERE CHAR_LENGTH( field ) <30;
Изменить все значения столбца в mysql бд
MySQL
Все значения столбца перевести в нижний регистр
Заменить все значения на требуемый текст
MySQL
Все значения столбца перевести в нижний регистр
update table set field = lower(field);
Заменить все значения на требуемый текст
update table set field = 'какой-то текст';
Тюнинг тредов (mysql threads tunning)
Туторы, Копипаст, MySQL
Здесь упущено много технических деталей, прошу технарей не сильно докапываться, т.к. информация "для чайников".
Итак. Как известно, mysqld это "один процесс - много тредов". В достаточно приближенном понимании тред (thread) это когда процесс копирует сам себя, и родительский процесс передает треду какую то задачу для решения.
Создание треда отличается от обычного fork() в основном тем, что fork порождает +1 процесс, тогда как деление на треды использует другую, более производительную технологию ветвления без клонирования данных в памяти.
При каждом подключении клиента, mysql создает тред, который это подключение обрабатывает.
Если у вас средне нагруженый mysqld, то убедитесь что mysqld работает на нормальной реализации тредов. К примеру, FreeBSD ниже 6 ветки имеет ненормальную, глючную реализацию тредов pthread. Основные глюки проявляются при работе на SMP (более 1 процессора). pthread "не умеет" нормально раскидывать треды по разным процессорам и в результате мы имеем ситуацию, когда Mysqld висит только на одном процессоре вместе с кучей своих детишек. Все остальные процессоры курят, даже если мускуль съел все процессорное время своего процессора.
Более детальная информация как правильно заставить работать mysql под FreeBSD может быть найдена тут: http://dev.mysql.com/doc/refman/5.1/en/freebsd.html
Итак, посмотрим что у вас творится с тредами.
Туторы, Копипаст, MySQL
Здесь упущено много технических деталей, прошу технарей не сильно докапываться, т.к. информация "для чайников".
Итак. Как известно, mysqld это "один процесс - много тредов". В достаточно приближенном понимании тред (thread) это когда процесс копирует сам себя, и родительский процесс передает треду какую то задачу для решения.
Создание треда отличается от обычного fork() в основном тем, что fork порождает +1 процесс, тогда как деление на треды использует другую, более производительную технологию ветвления без клонирования данных в памяти.
При каждом подключении клиента, mysql создает тред, который это подключение обрабатывает.
Если у вас средне нагруженый mysqld, то убедитесь что mysqld работает на нормальной реализации тредов. К примеру, FreeBSD ниже 6 ветки имеет ненормальную, глючную реализацию тредов pthread. Основные глюки проявляются при работе на SMP (более 1 процессора). pthread "не умеет" нормально раскидывать треды по разным процессорам и в результате мы имеем ситуацию, когда Mysqld висит только на одном процессоре вместе с кучей своих детишек. Все остальные процессоры курят, даже если мускуль съел все процессорное время своего процессора.
Более детальная информация как правильно заставить работать mysql под FreeBSD может быть найдена тут: http://dev.mysql.com/doc/refman/5.1/en/freebsd.html
Итак, посмотрим что у вас творится с тредами.
Описание параметров конфига MySQL
Туторы, Копипаст, MySQL
Вот, приблизительный конфиг для для 2Гб VPS/VDS (2-х ядерного)
Надо сказать, что вариант экспериментальный, но вполне рабочий, допускает корректировки, где-то можно подрезать буфер или наоборот накинуть немного. Замечу, что на каждом сервере должен быть свой конфиг для конкретных задач (сайтов).
Туторы, Копипаст, MySQL
Вот, приблизительный конфиг для для 2Гб VPS/VDS (2-х ядерного)
Надо сказать, что вариант экспериментальный, но вполне рабочий, допускает корректировки, где-то можно подрезать буфер или наоборот накинуть немного. Замечу, что на каждом сервере должен быть свой конфиг для конкретных задач (сайтов).
Починить/Проверить/Оптимизировать mysql таблицы из консоли
MySQL
Восстановление одной из таблиц
Все таблицы в базе
Починить все таблицы, во всех базах данных
Проверка всех баз данных
Оптимизация всех баз данных
Иногда при сбое появляется следующее уведомление:
тогда базы нужно проверить вот таким способом
MySQL
Восстановление одной из таблиц
mysqlcheck -uroot -p -r db_name table_name
Все таблицы в базе
mysqlcheck -uroot -p -r db_name
Починить все таблицы, во всех базах данных
mysqlcheck -uroot -p -A --auto-repair или mysqlcheck -uroot -p -A -r
Проверка всех баз данных
mysqlcheck -uroot -p -c -A
Оптимизация всех баз данных
mysqlcheck -uroot -p -o -A
Иногда при сбое появляется следующее уведомление:
Checking for tables which need an upgrade, are corrupt or were not closed cleanly..
тогда базы нужно проверить вот таким способом
mysql_upgrade --force -u root -p
Изменить кодировку mysql таблицы
MySQL
MySQL
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;