Данная статья является статьей цикла «Установка LAMP на Debian/Ubuntu — very fast way»
В части 1 мануала по лампе мы поставили в т.ч. и mysql. И phpmyadmin. Казалось бы, что ещё нужно для счастья. А нужно знание того, как придерживаться моей идеологии «fast way» при работе с mysql как администратору сервера.
Конечно же, для работы с mysql существует куча прелестных утилит, которые работают в связке с php. Но, во-первых, php есть не на всех серверах, во-вторых — мы слишком ленивы, чтобы открывать что-то, кроме ssh сессии, не правда ли) ?
Как администратору, нам нужно производить с mysql не так много действий. Начнёмс.
Сначала зайдём в консоль mysql:
inky@Debian:~$ mysql -u root -p
Enter password:
Узнать, что мы в консоли mysql мы можем по изменившемуся приветствию:
mysql>
Приступим. Создадим базу:
mysql> create database `dbname`;
Дадим права пользователю muser на базу dbname. Если такого пользователя не существует — он автоматически создастся:
mysql> grant all on `dbname`.* to 'muser'@'localhost';
Я бы порекомендовал бы не давать одному пользователю права на несколько баз… но ваше право, конечно же.
Теперь нам нужно назначить пароль пользователю muser:
mysql> set password for 'muser'@'localhost' = password('megapasswordhere');
Самой собой, megapasswordhere меняем на свой пароль.
Казалось бы, при чём тут fast way? Сейчас объясню.
Введем такую команду:
mysql> create database `dbname2`; grant all on `dbname2`.* to 'muser2'@'localhost'; set password for 'muser2'@'localhost' = password('megapassword2here');
Только что мы создали базу dbname2, дали на неё все права пользователю muser2 и назначили пароль megapassword2here этому пользователю.
Теперь нажимаем стрелку вверх, исправляем цифры 2 на 3, нажимаем enter…. дальше, думаю, вы поняли =) История сохраняется и после выхода из mysql-client. Кстати, выйти из него можно сочетанием клавиш ctrl+D.
Для невнимательных хочу заметить, что имя базы обрамляется обратным апострофом (тем, что на букве Ё на клавиатуре).
Теперь нам было бы неплохо научиться создавать дампы (бэкапы) баз mysql и восстанавливать их. Сразу оговорюсь, что я не испытываю проблем ни со скоростью соединения, ни с пространством на hdd серверов, поэтому я не буду архивировать или сжимать базы.
Приступим. Для начала создадим бэкап отдельной базы, удобный для её восстановления в любую другую базу (например, для переноса на другой хостинг, где принята другая идеология наименования БД). Эти команды следует вводить уже в консоли самого сервера.
inky@Debian:~$ mysqldump --complete-insert --no-create-db -u muser -p dbname > dbname.sql
либо
inky@Debian:~$ mysqldump --complete-insert --no-create-db -u muser -pmegapasswordhere dbname > dbname.sql
В первом случае пароль будет запрошен в интерактивном режиме, во втором… Ну не безопасно, зато удобно)
На выходе мы получим всем дампам дамп.
Во-первых, на время создания бэкапа база будет заблокирована от любых изменений (наглый пользователь, написавший пост во время бэкапа базы форума не попортит вам дамп). (опция —add-locks)
Во-вторых — запросы записываются полностью, с именем столбцов. Увеличивает размер, но снижает возможность ошибки (—complete-insert)
В-третьих — в дамп не добавляется команда CREATE DATABASE, а значит мы можем восстановить этот дамп в любую другую базу по желанию. (—no-create-db —no-create-info)
Ну и да — сам дамп будет в файлике dbname.sql (имя файла указывается после перенаправления вывода (>). Можно использовать конструкцию вида > /backup/dbname.sql)
Ну и восстановим такой бэкап:
inky@Debian:~$ mysql -u muser2 -pmegapassword2here dbname2 < dbname.sql
или с ручным вводом пароля:
inky@Debian:~$ mysql -u muser2 -p dbname2 < dbname.sql
Обратите внимание, что бэкап мы восстанавливаем уже в dbname2.
Я не вижу смысла создавать дампы сразу нескольких баз данных. В конечном итоге ценность такого дампа близка к нулю. Если есть сильное желание - перевод официального мануала по утилите mysqldump находится тут - www.mysql.ru/docs/man/mysqldump.html
Ну и напоследок вкуснятина:
inky@Debian:~$ mysqldump --add-locks --complete-insert --no-create-db --no-create-info -u muser2 -p dbname2 | mysql --host=remote-host -u muser2 -p dbname2
Этой командой мы сможем перенести базу dbname в базу dbname2 на удалённом хосте remote-host. Не забудьте, что пользователю muser2 в этом случае необходимо разрешить удалённый доступ к базе dbname2:
mysql> grant all on `dbname2`.* to 'muser2'@'%';
и установите пароль для 'muser2'@'%'
Ну и З.Ы.
Это 90% задач, которые я, как админ-недоросток, выполняю с mysql. Благодаря тому, что написано выше - их выполнение занимает 10% времени от всей работы с mysql. Удачи вам.
Спасибо тебе огромное! Все четко, быстро и понятно!
Спасибо!
для mysqldump возможна проблемка, в дамп не записывается признак автоинкрементируемого поля, а стандартный id в большинстве задаётся как:
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
чтобы побороть это, нужно использовать дополнительную опцию —create-options
такая своеобразная фича
установил неделю назад debian 6 Создал сайт на локальном сервере. Снес все сознательно,в том числе и базу данных. Пытаюсь установить вновь .
mysql> create database `dbname`;
Can’t create database ‘dbname’;database exsists.
mysql> grant all on `dbname`.* to ‘root’@’localhost’;
Ok
mysql> set password for ‘root’@’locahost’= password(‘tad’);
Can’t find any matching row inthe user table
Если задать имя базы ‘dbname1’ — процесс повторяется точно также.
Опять все снес связанное с сайтом начал с нуля —точно такая-же последовательность.
Подскажите по возможности.
Пользователя создайте, мускульному руту пароль так менять нельзя.
Естественно нельзя. Создается OK/Просто я не стал указывать пункт для краткости/
> mysql> set password for ‘root’@’locahost’= password(‘tad’);
> Can’t find any matching row inthe user table
Вы здесь пытаетесь изменить пароль руту.
прочитайте сначала мой пост и тяните кота за хвост
Что вам неясно? Mysql говорит вам о том, что вы пытаетесь изменить пароль для несуществующей связки пользователь@хост. В случае с рутом — будет такое же сообщение об ошибке — защита от дурака.
Показывайте целиком, что в консоли, а не пишите многоуровневую историю на тему «ну я тут вот это делал, но на самом деле вот тут так, а потом так, а ещё растак» — это ничуть не поможет понять, где вы ошиблись.
Спасибо. Кратко. Понятно. Знакомлюсь с postgresql. Не всё получается. Под настроение напишите так же и про неё, и эффективное использование совместно mysql и postgre. Сайты на друпал 7. Вернулся с 8. Кратко о себе. 65 лет. уч. врач. СПб.
> и эффективное использование совместно mysql и postgre. Сайты на друпал 7.
Никак, друпал не умеет 2 базы использовать для одного сайта (и смысла в этом нет).
Либо мускуль, либо постгря.
так же вариант создания
mkdir -p /opt/backup
nano /opt/backup/backup.sh
#!/bin/bash
dirs=»/home /etc»
out=»/opt/backup»
day=$(date +%A-%F)
hostname=$(hostname -s)
archive=»$hostname-$day.tgz»
echo «### Directory backup has been started ###»
echo «### Creating backup archive ###»
tar czf $out/$archive $dirs
echo «### Backup successfully completed ###»
date +%A-%F-%T
ls -lh $out
chmod +x /opt/backup/backup.sh