MySQL: коррекция таблиц, дамп базы, загрузка данных
Для начала надо понять, что MySQL — это движок баз данных, рассчитанный на поддержку различных баз данных и одновременное обслуживание большого количества запросов от разных пользователей. |
Для начала надо понять, что MySQL — это движок баз данных, рассчитанный на поддержку различных баз данных и одновременное обслуживание большого количества запросов от разных пользователей.
Другими словами, не надо думать, что для каждого сайта надо "поднимать" и настраивать отдельную копию MySQL.
Для каждого пользователя создается своя область хранения информации, которая называется database. И если доступ к MySQL вам предоставил провайдер, то наверняка он предоставил вам все права на вашу личную database, в которой вы и будете хозяйничать.
Далее. Обращаться с запросами к MySQL можно как для работы с данными, так и для настройки самого MySQL или для настройки базы.
Для работы с MySQL можно использовать любой SQL-клиент, который вам наиболее привычен и удобен. Лично я использую стандартного клиента MySQL, работающего в UNIX-shell.
Обычное общение с MySQL сильно напоминает работу в shell или в DOS (для тех, кто никогда не видел в глаза UNIX).
Для начала, вы подключаетесь к MySQL, что может выглядеть как:
bash> /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, кроме обычных запросов к таблицам базы данных.
Можно модифицировать сами эти таблицы. Для этого используется запрос с ключевым словом 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-ом, следующим за этим знаком.
Подробнее о возможных преобразованиях таблиц можно почитать тут:
И прошу заметить, что правильно построенный запрос на основе ALTER TABLE никогда не порушит ваших данных, занесенных ранее в исправляемую таблицу, если вы не удалите поле в таблице, или не измените его тип
Перенос данных
Еще хочется обратить внимание на проблемы многих пользователей, "перевозящих" данные из других баз данных.Зачастую получается так, что нельзя подключиться сразу к двум базам и перелить данные из одной БД в другую. Особенно, когда старая база данных в старом неведомом формате или вообще представляет собой что-то самодельное.
В подобных случаях пользователь начинает писать скрипт, который "сосет" данные из файла, парсит их и при помощи банального insert-а укладывает в таблицы.
В общем, в этом подходе нет ничего предосудительного, особенно, когда вам необходимо залить десяток-другой тысяч строк. Но если ваша база похожа на настоящую, и количество записей измеряется миллионами, то лучше воспользоваться специальной возможностью MySQL, которая зовется LOAD DATA INFILE.
Это очень гибкая функция MySQL, позволяющая прочесть из файла данные в базу. При этом, гибкость заключается в том, что вы можете описать формат хранения данных в файле, указать диапазон данных, подлежащих заливке и так далее.
Подробно эта функцию описана тут:
И, что особенно важно, скорость заливки данных при помощи LOAD DATA намного превышает построчную скорость заливки insert-ом.
Надеюсь, функция LOAD DATA окажется вам полезной.
Создание дампа в MySQL
Ну а что делать, если у вас есть необходимость перенести не только ваши данные, но и всю конфигурацию базы: таблицы, правила, индексы и так далее?В подобном случае нам очень полезно будет дампироование базы.
Что такое дамп базы. Это вывод структуры и данных из базы в формате SQL-запросов.
Поясню. Если у нас в базе есть таблицы, а в таблицах данные, то в дамп мы получим SQL-запросы на построение таблиц и insert-ы для заполнения этих таблиц данными.
Да что я вам рассказываю, вы сами можете сделать дамп любой своей базы посмотреть на него.
В пакете MySQL есть mysqldump который этим и занимается. Запуск mysqldump очень похож на запуск стандартного клиента MySQL, о котором я писал вначале этого выпуска. То есть, указывается база, указывается пользователь и название database, дампировать которую мы собрались.
Например:
bash> /usr/local/bin/mysqldump -h MySQL.int -u 21ru -p 21ruРазумеется, mysqldump имеет массу всевозможных параметров. Например, указав в строке вызова -d можно вывести в дамп только структуру таблиц, без данных. Это особенно удобно, когда вам надо создать копию структуры базы на другом сервере, не перенося при этом данных. Так же можно указать конкретные таблицы, дамп которых вам необходим и так далее.
Полный список ключей mysqldump можно получить:
bash> 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-файлах, если они изменились.
И все.
Кроме того, вы можете пользоваться mysqldump для бэкапа вашей базы. Не забывайте, что MySQL отличается от своих старших братьев отсутствием транзакций. Другими словами, поданную MySQL команду уже никак нельзя отменить. И если вы написали delete from table tbl_name и нажали enter прежде чем ограничить удаление какими-то критериями, таблица tbl_name будет безвозвратно очищена от данных. И в этом случае вас очень выручит mysqldump сделанный незадолго до этого.
Это все, что касается работы MySQL на удаленном хостинге. Если же вы сами для себя установили MySQL и администрируете его, то вам необходимо знать много больше.
Вам необходимо уметь создавать базы, пользователей, правильно определять уровни доступа пользователей к базе, защищать MySQL от внешних атак, настраивать буферизацию, эффективное управление памятью сервера, языками сортировки, и так далее.
« Назад