Начиная с версии 5.6.3 появилась возможность сделать трейс запросов:
SET optimizer_trace_offset=-10,
optimizer_trace_limit=10,
optimizer_trace='enabled=on';
SELECT ... -- тут запрос
SET optimizer_trace='enabled=off';
SELECT * FROM information_schema.optimizer_trace;Полный статус конкретного mysql-процесса можно посмотреть с помощью запроса:
SELECT * FROM information_schema.processlist WHERE db = 'database' AND id = 1357;
Для упорядочивания primary ключей в таблице можно использовать следующий запрос:
UPDATE table_name
SET
id=(SELECT @a:=@a+1)
WHERE
(SELECT @a:=-1)=-1
ORDER BY id ASCВ обычном случае для бэкапа оптимально использовать команду:
mysqldump -uroot -qRB db_name > db_name.sql
Для бэкапа с архивацией:
mysqldump -uroot -qRB db_name | bzip2 -9c > db_name.sql.bz mysqldump -uroot -qRB db_name | gzip -9c > db_name.sql.gz
Просмотреть архивы можно командами:
bzcat db_name.sql.bz | less zcat db_name.sql.gz | less
Возможен бэкап с удалённого сервера используя ssh (предполагается, что используется ssh-config):
ssh server 'mysqldump -uroot -qRB db_name' | bzip2 -9c > db_name.sql.bz # или сразу залить в локальную базу ssh server 'mysqldump -uroot -qCRB db_name' | mysql -uroot
Для дампа таблиц больших объёмов под текущей нагрузкой нужно использовать:
mysqldump -uroot --single-transaction --skip-lock-tables -qRB db_name
Полный дамп таблиц, включая сервисные, можно сделать командой:
mysqldump -uroot --events -qRA
Дамп только 10000 строк из определённой таблицы:
mysqldump -ntB db_name --tables tbl_name --where='1 order by id desc limit 10000'
Дамп базы без данных:
mysqldump -dB db_name
Случается, что данные в mysql таблице хранятся в кодировке отличной от кодировки таблицы. Такое могло произойти, например, при заливке данных без указания кодировки источника. Исправить подобную ситуацию можно следующим образом:
CREATE TABLE `tmp` (SELECT * FROM `broken_table`); -- возвращаем столбцы в их "родную" кодировку ALTER TABLE `tmp` MODIFY `wrong_data` CHAR(30), CHARACTER SET latin1; -- конвертируем данные в бинарные ALTER TABLE `tmp` MODIFY `wrong_data` BLOB; -- возвращаем правильную кодировку ALTER TABLE `tmp` MODIFY `wrong_data` CHAR(30), CHARACTER SET utf8;
Далее исправленные данные переносим из временной таблицы в таблицу-исходник.