Користувальницькькі налаштування

Налаштування сайту


networks:mysql

MySQL

Работа с бекапами

Делаем бекап

mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql

Создаём структуру базы без данных

mysqldump –no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql

Если нужно сделать дамп только одной или нескольких таблиц

mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql

Создаём бекап и сразу его архивируем

mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz

Создание бекапа с указанием его даты

mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`

Заливаем бекап в базу данных

mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql

Заливаем архив бекапа в базу

gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

или так

zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Создаём новую базу данных

mysqladmin -u USER -pPASSWORD create NEWDATABASE

Включить и первичная настройка

Посмотреть список пользователей MySQL

SELECT USER from mysql.user;

Как посмотреть список таблиц и их структуру в MySQL

SHOW DATABASES; - список баз данных
SHOW TABLES [FROM db_name]; -  список таблиц в базе 
SHOW COLUMNS FROM таблица [FROM db_name]; - список столбцов в таблице
SHOW CREATE TABLE table_name; - показать структуру таблицы в формате "CREATE TABLE"
SHOW INDEX FROM tbl_name; - список индексов
SHOW GRANTS FOR user [FROM db_name]; - привилегии для пользователя.
SHOW VARIABLES; - значения системных переменных
SHOW [FULL] PROCESSLIST; - статистика по mysqld процессам
SHOW STATUS; - общая статистика
SHOW TABLE STATUS [FROM db_name]; - статистика по всем таблицам в базе

как узнать права пользователя?

SHOW GRANTS FOR root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

как узнать у каких пользователей есть права к конкретной базе?

SELECT user,host FROM mysql.db WHERE `db` = 'some_database';

Права доступа в MySQL

Пользователи MySQL

Все пользователи MySQL хранятся в таблице user базы mysql. Чтобы посмотреть список пользователей нужно переключиться на базу mysql и сделать выборку с помощью команды select:

mysql> use mysql;
mysql> select user,host from user;
+--------------------+------------+
| user                   | host         |
+--------------------+------------+
| root                   | 127.0.0.1  |
| root                   | testhost    |
| debian-sys-maint | localhost   |
| root                   | localhost   |
+--------------------+------------+

Из списка видно, что в базе имеются учетные данные суперпользователя root с возможностью подключаться только локально с данного сервера(адреса 127.0.0.1, localhost и имя сервера testhost). Еще есть системная учетная запись debian-sys-maint служит для внутренних системных целей СУБД MySQL.

В предыдущей части я рассказывал как настроить в конфигурационном файле /etc/mysql/my.cnf удаленное подключение к серверу баз данных MySQL. Напомню: для этого в параметре bind-address выставляется IP адрес 0.0.0.0 вместо 127.0.0.1, т.е. демон mysqld будет слушать не только локальный интерфейс 127.0.0.1, а все адреса имеющиеся на сервере. В этой части я расскажу как создать пользователя mysql, какие права выдать для различных пользователей, как выставить пароль и хост с которого будет производиться подключение.

Пользователь для веб сайта

Обычно различные веб приложения которые хранят информацию в базе mysql требуют создать отдельную учетную запись. Создадим пользователя website-user от имени которого будет работать наше веб приложение. Пользователя можно создать через команду create user, а потом выдать права grant select,insert…, но удобнее и быстрее сразу воспользоваться командой grant

mysql> GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP,INDEX ON website.* to 'website-user'@'localhost' IDENTIFIED BY 'website-PASSWORD;
mysql> flush privileges;

Здесь я сразу указал:

  • выдать права GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP,INDEX (возможно для вашего веб приложения список прав будет иной, обратитесь к документации веб приложения);
  • на базу website.* - имя базы указывается по маске (все файлы с названием website). Здесь можно указать *.*, тогда пользователь будет иметь права на все базы;
  • 'websiteuser'@'localhost' - имя пользователя, и хост с которого этот пользователь может подключаться в базу;
  • IDENTIFIED BY 'website-password' - указываем пароль пользователя.

Администратор баз данных

В следующем примере создадим учетную запись администратора баз данных который будет подключаться с IP адреса компьютера администратора 192.168.8.10

mysql> create user 'admin'@'192.168.8.10' identified by 'blahblahblah';
Query OK, 0 rows affected (0.01 sec)

Выдадим полные права пользователю admin на базу website:

mysql> grant all on website.* to 'admin'@'192.168.8.10';
mysql> flush privileges;

Теперь администратор может подключиться со своего компьютера к серверу баз данных. В этом примере я использовал команду create user, а уже потом grant в принципе разницы нет как будут создаваться пользователи.

Пользователь backup

Создадим пользователя backup для резервного копирования всех базы данных

mysql> GRANT SHOW DATABASES, SELECT, LOCK TABLES, RELOAD ON *.* to 'backup'@'%' identified by 'backup-password';
mysql> flush privileges;
  • GRANT SHOW DATABASES, SELECT, LOCK TABLES, RELOAD - Здесь я указал необходимый набор прав для удаленного резервного копирования и в то же время достаточный для безопасного бэкапа;
  • *.* - Пользователь backup может просматривать все базы;
  • 'backup'@'%' - пользователь backup может подключаться с любого IP адреса. Обычно не требуется разрешать подключения с любого ip для целей резервного копирования, так как у сервера backup всегда постоянный IP адрес.

Как поменять пароль?

Чтобы поменять пароль можно воспользоваться командой mysqladmin эту команду нужно запускать в bash.

mysqladmin -u website-user -p password NEWPASSWORD

А так же можно воспользоваться командой (SQL синтаксис) из консоли MySQL

mysql> update user set password=PASSWORD("123") where user='website-user';

Как сбросить пароль root?

Поменять пароль root можно всеми теми же командами, что и для обычного пользователя. Но вот что делать если вы забыли пароль рута или по каким-то причинам его утеряли, тогда проделаем следующие операции. 1) Первым делом нужно остановить mysqld - демон MySQL сервера

/etc/init.d/mysql stop

2) Создать скрипт для смены пароля /root/reset.sql со следующим содержанием:

UPDATE mysql.user SET Password=PASSWORD('YOUR-NEW-MYSQL-PASSWORD') WHERE User='root';
FLUSH PRIVILEGES;

Сохраняем файл и запускаем демон mysqld в безопасном режиме с параметром –init-file

mysqld_safe --init-file=/root/reset.sql &

Ответ будет таким

nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[20970]: started

Теперь можно просто убить процесс mysqld и запустить север заново:

killall mysqld
/etc/init.d/mysql start

Пароль пользователя root успешно изменен! Логинимся и проверяем. Есть ещё один способ сменить пароль root - это запустить mysqld c параметром –skip-grant-tables и поменять пароль, но я не рекомендую им пользоваться так как это не безопасно и есть вероятно повредить таблицы с правами.

http://cruw.blogspot.com/2011/11/mysql_13.html

Replication

networks/mysql.txt · В останнє змінено: 2014/09/22 07:13 (зовнішнє редагування)