MySQL dump and restore — различия между версиями
Admin (обсуждение | вклад) м (Защищена страница «MySQL dump and restore» [edit=sysop:move=sysop] [каскадная]) |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
Снимать будем дамп базы user_database с сервера mysql12.leaderhost.ru, логин для доступа к базе у нас user_admin и пароль 12345. | Снимать будем дамп базы user_database с сервера mysql12.leaderhost.ru, логин для доступа к базе у нас user_admin и пароль 12345. | ||
− | + | mysqldump -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql | |
− | mysqldump -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql | + | |
− | |||
Наш дамп будет сохранен в файл user_database.sql. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой: | Наш дамп будет сохранен в файл user_database.sql. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой: | ||
Строка 14: | Строка 13: | ||
Если всё нормально, то никаких сообщений не выдастся. Посмотрим какого размера получился дамп: | Если всё нормально, то никаких сообщений не выдастся. Посмотрим какого размера получился дамп: | ||
− | < | + | <pre> |
[user@s12 ~]$ du -hs user_database.sql | [user@s12 ~]$ du -hs user_database.sql | ||
872K user_database.sql | 872K user_database.sql | ||
− | </ | + | </pre> |
-------------- | -------------- | ||
=== Восстанавливаем базу MySql из дампа === | === Восстанавливаем базу MySql из дампа === | ||
Строка 25: | Строка 24: | ||
Например дамп user_database.sql лежит в папке сайта hostingfaq.ru (пример для хостинга ЛидерХост). | Например дамп user_database.sql лежит в папке сайта hostingfaq.ru (пример для хостинга ЛидерХост). | ||
− | + | cd hostingfaq.ru/ | |
− | cd hostingfaq.ru/ | + | mysql -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database < user_database.sql |
− | mysql -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database < user_database.sql | + | |
− | |||
-------------- | -------------- | ||
Строка 34: | Строка 32: | ||
Не редко, при восстановлении базы из дампа, можно столкнутся с такой ошибкой: | Не редко, при восстановлении базы из дампа, можно столкнутся с такой ошибкой: | ||
− | + | ||
− | #1062 - Duplicate entry 'у-665' for key 1 | + | #1062 - Duplicate entry 'у-665' for key 1 |
− | + | ||
Зачастую, ошибка возникает из-за того что кодировка таблицы одна, а у данных другая. | Зачастую, ошибка возникает из-за того что кодировка таблицы одна, а у данных другая. | ||
Что можно поделать? как правило в дампе базы сменить все указатели кодировки на одну. Например, данные в дампе в кодировке cp1251, а где-то встречается указатель на utf8: | Что можно поделать? как правило в дампе базы сменить все указатели кодировки на одну. Например, данные в дампе в кодировке cp1251, а где-то встречается указатель на utf8: | ||
− | + | ||
− | ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; | + | ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; |
− | ENGINE=MyISAM DEFAULT CHARSET=cp1251; | + | ENGINE=MyISAM DEFAULT CHARSET=cp1251; |
− | + | ||
В этом случае просто заменим utf8 на cp1251, сделать это можно вручную в текстовом редакторе с помощью "поиск и замена" или по [[Ssh]] | В этом случае просто заменим utf8 на cp1251, сделать это можно вручную в текстовом редакторе с помощью "поиск и замена" или по [[Ssh]] | ||
− | + | ||
− | sed -i "s/utf8/cp1251/" user_database.sql | + | sed -i "s/utf8/cp1251/" user_database.sql |
− | + | ||
После чего снова попробовать восстановить базу из дампа. Нелишним будет принудительно задать кодировку ключом --default-character-set | После чего снова попробовать восстановить базу из дампа. Нелишним будет принудительно задать кодировку ключом --default-character-set | ||
− | + | ||
− | mysql --default-character-set=cp1251 -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database < user_database.sql | + | 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 | + | mysqldump: Got error: 1044: Access denied for user 'user_database'@'%' to database 'user_database' when using LOCK TABLES |
− | + | ||
Обойти её и успешно выполнить дамп поможет ключ --skip-opt | Обойти её и успешно выполнить дамп поможет ключ --skip-opt | ||
− | + | mysqldump --skip-opt -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql | |
− | mysqldump --skip-opt -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql | ||
− |
Текущая версия на 00:38, 7 декабря 2015
Делаем дамп базы MySql
Для того чтобы сохранить резервную копию базы данных 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 'у-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