sysmerge IT

16 апр. 2017 г.

Mysql error : Can't create new tempfile: './database/table.TMD'

Порой возникает необходимость починки таблиц в базах данных, когда невнимательные владельцы сайтов забывают следить за местом или считают необходимым, что в случае чего можно просто постоянно ребутать сервер, в конце-концов REPAIR все поправит. Но очередной mysqlcheck -A --auto-repair внезапно выдал следующее:

 Repairing tables  
 database.table  
 error  : Can't create new tempfile: './database/table.TMD'  
 status  : Operation failed  

Что же приключилось с таблицей? Как исправить?
TMD - это временный файл, из которого необходимо восстановить файл данных.
Тут нам на помощь придет утилита myisamchk, которая, как нас заверяют в манах, может исправить почти любые проблемы, кроме, разве что, уникальных ключей, которые на самом деле не уникальны. Последовательность действий проста - идем в папку с данными поломанной базы:

 # cd /var/lib/mysql/database/  

и выполняем следующую команду:

 # myisamchk -r -f table.MYI  
 - recovering (with sort) MyISAM-table 'table.MYI'  
 Data records: 3187017  
 - Fixing index 1  
 - Fixing index 2  

Ключ -r - соответственно восстановление(есть еще "нежное" восстановление с помощью -o), ключ -f - --force перезаписывать старые TMD файлы. Если данных много, то может потребоваться подождать довольно длительное время, но, как результат, получим восстановленные данные.
2 апр. 2017 г.

Centos: удалить без зависимостей пакет

Порой у каждого админа бывает моменты, когда необходимо удалить пакет без зависимостей в системе. В частности, в Centos. Решаешь удалить безобидный mysql, а пакетный менеджер хочет снести половину системы, хотя тебе они еще пригодятся, ведь Mysql ты вернешь из другого репозитория, к примеру.
Тут нам поможет мощный механизм RPM.
Понадобится 2 команды:

 # rpm -qa | grep "mysql"  
 # rpm -e --nodeps "mysql-5.5.54-1199.el5.art.x86_64"  

В первой мы ищем полное название пакета, который необходимо удалить без зависимости. Вторая - непосредственно удаление пакета с ключем --nodeps, который как раз и отвечает за то, что будет удален непосредственно указанный пакет, а его зависимости будут не тронуты.