MySQL dump and restore — различия между версиями

Материал из Помощь клиентам хостинга
Перейти к: навигация, поиск
(Новая: Для того чтобы сохранить резервную копию базы данных MySql принято использовать так называемые дампы. ...)
 
 
(не показано 11 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
=== Делаем дамп базы MySql ===
 
Для того чтобы сохранить резервную копию базы данных MySql принято использовать так называемые дампы.  
 
Для того чтобы сохранить резервную копию базы данных MySql принято использовать так называемые дампы.  
 
Это текстовый файл содержащий структуру и содержимое базы данных в формате SQL запросов.
 
Это текстовый файл содержащий структуру и содержимое базы данных в формате SQL запросов.
Строка 5: Строка 6:
 
Снимать будем дамп базы user_database с сервера mysql12.leaderhost.ru, логин для доступа к базе у нас user_admin и пароль 12345.
 
Снимать будем дамп базы user_database с сервера mysql12.leaderhost.ru, логин для доступа к базе у нас user_admin и пароль 12345.
  
<geshi lang=bash>
+
  mysqldump -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql
mysqldump -hmysql12.leaderhost.ru -uuser_admin -p12345 user_database > user_database.sql
+
 
</geshi>
 
  
 
Наш дамп будет сохранен в файл user_database.sql. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой:
 
Наш дамп будет сохранен в файл user_database.sql. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой:
Строка 13: Строка 13:
  
 
Если всё нормально, то никаких сообщений не выдастся. Посмотрим какого размера получился дамп:
 
Если всё нормально, то никаких сообщений не выдастся. Посмотрим какого размера получился дамп:
<geshi lang=bash>
+
<pre>
 
[user@s12 ~]$ du -hs user_database.sql
 
[user@s12 ~]$ du -hs user_database.sql
 
872K    user_database.sql
 
872K    user_database.sql
</geshi>
+
</pre>
 +
--------------
 +
=== Восстанавливаем базу 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

Текущая версия на 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