22 мар. 2009 г.

Несколько заметок по MySQL

Подсказки взяты из блога IT блог - полезные заметки.

Резервное копирование (backup) всех баз mysql

Прошелся по нескольким блогам. почитал и удивился тому что для того чтобы сделать дампы всех баз mysql люди используют mysqldump –all-databases. На мой взгляд вариант более чем неудобный.

Предложу более правильный вариант, снимаются дампы со всех баз данных каждая база в отдельный файл. Для пояснения:
/backup/mysql/ - папка куда будем складывать дампы.
megapass - пароль root к mysql

итак собственно сам скрипт:
for i in `mysql -pmegapass -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -pmegapass $i > `date +%Y-%m-%d`-$i; gzip `date +%Y-%m-%d`-$i;done


теперь поясню что делается, в цикле вывода имен всех баз данных кроме information_schema и Database выполняется mysqldump в файл дата-имя_базы, затем дамп жмется gzip-ом.

На выходе получаем пачку файлов на подобии:
2009-02-11-shakirov_kayako.gz
2009-02-11-shakirov_mantis.gz
2009-02-11-shakirov_openfire.gz

Например если в системе несколько пользователей и базы данных у них сделаны правильно (имя базы с префиксом имени пользователя, например shakirov_base), то можно делать бакапы баз разных пользователей в разные папки. С полученными бакапами можно поступать как удобно, хранить на отдельном диске, разделе. внешнем ftp сервере или заливать куда-то по scp.


Table is marked as crashed and should be repaired

Запись создана марта 16, 2009

Просматривая /var/log/mysql/error.log обнаруживаем ошибки вида:
090316 20:55:03 [ERROR] /usr/sbin/mysqld: Table ‘./user_base/table’ is marked as crashed and should be repaired

если crashed всего несколько таблиц, то можно выполнить repair table из консольного mysql клиента или phpmyadmin при помощи sql запроса:
> USE user_base
> REPAIR TABLE TABLE;

Если в базе crashed много таблиц, то будет проще выполнить команду:
mysqlcheck -uUSER -pPASSWORD --repair --extended user_base

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

mysqlcheck -uUSER -pPASSWORD --repair --extended -A



Бакапим и ресторим базу MySQL

Запись создана марта 12, 2008 

Делаем дамп:
# mysqldump --add-drop-table --host=localhost --user=root --password=111 basename > basename.sql

Ресторим базу из дампа:
# mysql --host=localhost --user=root --password=111 --default-character-set=cp1251 basename <>

Комментариев нет:

Отправить комментарий