[mysql] Перенос БД копированием

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Ответить
[mysql] Перенос БД копированием
На разделе где расположена mysql - закончилось место, как можно перенести часть баз.
Какие вообще есть варианты ?
Решение
1. Если раздела LVM то просто расширить место добавлением диска.
2. Почитить внутри mysql самую большую таблицу (можно глянуть через phpmyadmin или что то подобное) - обычно сатстистика или что такое разростается.
3. СОЗДАНИЕ СИМВОЛИЧЕСКИХ ССЫЛОК - и перенести туда одну из БД
Немного про 3й вариант:
1. Если таблицы MyISAM тут никаких проблем:
таблицы MyISAM хранит в виде трёх файлов: tbl_name.frm - описание структуры таблицы, tbl_name.myd (myData) - данные, хранящиеся в таблице, tbl_name.myi (myIndex) - индексы. Если MySQL сервер остановить, то путём простого копирования этих файлов можно перенести таблицу на другой сервер. Это иногда намного удобнее и быстрее, чем сдампить таблицу на одном сервере и залить дамп на другом

2. Если InnoDB то:
Из коробки InnoDB хранит все таблицы в общем пуле ibdata и описанный в вопросе трюк невозможен. Однако, если MySQL сервер настроен на использование file-per-table tablespaces, для каждой таблицы будет создаваться отдельная пара файлов (вида tbl_name.frm - структура и tbl_name.ibd - даныне и индексы). Помимо описанного трюка, это даёт другие преимущества, вроде быстрого выполнения запросов TRUNCATE TABLE и возможности получить обратно дисковое пространство, занятое таблицей, при её удалении (в случае использования ibdata* дисковое пространство при удалении таблиц не освобождается). Настройка выглядит так (в my.cnf):

[mysqld]
innodb_file_per_table=1
При остановленном MySQL сервере файлы .frm и .ibd можно копировать и переносить, как и в случае MyISAM, а если нужно скопировать таким образом таблицу, не останавливая сервер, нужно прибегнуть к хитрости - сбросить на диск кеш и "выгрузить" таблицу (таблицы), которые хотим скопировать:

FLUSH TABLES table_one, table_two FOR EXPORT;
Теперь файлы .frm и .ibd можно копировать на лету - разумеется, с момента FLUSH до окончания копирования работать с данной таблицей нельзя (но можно с остальными).

"Подключение" перенесённой на другой сервер таблицы InnoDB выглядит так:

Создаём на новом месте в базе с таким же именем (это важно), как у базы, в которой находилась переносящаяся таблица, таблицу с такой же структурой, как переносящаяся (пустую)
Выполняем

ALTER TABLE tbl_name DISCARD TABLESPACE;
Подкладываем скопированные файлы tbl_name.frm и tbl_name.ibd

Выполняем

ALTER TABLE tbl_name IMPORT TABLESPACE;
Вуаля, таблица перенесена!

Перед тем, как впервые воспользоваться этой инструкцией для операций с живыми данными,
Страницы: 1
Ответить
Форма ответов
 
Текст сообщения*
:) ;) :D 8) :( :| :cry: :evil: :o :oops: :{} :?: :!: :idea:
Защита от автоматических сообщений. Введите символы, изображенные на этой картинке в поле ввода &quote;Код подтверждения&quote;.