GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Дерево каталогов NESTED SETS (вложенные множества) и управление им(139707)
Дерево каталогов NESTED SETS (вложенные множества) и управление им. Часть 2(24359)
SQL сервер PostgreSQL(22854)
Теоретические основы реляционных баз данных(21502)
Введение в Базы данных(17391)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Базы данных » MySQL: коррекция таблиц, дамп базы загрузка данных

MySQL: коррекция таблиц, дамп базы загрузка данных


Руслан Курепин
atos@21.ru
http://kurepin.ru/

Что помогает работать с MySQL.

По просьбам web-зрителей, хочу обратить свое внимание в несколько абзацев текста, посвященного работе с MySQL.

Честно говоря, не очень понимаю, зачем переписывать на свой лад огромное количество документации по MySQL, но коли просят...

Итак. Чего полезного умеет MySQL.

Для начала надо понять, что MySQL — это движок баз данных, рассчитанный на поддержку различных баз данных и одновременное обслуживание большого количества запросов от разных пользователей.

Другими словами, не надо думать, что для каждого сайта надо "поднимать" и настраивать отдельную копию MySQL.

Для каждого пользователя создается своя область хранения информации, которая называется database. И если доступ к MySQL вам предоставил провайдер, то наверняка он предоставил вам все права на вашу личную database, в которой вы и будете хозяйничать.

Далее. Обращаться с запросами к MySQL можно как для работы с данными, так и для настройки самого MySQL или для настройки базы.

Для работы с MySQL можно использовать любой SQL-клиент, который вам наиболее привычен и удобен. Лично я использую стандартного клиента MySQL, работающего в UNIX-shell.

Обычное общение с MySQL сильно напоминает работу в shell или в DOS (для тех, кто никогда не видел в глаза UNIX).

Для начала, вы подключаетесь к MySQL, что у меня на моем хостинге в masterhost.ru выглядит как:

	[atos]$ /usr/local/bin/MySQL -h MySQL.int -u 21ru -p 21ru

где есть вызов самого клиента MySQL с указанием адреса сервера MySQL (MySQL.int — это адрес отдельного сервера с MySQL), указанием имени пользователя и названия базы данных (database).

После нажатий enter-а, MySQL запросит у меня пароль, проверит его и пустит в свой shell:

	Enter password: 
	Reading table information for completion of table and column names
	You can turn off this feature to get a quicker startup with -A

	Welcome to the MySQL monitor.  CoMySQLands end with ; or \g.
	Your MySQL connection id is 3060933 to server version: 3.23.49

	Type 'help;' or '\h' for help. Type '\c' to clear the buffer

	MySQL>

Вот так. И далее я начинаю общаться с MySQL.

Это подключение ничем не отличается от тех, которые совершают ваши скрипты. Они тоже подключаются к MySQL, отправляют в него запрос, получают ответ и закрывают сессию. Работа в MySQL shell отличается только тем, что мы долго держим открытой сессию, последовательно передавая MySQL всевозможные запросы.

Кстати, много уроков назад, где мы создавали нашу базу данных, я цитировал именно ответы данного MySQL-клиента.

* * *

Итак. Что же можно сделать с MySQL, кроме обычных запросов к таблицам базы данных.

Можно модифицировать сами эти таблицы. Для этого используется запрос с ключевым словом alter table.

Например, нам надо добавить в существующую таблицу tbl_text поле text_length в формате int с изначальным значением 100. Пишем:

	alter table tbl_text add column text_length int not null default 100; [enter]

и все записи в таблице tbl_text получат новое поле text_length со значением 100.

Кстати, в shell MySQL можно писать запросы в несколько строк. MySQL не начнет интерпретировать ваш запрос, пока вы не закончите его точкой с запятой ";" и enter-ом, следующим за этим знаком.

Подробнее о возможных преобразованиях таблиц можно почитать тут: http://www.MySQL.com/doc/A/L/ALTER_TABLE.html.

И прошу заметить, что правильно построенный запрос на основе alter table никогда не порушит ваших данных, занесенных ранее в исправляемую таблицу.

* * *

Еще хочется обратить внимание на проблемы многих пользователей, "перевозящих" данные из других баз данных.

Зачастую получается так, что нельзя подключиться сразу к двум базам и перелить данные из одной БД в другую. Особенно, когда старая база данных в старом неведомом формате или вообще представляет собой что-то самодельное.

В подобных случаях пользователь начинает писать скрипт, который "сосет" данные из файла, парсит их и при помощи банального insert-а укладывает в таблицы.

В общем, в этом подходе нет ничего предосудительного, особенно, когда вам необходимо залить десяток-другой тысяч строк. Но если ваша база похожа на настоящую, и количество записей измеряется миллионами, то лучше воспользоваться специальной возможностью MySQL, которая зовется LOAD DATA INFILE.

Это очень гибкая функция MySQL, позволяющая прочесть из файла данные в базу. При этом, гибкость заключается в том, что вы можете описать формат хранения данных в файле, указать диапазон данных, подлежащих заливке и так далее.

Подробно эта функцию описана тут: http://www.MySQL.com/doc/L/O/LOAD_DATA.html.

И, что особенно важно, скорость заливки данных при помощи LOAD DATA намного превышает построчную скорость заливки insert-ом.

Надеюсь, функция LOAD DATA окажется вам полезной.

* * *

Ну а что делать, если у вас есть необходимость перенести не только ваши данные, но и всю конфигурацию базы: таблицы, правила, индексы и так далее?

В подобном случае нам очень полезно будет дампироование базы.

Что такое дамп базы. Это вывод структуры и данных из базы в формате SQL-запросов.

Поясню. Если у нас в базе есть таблицы, а в таблицах данные, то в дамп мы получим SQL-запросы на построение таблиц и insert-ы для заполнения этих таблиц данными.

Да что я вам рассказываю, вы сами можете сделать дамп любой своей базы посмотреть на него.

В пакете MySQL есть mysqldump который этим и занимается. Запуск mysqldump очень похож на запуск стандартного клиента MySQL, о котором я писал вначале этого выпуска. То есть, указывается база, указывается пользователь и название database, дампировать которую мы собрались.

Например:

	[atos]$ /usr/local/bin/mysqldump -h MySQL.int -u 21ru -p 21ru

Разумеется, mysqldump имеет массу всевозможных параметров. Например, указав в строке вызова -d можно вывести в дамп только структуру таблиц, без данных. Это особенно удобно, когда вам надо создать копию структуры базы на другом сервере, не перенося при этом данных. Так же можно указать конкретные таблицы, дамп которых вам необходим и так далее.

Полный список ключей mysqldump можно получить:

	[atos]$ mysqldump —help

Получив на руки дамп базы, вы можете залить его практически в любую другую БД SQL, а уж на любой другой MySQL-север — это точно.

Залить данные из дампа просто:

	[atos]$ /usr/local/bin/mysql -h MySQL.int -u 21ru -p 21ru < base.dump

где первая часть строки до знака "<" -- подключение к базе данных, а вторая — файл, содержащий дамп базы.

MySQL подключится к базе (не забыв спросить у вас пароль) и построчно выполнит все инструкции из файла base.dump.

Как видите, все просто. Попробуйте сами.

Итак. Если вы хотите перенести свой проект, написанный на php+MySQL, то это можно сделать в несколько несложных шагов:

  1. Делаем дапм базы (с данными, если нужна копия проекта и без данных, если нужен новый чистый проект).
  2. Копируем файлы самого сайта
  3. Правим пути в php-файлах, если они изменились.

И все.

Таким образом я позавчера создал копию форума http://forum.21.ru на новом месте. Я не мог воспользоваться программой инсталляции форума, так как мой вариант уже очень сильно отличается от своего прародителя.

Кроме того, вы можете пользоваться mysqldump для бэкапа вашей базы. Не забывайте, что MySQL отличается от своих старших братьев отсутствием транзакций. Другими словами, поданную MySQL команду уже никак нельзя отменить. И если вы написали delete from table tbl_name и нажали enter прежде чем ограничить удаление какими-то критериями, таблица tbl_name будет безвозвратно очищена от данных. И в этом случае вас очень выручит mysqldump сделанный незадолго до этого.

* * *

Это все, что касается работы MySQL на удаленном хостинге. Если же вы сами для себя установили MySQL и администрируете его, то вам необходимо знать много больше.

Вам необходимо уметь создавать базы, пользователей, правильно определять уровни доступа пользователей к базе, защищать MySQL от внешних атак, настраивать буферизацию, эффективное управление памятью сервера, языками сортировки, и так далее.

Но это уже темы для других выпусков, которыми я буду перемежать выпуски по web-программированию.

 
24.07.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.