SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.01.2010 10:18:56

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Где лежат файлы таблиц InnoDB

Сервер на Debian.
Понадобилось быстро копировать таблицы объемом 5-12Гб.
Для таблицы в MyISAM просто копирую файлы frm, MYI и MYD. А у таблиц в InnoDB вижу только frm.
А где сами данные?

Неактивен

 

#2 19.01.2010 10:22:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Где лежат файлы таблиц InnoDB

В файлах ibdata* и ib_logfile*, если не выбрана опция file per table. Не забудьте перенести относящуюся к Innodb конфигурацию из my.cnf

Неактивен

 

#3 19.01.2010 10:42:47

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

rgbeast написал:

В файлах ibdata* и ib_logfile*, если не выбрана опция file per table. Не забудьте перенести относящуюся к Innodb конфигурацию из my.cnf

Оппа.... В одном файле все таблицы....
А как тогда сделать следующее, есть таблицы logs и pages, нужно что б в той же базе появились logs_tmp и pages_tmp?
Как в таком случае их копировать, если все данные в одном файле?

Неактивен

 

#4 19.01.2010 10:49:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Где лежат файлы таблиц InnoDB

В исходной постановке вопроса этого сделать нельзя. Я советую перейти на file per table. Для этого нужно:
1. В my.cnf добавить строчку
innodb_file_per_table
(см. http://dev.mysql.com/doc/refman/5.0/en/ … paces.html )

2. Перезапустить сервер mysql

3. Пересоздать таблицы (все старые таблицы останутся в общем хранилище, все новые будут помещены в отдельные файлы)

ALTER TABLE `my_table` ENGINE=Innodb;

Неактивен

 

#5 19.01.2010 12:26:46

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

rgbeast написал:

В исходной постановке вопроса этого сделать нельзя. Я советую перейти на file per table. Для этого нужно:
1. В my.cnf добавить строчку
innodb_file_per_table
(см. http://dev.mysql.com/doc/refman/5.0/en/ … paces.html )

2. Перезапустить сервер mysql

3. Пересоздать таблицы (все старые таблицы останутся в общем хранилище, все новые будут помещены в отдельные файлы)

ALTER TABLE `my_table` ENGINE=Innodb;

Премного благодарен! Помогло.

Неактивен

 

#6 20.01.2010 11:40:54

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

Нет. Не совсем помогло. ФАйлы то скопировались, но новые таблицы в базе не появились. Только в MyISAM.
Те которые в InnoDB, как то подключить еще надо?

Притом, скажем, запрос
RENAME TABLE index_5.links TO index_5.links_tmp;
не выполняется, пишет что links_tmp уже существует (#1050 - Table 'links_tmp' already exists), но phpMyAdmin её не видит и запрос SELECT COUNT(*) FROM links_tmp; выдаёт (#1146 - Table 'index_5.links_tmp' doesn't exist).

Неактивен

 

#7 20.01.2010 14:00:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Где лежат файлы таблиц InnoDB

Не надо руками ничего делать в каталоге с БД, тогда не будет проблем smile

Конкретно по проблеме — скорее всего, Вы скопировали .frm в links_tmp.frm,
но реально данных нету. Поэтому при rename происходит ошибка «табличка
уже есть» (т.е. какая-то часть таблички есть, и поэтому перезаписывать не
буду). А когда пытаетесь выбрать из нее данные — получаете ошибку «таблички
нет» (т.е. полного набора данных по таблице нету).

Соответственно, нужно удалить то, что сделано руками, и после этого сделать
уже с помощью СУБД.

Неактивен

 

#8 20.01.2010 14:21:55

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

paulus написал:

Не надо руками ничего делать в каталоге с БД, тогда не будет проблем smile

Конкретно по проблеме — скорее всего, Вы скопировали .frm в links_tmp.frm,
но реально данных нету. Поэтому при rename происходит ошибка «табличка
уже есть» (т.е. какая-то часть таблички есть, и поэтому перезаписывать не
буду). А когда пытаетесь выбрать из нее данные — получаете ошибку «таблички
нет» (т.е. полного набора данных по таблице нету).

Соответственно, нужно удалить то, что сделано руками, и после этого сделать
уже с помощью СУБД.

С помощью СУБД очень долго копируется 25Гб данных. Не знаю, как по другому ускорить, кроме как копировать по-файлово.
А реальные данные в файле .ibd тоже были скопированы в links_tmp.ibd.

Неактивен

 

#9 20.01.2010 15:01:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Где лежат файлы таблиц InnoDB

Угу. Но с помощью СУБД будучи скопированные, они работают, а вручную — нет.
ibd не спасет сам по себе. Каждый ibd-файлик — это кусочек tablespace. Не
самостоятельный файлик с данными, а именно кусочек целого. В общем ibdata
прописаны пути ко всем кусочкам (а к скопированным вручную таких путей не
прописано), каждый кусочек имеет свои внутренние чиселки. В общем, никаких
других путей к отступлению нету — только через СУБД.

Неактивен

 

#10 20.01.2010 15:17:20

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

paulus написал:

Угу. Но с помощью СУБД будучи скопированные, они работают, а вручную — нет.
ibd не спасет сам по себе. Каждый ibd-файлик — это кусочек tablespace. Не
самостоятельный файлик с данными, а именно кусочек целого. В общем ibdata
прописаны пути ко всем кусочкам (а к скопированным вручную таких путей не
прописано), каждый кусочек имеет свои внутренние чиселки. В общем, никаких
других путей к отступлению нету — только через СУБД.

И нет команд, что б эти пути прописать?

Неактивен

 

#11 20.01.2010 15:50:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Где лежат файлы таблиц InnoDB

Можете поиграть с IMPORT TABLESPACE, но они предназначены для других целей,
я боюсь, что не заработает.

Неактивен

 

#12 20.01.2010 15:54:44

Alexhouse
Участник
Зарегистрирован: 19.01.2010
Сообщений: 9

Re: Где лежат файлы таблиц InnoDB

paulus написал:

Можете поиграть с IMPORT TABLESPACE, но они предназначены для других целей,
я боюсь, что не заработает.

Да, не работает. Уже попробовал. sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson