RU EN

MySQL OPTIMIZER TRACE

 

Начиная  с версии 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;
Комментариев: 0
28.06.2019 11:25


Статус конкретного процесса в MySQL

 

Полный статус конкретного mysql-процесса можно посмотреть с помощью запроса:

SELECT * 
FROM information_schema.processlist 
WHERE 
  db = 'database'
  AND id = 1357;
Комментариев: 0
01.03.2019 11:34


Упорядочивание PRIMARY KEY

 

Для упорядочивания primary ключей в таблице можно использовать следующий запрос:

UPDATE table_name
SET
    id=(SELECT @a:=@a+1)
WHERE
    (SELECT @a:=-1)=-1
ORDER BY id ASC
Комментариев: 0
28.11.2015 13:05


Бэкап баз данных

 

В обычном случае для бэкапа оптимально использовать команду:

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
Комментариев: 0
16.08.2015 08:09


Некорректная кодировка данных в таблице

 

Случается, что данные в 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;

Далее исправленные данные переносим из временной таблицы в таблицу-исходник.

Комментариев: 0
12.06.2013 10:53