четверг, 20 сентября 2012 г.

MySQL error "Can't create new tempfile" при восстановлении таблицы.


В логах mysql много ошибок подобного рода.
120920  9:25:28 [ERROR] /usr/sbin/mysqld: Table './old_sm/phones' is marked as crashed and last (automatic?) repair failed
Поскольку автоматическое исправление не сработало, то будем исправлять вручную.
Перед любым таким действием настоятельно рекомендуется сделать резервное копирование данных.
Заходим в командную строку mysql.
Запускаем проверку таблицы.

mysql> check table phones;
+-----------------------+-------+----------+--------------------------------------------+
|           Table                 | Op      | Msg_type | Msg_text                                          |
+-----------------------+-------+----------+--------------------------------------------+
|             old_sm.phones | check | warning     | Table is marked as crashed and last repair failed |
|             old_sm.phones | check | error         | Found 6833 keys of 3930951                        |
|             old_sm.phones | check | error         | Corrupt                                           |
+-----------------------+-------+----------+--------------------------------------------+
3 rows in set (0.37 sec)

Запускаю восстановление таблицы.

mysql> repair table phones;
+-----------------------+--------+----------+-------------------------------------------+
|           Table                 | Op        | Msg_type | Msg_text                                                 |
+-----------------------+--------+----------+-------------------------------------------+
|             old_sm.phones | repair    | error        | Can't create new tempfile: './old_sm/phones.TMD' |
|             old_sm.phones | repair    | status       | Operation failed                                         |
+-----------------------+--------+----------+-------------------------------------------+
2 rows in set (0.01 sec)

Т.е. при запущенном mysql-сервере восстановлению не подлежит. Останавливаю mysql
service mysql stop
Запускаю восстановление с помощью myisamchk. Данный метод будем работать с таблицами на движке MyISAM. Если у вас таблицы на движке InnoDB может помочь пересоздание таблицы с заливкой старых данных.
root@112-1:/var/lib/mysql/old_sm# myisamchk -r -f phones.MYI 
- recovering (with sort) MyISAM-table 'phones.MYI'
Data records: 3930951
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5

Запускаю mysql сервер
service mysql start
Ошибка пропала, что и требовалось.

суббота, 15 сентября 2012 г.

Как создать установочную флешку с Windows7 в Linux

Небольшая предыстория: на ноутбуке знакомой (Hp Compaq 6720s) стала "глючить" Windows Vista - работа в  обычном режиме стала невозможна, постоянные подвисания процессора превращали работу в тихий ад. Более менее сносно можно было работать в безопасном режиме, но отсутствовал звук и возможность переключать раскладки клавиатуры. Разбираться в глюках Windows очень не хотелось, предложил знакомой переустановить систему на новую когда-то купленную Windows 7. Согласие было получено моментально. Далее появилась первая засада - ноутбук отказывался грузиться с DVD, просто отказывался. Рядом стоящий системник с Linux грузился отлично с данного DVD. Решил пойти коротким путем и сделать установочную флешку с Windows 7 и с нее уже установить операционную систему на ноутбуке. Далее короткая заметка на память о проделанном.
Во-первых, нужна флешка не менее 4-х гигабайт, диск с Windows 7, компьютер с Linux (в моем случае Fedora 17).
1. Установить пакет ntfsprogs, содержащий библиотеки и утилиты для работы с файловой системой NTFS.
sudo yum -y install ntfsprogs
2. Подключить флешку, с помощью fdisk создать на ней один раздел
3. Изменить тип раздела на NTFS (тип 7)
4. Пометить раздел как загрузочный (установить соответствующий флаг)
5. Сохранить изменения (w) и выйти
6. Создать на флешке файловую систему
sudo mkfs.ntfs -f -L WIN7 /dev/sdb1
где -f означает быстрое форматирование
-L задает метку файловой системы
7. Монтируем флешку
sudo mount /dev/sdb1 /mnt
8. Монтируем DVD с Windows 7
sudo mount /dev/cdrom /media
9. Копируем файлы из DVD на флешку
sudo cp -r /media/* /mnt/
10. Отмонтировать флешку и DVD после завершения.
sudo umount /dev/sdb1; sudo umount /dev/cdrom

Вот и все. Флешка готова, загрузился с нее и поставил Windows 7.