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

Материал из Помощь клиентам хостинга
Перейти к: навигация, поиск
м (Защищена страница «MySQL dump and restore» [edit=sysop:move=sysop] [каскадная])
 
Строка 6: Строка 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. Если Вы ошибетесь в логине или пароле то получите ошибку на подобии этой:
Строка 14: Строка 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 из дампа ===
Строка 25: Строка 24:
 
Например дамп user_database.sql лежит в папке сайта hostingfaq.ru (пример для хостинга ЛидерХост).
 
Например дамп user_database.sql лежит в папке сайта hostingfaq.ru (пример для хостинга ЛидерХост).
  
<geshi lang=bash>
+
  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
+
 
</geshi>
 
 
--------------
 
--------------
  
Строка 34: Строка 32:
  
 
Не редко, при восстановлении базы из дампа, можно столкнутся с такой ошибкой:
 
Не редко, при восстановлении базы из дампа, можно столкнутся с такой ошибкой:
<geshi lang=bash>
+
 
#1062 - Duplicate entry 'у-665' for key 1  
+
  #1062 - Duplicate entry 'у-665' for key 1  
</geshi>
+
 
  
 
Зачастую, ошибка возникает из-за того что кодировка таблицы одна, а у данных другая.
 
Зачастую, ошибка возникает из-за того что кодировка таблицы одна, а у данных другая.
 
Что можно поделать? как правило в дампе базы сменить все указатели кодировки на одну. Например, данные в дампе в кодировке cp1251, а где-то встречается указатель на utf8:
 
Что можно поделать? как правило в дампе базы сменить все указатели кодировки на одну. Например, данные в дампе в кодировке cp1251, а где-то встречается указатель на utf8:
<geshi lang=sql>
+
 
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;
</geshi>
+
 
  
 
В этом случае просто заменим utf8 на cp1251, сделать это можно вручную в текстовом редакторе с помощью "поиск и замена" или по [[Ssh]]
 
В этом случае просто заменим utf8 на cp1251, сделать это можно вручную в текстовом редакторе с помощью "поиск и замена" или по [[Ssh]]
<geshi lang=bash>
+
 
sed -i "s/utf8/cp1251/" user_database.sql
+
  sed -i "s/utf8/cp1251/" user_database.sql
</geshi>
+
 
  
 
После чего снова попробовать восстановить базу из дампа. Нелишним будет принудительно задать кодировку ключом --default-character-set
 
После чего снова попробовать восстановить базу из дампа. Нелишним будет принудительно задать кодировку ключом --default-character-set
<geshi lang=bash>
+
 
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
</geshi>
+
 
  
 
----------
 
----------
 
Другая ошибка может возникать в процессе создания дампа:
 
Другая ошибка может возникать в процессе создания дампа:
<geshi lang=bash>
+
 
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
</geshi>
+
 
  
 
Обойти её и успешно выполнить дамп поможет ключ --skip-opt
 
Обойти её и успешно выполнить дамп поможет ключ --skip-opt
<geshi lang=bash>
+
  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
 
</geshi>
 

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