Mysql - создание, бэкап, восстановление, шпаргалкаПодписка на Комментарии к "Mysql - создание, бэкап, восстановление, шпаргалка"

Аватар zenon

Про это сто раз и на каждом углу написано, ничего, повторим, запишем, это мелочи которые всегда должны быть под рукой, тем более пользоваться этим материалом предполагается как заметкой, шпаргалкой, ... для более основательных изложений есть раздел Статьи, ... и еще раз - хотите разместить тут свой (или чужой, но обязательно с ссылкой на источник) материал, милости просим, места хватит _:)
Так, ладно к делу -
Логин в MySQL от root командой:

# mysql -u root -p

если лень вводить пароль то можно сразу так:

# mysql -u root -p password

где password ваш пароль от MySQL.
Кстати пробел между -u root и -p password совсем не обязателен, если где-то увидели, то это не ошибка, можно и так:
# mysql -uroot -ppassword

Итак оказались внутри (увидели приглашение mysql>):
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2385
Server version: 5.1.67-log Gentoo Linux mysql-5.1.67

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Создадим базу данных dbname (CREATE DATABASE), дадим разрешения пользователю username на нашу базу с паролем password (GRANT):
mysql> CREATE DATABASE dbname;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON dbname.* TO "username"@"localhost" IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT;

Для просмотра имеющихся баз SHOW DATABASES, удалить базу DROP DATABASE, после обязательно FLUSH PRIVILEGES.
Просмотр прав пользователя:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+
| Grants for admin@localhost                          |
+-----------------------------------------------------+
| GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' |
+-----------------------------------------------------+

Создание пользователей с помощью CREATE USER и GRANT:
mysql> CREATE USER 'john'@'localhost' IDENTIFIED BY 'pass';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON ccount.*
    ->     TO 'john'@'localhost';
mysql> CREATE USER 'doe'@'host.example.com' IDENTIFIED BY 'pass';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON expenses.*
    ->     TO 'doe'@'host.example.com';

В итоге имеем:
Пользователь john имеет доступ к базе данных ccount, только с localhost, с паролем pass.
Пользователь doe имеет доступ к базе данных expenses, но только с хоста host.example.com, пароль pass.
...
///
Бэкап и восстановление.
Тут всё проще (только с одной стороны, если углубиться в материал, то можно далеко зайти), и очень важны некоторые тонкости, про которые, например написав как сделать дамп базы в архив, забывают привести команду восстановления из архива... итак:
=
Ключ --all-databases позволяет сделать копии всех баз данных, которые существуют на данном MySQL-сервере, причем в один файл (all-databases-dump.sql):
$ mysqldump --all-databases -u root -h localhost -p password > all-databases-dump.sql

Тоже самое, но в архиве (all-databases-dump.sql.gz):
$ mysqldump --all-databases -u root -h localhost -p password | gzip -c > all-databases-dump.sql.gz

Восстановление всех баз из all-databases-dump.sql:

$ mysql -u root -h localhost -p password < all-databases-dump.sql

Восстановление всех баз из архива all-databases-dump.sql.gz:

$ gunzip < all-databases-dump.sql.gz | mysql -u root -p password -h localhost

Вот тут стоит остановиться и подумать, а что если база существует? Не произойдет ли при восстановлении накладок?
Смотрим man mysqldump, и вот что главное:

.
.
--add-drop-database
          Add a DROP DATABASE statement before each CREATE DATABASE statement.
--add-drop-table
          Add a DROP TABLE statement before each CREATE TABLE statement.

То есть опция которая добавляет команду DROP DATABASE перед тем как восстановить, и если вы ничего не меняли, по умолчанию она включена. Так что выполняя восстановление всех или одной базы, если ничего не менялось, то перед заливкой базы оная удаляется. Также это можно подсмотреть в самом дампе базы любым вьювером текстовых файлов, тот же встроенный в Midnight Commander подойдет. Внутри мы увидим примерно такое:
DROP TABLE IF EXISTS `games_categories`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `games_categories` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,

Дамп базы dbname:

$ mysqldump -u root -h localhost -p password dbname > dbname-dump.sql

завернуть в архив:
$ mysqldump -u root -h localhost -p password dbname | gzip -c > dbname-dump.sql.gz

Восстановление dbname:
$ mysql -u root -h localhost -p password dbname < dbname-dump.sql

из архива
$ gunzip < dbname-dump.sql.gz | mysql -u root -p password -h localhost dbname

//
И еще - как нам посмотреть существующие базы из командной строки? Это очень пригодиться в скриптах:
$ mysql -u root -h localhost -p password -Bse 'show databases'

//
Похожие материалы:

Добавить комментарий