MYSQL: database dump and CREATE USER (quick reference)
Опишу nota bene пару полезных вещей, необходимость которых у меня лично возникает относительно нечасто, и каждый раз приходится гуглить на эту тему. Одна из этих вещей — сохранение mysql базы данных в виде дампа на диске, а также ее восстановление. Вторая — создание пользователя бд mysql и назначение ему различных привилегий. Тут тоже имеются нюансы.
И так, первая задача. Создать dump базы данных mysql можно при помощи консольной утилиты mysqldump — в Mac OS X она поставляется в комплекте с Community Server. Синтаксис использования:
экспорт всех баз на сервере:
mysqldump --user=XXXXXXXX --password=XXXXXXX -A > /PATH/TO/DUMPFILE.SQL
экспорт баз данных сервера из списка
mysqldump --user=XXXXXXXX --password=XXXXXXX --databases DB_NAME1 DB_NAME2 DB_NAME3 -–routines > /PATH/TO/DUMPFILE.SQL
очень важный параметр -–routines — без него в дамп не будут выгружены хранимые процедуры и функции. По умолчанию он установлен в FALSE
экспорт списка таблиц одной из бд
mysqldump --user=XXXXXXXX --password=XXXXXXXX --databases DB_NAME --tables TABLE_NAME > /PATH/TO/DUMPFILE.SQL
Нюанс. Почему-то в моей Mac OS не настроена переменная PATH для мускульных запчастей, поэтому приходится указывать полный путь к утилитам
/usr/local/mysql/bin/mysqldump
Можно запускать из командной строки с указанием полного пути, а можно добавить в .bash_profile в своей домашней директории строчку
export PATH=$PATH:/usr/local/mysql/bin
Восстановление mysql базы из бэкапа:
mysql --verbose --user=XXXXXXXX --password=XXXXXXXX DB_NAME < /PATH/TO/DUMPFILE.SQL
—verbose можно на самом деле не указывать. использование этого параметра приводит к тому, что весь дамп еще дублируется и в консоль.
Создание пользователя mysql. На данный момент мне нужен пользователь с ограниченными возможностями. Создание пользователей в mysql производится с помощью команды GRANT:
GRANT USAGE ON mydb_name.* TO new_db_usr@localhost IDENTIFIED BY 'pass_for_new_db_user' WITH GRANT OPTION;
При этом создается пользователь, которому доступна только база mydb_name. Никакие объекты базы не доступны данному пользователю после создания. Разрешение на их использование необходимо выдавать отдельно. К примеру, выдадим гранты на newdb_usr:
GRANT INSERT ON mydb_name.mytable TO newdb_usr; GRANT SELECT ON mydb_name.mytable TO newdb_usr; GRANT UPDATE ON mydb_name.mytable TO newdb_usr;
синтаксис выдачи гранта на выполнение хранимой процедуры немного отличается от ANSI SQL:
GRANT EXECUTE ON PROCEDURE mydb_name.sp_myproc TO newdb_usr@localhost
Добавлю от себя. Без этого ключа —default-character-set=utf8 я не мог влить базу в нужной мне кодировке
Посмотрите скрипт создания схемы, там указывается дефолтная кодировка, скорее всего, в этом дело. Я всегда создаю схемы БД так:
CREATE DATABASE `mydb_name` /*!40100 DEFAULT CHARACTER SET utf8 */