mysql
Понадобилось недавно посмотреть размеры баз данных mysql.
Нашёл интересный запрос, который выводит результат в удобочитаемом виде.

SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "Database size in MB" FROM information_schema. TABLES GROUP BY table_schema;

Допустим у нас есть mysql база данных site_db, а в ней таблица tablename.
Нам нужно конвертировать таблицу tablename из myisam в innodb.

По идее всё просто.

mysql -u root -p
USE site_db;
ALTER TABLE tablename ENGINE=InnoDB;
В качестве памятки для себя...

1. Если видим ошибку "The table 'galleries' is full", увеличиваем значение heap_table_max_size

Прогресс импорта, или экспорта mysql баз данных можно наблюдать с помощью консольного "Pipe Viewer", или pv.

Импорт

pv /path/to/sqlfile.sql | mysql -uUSERNAME -pPASSWORD -D DATABASE_NAME


Экспорт
Для начала нам нужно узнать полный размер экспортируемых баз данных. Это можно посмотреть в таблице information_shema:

SELECT
 Data_BB / POWER(1024,1) Data_KB,
 Data_BB / POWER(1024,2) Data_MB,
 Data_BB / POWER(1024,3) Data_GB
FROM (
 SELECT SUM(data_length) Data_BB
 FROM information_schema.tables
 WHERE table_schema IN ('DATABASE_NAME')
) A;

Остановилась MySQL репликация на слейве (version 5.1.61). Slave_IO_Running было отмечено как Yes, но Slave_SQL_Running как No. Обычный перезапуск слейва не помог, значит требуется более детальный анализ проблемы. Похоже на то что повреждены relay логи слейва, т.к. тестирование с помощью "mysqlbinlog" показало ошибку. Следовательно, решением должно быть удаление текущих бинлогов слейва и указание слейву позиции с которой нужно продолжить репликацию из бинлогов мастера.

Вот полный вывод команды "show slave status\G" на остановившемся слейв сервере:

Как-то пришлось мне восстанавливать всего то несколько баз из полного бэкапа mysql, который содержал в себе все базы.
Довольно долго сканировал интернет и кое что нашлось.
Ниже будет приведён код скрипта, который мне в этом очень помог.
Но, отработал он у меня корректно только на linux, на freebsd что-то у него не получалось.

Cкрипт предназначен для разрезания MySQL-дампа с несколькими базами на отдельные базы. Файлы именуются по принципу:
название_базы.номер_в_общем_дампе.sql

Пришлось на днях настроить ротацию логов mongodb.
С logrotate не сложилось, там костыль на костыле и костылём погоняет.

В общем используем встроенную функцию mongodb для ротации логов и немного ей помогаем.

Создаём скриптик, а потом этот скриптик добавляем в крон.
# vim /root/scripts/mongorotate.sh

В качестве заметки...

При изменении innodb_log_file_size придется остановить сервер и удалить (или переименовать) старый лог файл, для чего могут потребоваться рутовые права. Если же старый файл не удалять, mysql просто откажется стартовать.
Моя выжимка из конфига (не самая сильная dev-машина, 3G RAM, Dual CPU E2140 @ 1.60GHz)

[innodb]
innodb_buffer_pool_size = 1024M
innodb_flush_method = O_DIRECT
innodb_log_file_size = 256M
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
 
[mysqld]
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
 
default-storage-engine = InnoDB
 
collation_server=utf8_general_ci
character_set_server=utf8