Sqlite: не работает режим журнала WAL

Немного теории про режим журнала WAL

По умолчанию, режим журнала БД всегда «возвращается» в DELETE. Допустим, мы открыли соединение к БД и установили режим PERSIST. Изменили данные, закрыли соединение.

На диске остался файл журнала (начало которого забито нулями).

Открываем соединение к БД снова. Если не задать режим журнала в этом соединении, он опять будет работать в DELETE. Как только мы обновим данные, механизм фиксации транзакций сотрет файл журнала.

Режим журнала WAL работает иначе — он «постоянный». Как только мы перевели базу в режим WAL, она останется в этом режиме, пока ей явно не поменяют режим журнала на другой.

Итак, зачем он нужен? Читать полностью »

Очистить таблицу Sqlite. Truncate для SqLite

Продолжаем изучать отличия Sqlite от привычного всем вебмастерам MySql

В Sqlite нет оператора TRUNCATE, чтоб очистить таблицу в SqLite необходимо удалить все записи, обновить индексы и удалить пустые значения..

Для этого нужно выполнить запросы:

DELETE FROM `table_name`;
REINDEX `table_name`;
VACUUM;

Функция sqlite_num_rows() для SqLite3. Считаем количество возвращаемых строк

В SqLite второй версии была замечательная функция sqlite_num_rows() (SQLiteResult::numRows()), аналог mysql_num_rows() для MySql.

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_num_rows -- SQLiteResult::numRows — Возвращает количество записей в результате запроса

В SqLite3 данную возможность убрали, оставив довольно небольшой набор функций.

Поэтому мы напишем свою простую функцию, подсчитывающую количество возвращенных записей запроса. Читать полностью »

Backup базы данных в Dropbox

Устанавливаем DropBox на свой сервер и сохраняем приведенный ниже скрипт, например, в /root/dumper.sh. Даем права на исполнение chmod +x /root/dumper.sh. И ставим выполнятся в cron раз в сутки.
Не забудьте изменить пароли для mysql в скрипте. Читать полностью »

Работаем с MySQL в командной строке

Даже если Вы используете GUI-инструменты для работы с MySQL, однажды Вам предстоит столкнуться с командной строкой. Поэтому полезно знать некоторые трюки, которые облегчают работу.

Примечание: эти команды работают только для Unix/Linux.

Постраничный вывод

Большинство GUI-утилит выводят результат постранично, что очень удобно. Но в командной строке mysql Вам высыпет весь результат полностью. Это легко решаемо при помощи команды pager:

mysql> pager more
PAGER set to 'more'
mysql> select title from sakila.film;
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
| AFFAIR PREJUDICE            |
| AFRICAN EGG                 |
| AGENT TRUMAN                |
| AIRPLANE SIERRA             |
| AIRPORT POLLOCK             |
| ALABAMA DEVIL               |
| ALADDIN CALENDAR            |
| ALAMO VIDEOTAPE             |
| ALASKA PHANTOM              |
| ALI FOREVER                 |
| ALICE FANTASIA              |
| ALIEN CENTER                |
| ALLEY EVOLUTION             |
| ALONE TRIP                  |
| ALTER VICTORY               |
| AMADEUS HOLY                |
--Plus--

Читать полностью »

Как перенести WordPress блог на новый домен

Сделать это очень просто.
Нужно поменять все старые url (ссылки) на новые. Для этого нужно зайти в phpMyAdmin на вкладку «SQL» и в поле ввода ввести запросы:

UPDATE wp_options SET option_value = replace(option_value, 'http://исходныйдомен.ru', 'http://новыйдомен.ru') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://исходныйдомен.ru', 'http://новыйдомен.ru');

UPDATE wp_posts SET post_content = replace(post_content, 'http://исходныйдомен.ru', 'http://новыйдомен.ru');

Готово!

Структура базы данных UCOZ

Описание полей от материалов разных модулей

Структура таблицы users

user
unetID
password
avatar
flags
fullname
gender
email
homepage
icq
country
state
city
signature
title
regdate
ip
o ld-field
aol
msn
yahoo
ispm
birthday
verify
options
lastmodified

Остальные таблицы Читать полностью »

MySQL и ORDER BY. Уменьшаем время выполнения запроса

Итак, что мы имеем.

  • 3 связанные таблицы, в них хранится порядка 2млн записей.
  • Запрос, где эти таблицы через LEFT JOIN собираются воедино.
  • Условие, что все должно быть отсортировано по имени.
  • Все должно работать быстро.

В общем то, вполне тривиальное задание, если бы не последнее условие

Рассмотрим на более простом примере. Таблица `catalog_software` с 25 тысячами записей. Без всяких связаных таблиц

SELECT * FROM `catalog_software` LIMIT 1000;

Запускаем запрос через phpMyAdmin - видим, что выполнение запроса заняло 0.09 секунд.
Задумываемся - что-то забыли... Ах да, сортировка. Быстренько все исправляем. Читать полностью »

PHPConf 2008 29-30мая, Москва. Видео с конференции

Что нового в PHP-5.3 - Дмитрий Стогов Zend Technologies


- namespace-ы
- ООП расширения
- late static binding (static:
- __callstatic()
- динамический доступ к статическим данным ($classname::method(), $classname::$prop )
- nowdoc (< <<'EOF ')
- ?: operator
- сборщик мусора
- разные php.ini директивы для разных каталогов (аналог .htacces для FastCGI)
- интересные новые возможности расширений (ext/openssl, ext/phar, ext/intl) Читать полностью »