Извлечь одну таблицу из дампа .sql
В категорії Підказки от 12 Жовтня, 2016. Автор adminsed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql
sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql
Загрузить дамп:
# pv dumpfile.sql | mysql -uuser -ppass db_name
Снять дамп:
# mysqldump -uuser -ppass db_name | pv > dumpfile.sql
И на сервере должна быть установлена утилита pv
yum install pv
Еще полезность при работе с gzip:
pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=> ] 15% ETA 0:00:59
Добавим утилиту dd и слепим это все вместе:
упаковать
dd if=/dev/sda bs=1024 conv=noerror,sync | pv | gzip -c -9 > backup-sda.gz
распаковать
gunzip -c backup-sda.gz | pv | dd of=/dev/sda bs=1024
Тоже но с утилитой pigz:
упаковать
dd if=/dev/sda | pv -s (размер_диска_в_байтах) | pigz --fast > myBackup.img
распаковать
pigz -d myBackup.img | pv -s (размер_диска_в_байтах) | dd of=/dev/sda
Для того чтобы сохранить резервную копию базы данных MySql принято использовать так называемые дампы. Это текстовый файл содержащий структуру и содержимое базы данных в формате SQL запросов.
Итак, делаем дамп базы используя консольный клиент mysqldump, зайдя на сервер по ssh. Снимать будем дамп базы user_database с сервера mysql12.leaderhost.ru, логин для доступа к базе у нас user_admin и пароль 12345.
mysqldump -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql
Наш дамп будет сохранен в файл user_database.sql. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой:
mysqldump: Got error: 1045: Access denied for user ‘user_admin’@’91.195.124.30’ (using password: YES) when trying to connect
Если всё нормально, то никаких сообщений не выдастся. Посмотрим какого размера получился дамп:
[user@s12 ~]$ du -hs user_database.sql
872K user_database.sql
Восстанавливаем базу MySql из дампа
Выше описано как сделать дамп базы MySQL (резервную копию), далее опишем необходимые действия для восстановления базы из дампа.
Итак, таже база и теже логины/пароли, заходим на сервер по Ssh и выполняем в папке в которой лежит наш дамп. Например дамп user_database.sql лежит в папке сайта hostingfaq.ru.
cd hostingfaq.ru/
mysql -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database < user_database.sql
Ошибки возникающие при работе с дампами
Не редко, при восстановлении базы из дампа, можно столкнутся с такой ошибкой:
#1062 – Duplicate entry ‘N?-665’ for key 1
Зачастую, ошибка возникает из-за того что кодировка таблицы одна, а у данных другая. Что можно поделать? как правило в дампе базы сменить все указатели кодировки на одну. Например, данные в дампе в кодировке cp1251, а где-то встречается указатель на utf8:
ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В этом случае просто заменим utf8 на cp1251, сделать это можно вручную в текстовом редакторе с помощью “поиск и замена” или по Ssh
sed -i “s/utf8/cp1251/” user_database.sql
После чего снова попробовать восстановить базу из дампа. Нелишним будет принудительно задать кодировку ключом –default-character-set
mysql –default-character-set=cp1251 -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database < user_database.sql
Другая ошибка может возникать в процессе создания дампа:
mysqldump: Got error: 1044: Access denied for user ‘user_database’@’%’ to database ‘user_database’ when using LOCK TABLES
Обойти её и успешно выполнить дамп поможет ключ –skip-opt
mysqldump –skip-opt -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql