myisamchk

Wednesday, June 24th, 2009

Проверка и исправление ошибок в MyIsam базах.

mysql/db # myisamchk --silent --force --fast --update-state -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M ./*/*.MYI

На время проверки mysqld лучше остановить, или делать проверку через REPAIR из mysql монитора.

Выборка дат из mysql в нормальном виде

Saturday, April 18th, 2009
SELECT CONCAT( IF(10>DAY(date),"0",""),DAY(date),".",IF(10>MONTH(date),"0",""),MONTH(date)) as date
FROM table_name

где поле date — это дата в mysql-вском формате

mysql: сравнение с NULL

Friday, September 19th, 2008

Чтобы выбрать значения которые равны\не равны NULL ошибочно писать WHERE field = 'NULL' или WHERE field = NULL.

Правильные запросы:

SELECT field1, field2 FROM table WHERE field1 IS NULL;

SELECT field1, field2 FROM table WHERE field1 IS NOT NULL;

mysql полезности

Friday, September 5th, 2008
  • Показать выражение для создания таблицы
    SHOW CREATE TABLE название_таблицы;
  • Вывести описания таблиц
    SHOW TABLE STATUS

Оптимизация mysql

Wednesday, May 21st, 2008

Если из выборки необходимо извлечь лишь несколько строк, нужно использовать

LIMIT число_выборок

Это особенно касается запросов вида

SELECT id, item FROM table_name WHERE id = 'some_id' LIMIT 1

Использование конструкции LIMIT позволит сократить время запроса, так как маська успокоится сразу как только достанет указанное количество совпадений и не будет потрошить базу до самого конца.

После добавлении в таблицу большого количества новых записей полезно выполнить комманду

OPTIMIZE TABLE table_name

MySQL выполнит оптимизацию структуры таблицы, дефрагментирует её.

Если нужно пихать в базу большое количество данных за короткое время, чтобы база не захлебывалась можно делать отложенные запросы

INSERT DELAYED ...

Это работает только для таблиц ISAM и MyISAM

Резервное копирование таблиц mysql

Wednesday, May 21st, 2008

Бекап таблицы:

BACKUP TABLE имя_таблицы TO '/dir'

Помним про песочницу.
Восстановление:

RESTORE TABLE имя_таблицы FROM '/path/to/file'

Сохранение результата выборки mysql в файл

Wednesday, May 21st, 2008

MySQL поддерживает возможность сохранения запроса в файл.

SELECT ... INTO OUTFILE '/path/to/file'

Файл не должен существовать. Не стоит забывать про так называемую песочницу, если mysql запускается через chroot.
Чтобы загрузить данные обратно в базу:

LOAD DATA INFILE '/path/to/filename' INTO TABLE table_name

файл должен существовать :)

Бекап базы данных mysql

Monday, April 21st, 2008

Для бекапа (дампа) базы данных mysql удобно использовать утилиту mysqldump:

$ mysqldump имя_базы имя_таблицы > название_файла.sql -u имя_пользователя -p

Где имя_базы это название базы данных, имя_таблицы это название таблицы, название_файла.sql это файл в который делается бекап, имя_пользователя - имя пользователя, имеющего доступ как минимум на чтение к это базе и таблице.

Чтобы загрузить этот бекап обратно в базу данных из файла:

$ mysql -u имя_пользователя -p -D имя_базы < название_файла.sql

Когда утилита mysqldump делает бекап, она не ставит директиву какую базу данных использовать, поэтому при загрузке этого бекапа обратно в mysql следует либо указать эту директиву в файле

USE имя_базы

(Это следует поместить куда-нибудь в начало файла, до других комманд)

Либо использовать параметр -D имя_базы при использовании комманды mysql при загрузке дампа.

Сброс счетчика auto_increment в MySQL

Friday, April 18th, 2008

Имеется поле auto_increment:

CREATE TABLE table_name ( id INT NOT NULL AUTO_INCREMENT );

Даже при удалении всех записей из этой таблицы, при дальнейшем её заполнении счетчик auto_increment продолжит считать с того места, на котором остановится. Чтобы сбросить счетчик можно проделать следущее:

TRUNCATE TABLE table_name;

Эта команда удаляет всю таблицу, затем заново её воссоздает, и также сбрасывает счетчик auto_increment. Также эту команду лучше использовать для удаления таблицы, нежеле чем DELETE FROM table_name так как она работает быстрее.
Если удалять данные не нужно то можно поступить так:

ALTER TABLE table_name auto_increment=0;

где вместо нуля может быть и другое число с которого нужно продолжить счетчик.

Создание базы данных

Wednesday, April 9th, 2008

Зайти в mysql monitor под root:

$ mysql -u root -p
Enter password:

Далее в mysql monitor:
Создать новую базу данных

mysql> CREATE DATABASE имя_базы ;

Создать пользователя и дать ему права работать с этой базой

mysql> GRANT ALL ON имя_базы.* TO имя_пользователя@localhost IDENTIFIED BY 'пароль';

Обновить таблицы привилегий

mysql> FLUSH privileges;

Готово.