Консольные команды для работы с MySQL
В данной статье рассмотрены полезные сочетания команд ОС Linux, которые помогут работать с MySQL, в частности созданием и загрузком дампа, на серверах хостинга и VDS.
Более подробную информацию о каждой из команд можно получить, набрав man имя_команды
Загрузка, выгрузка дампа
- Если у Вас есть объемный дамп базы или таблица из MySQL (например, файл имеет имя dump.sql) и через phpMyAdmin не получается импортировать его в базу database , это можно сделать через консоль:
mysql -u user -p database < dump.sql
mysqldump -u user -p database > dump.sql mysqldump -u user -p database table > table.sql
mysqldump --all-databases -u user -p > all_dump_DB.sql
mysql --max_allowed_packet=64M -u user -p database < dump.sql
mysqldump -u user -p database --default-character-set=utf8 > dump.sql
Проверка работы сервера MySQL
Если на сервере возникают проблемы с производительностью, то весьма вероятно, что причинами их является сервер MySQL. Ниже приведены некоторые команды, которые могут помочь идентифицировать проблему (большинство действий могут быть выполнены только на VDS).
Обзор списка выполняющихся процессов
# mysql mysql> show full processlist;
Особое внимание следует обратить на запросы, находящиеся в состоянии “copying to temp table”, если такие присутствуют.
Получение списка медленных запросов
MySQL может быть настроен таким образом, чтобы он сохранял информацию обо всех запросах, исполняющихся больше 10 секунд (настраивается). Лог находится в файле /var/log/mysql/mysql-slow.log . Если такого файла на сервере нет, достаточно раскомментировать опцию log_slow_queries в файле /etc/mysql/my.cnf (или добавить, если таковая отсутствует), а затем перезапустить сервер командой
invoke-rc.d mysql restart
Строка должна выглядеть следующим образом:
log_slow_queries = /var/log/mysql/mysql-slow.log`
Импорт и экспорт баз данных MySQL через консоль и phpMyAdmin
В базе данных MySQL хранится динамический контент сайта (комментарии, аккаунты пользователей, размещённые посты и т. д.). Потеря подобной информации недопустима, поэтому нужно заранее позаботиться о резервировании данных.
Все таблицы из базы данных можно экспортировать в отдельный файл, который потом же импортировать обратно для восстановления информации. Кроме этого, созданный дамп БД можно использовать для переноса информации в другую базу MySQL.
Существует два способа импорта/экспорта:
- через веб-интерфейс PhpMyAdmin;
- подключившись к консоли MySQL локально или через SSH.
Подробнее о подключении через протокол SSH можно узнать здесь.
Все описанные действия с MySQL схожи по выполнению на любых операционных системах Linux.
Экспорт базы данных с помощью PhpMyAdmin
В первую очередь требуется выполнить вход в интерфейс PhpMyAdmin. Список существующих баз находится в верхнем левом углу.
Выбрав необходимую базу данных, нужно перейти в раздел «Экспорт».

Для быстрого экспорта подойдёт вариант «Быстрый – отображать минимум настроек», при котором используются оптимальные параметры переноса. Чтобы открыть список дополнительных опций, нужно выбрать метод «Обычный – отображать все возможные настройки».
Во вкладке «Формат» рекомендуется выставить расширение SQL (.sql) для экспортируемого файла. Но также можно использовать и другие форматы, такие как CSV (.csv) и XML (.xml).
Определившись с параметрами, остаётся выполнить экспорт нажатием «Вперёд». В браузере начнётся загрузка файла.
Экспорт базы данных MySQL через консоль
Экспорт базы данных выполняется с помощью утилиты MySQLdump:
mysqldump --user=Login --password=Password db_name > db_name.sql
Переменные в приведенном примере:
- «Login» – имя пользователя MySQL.
- «Password» – пароль пользователя MySQL.
- «db_name» – наименование базы данных.
- «db_name.sql» – конечный файл.
MySQLdump позволяет экспортировать базу данных с удаленного сервера (если хосту разрешено подключение):
mysqldump --user=Login --password=Password --host=XXX.XXX.XXX.XXX db_name > db_name.sql
*Вместо «XXX.XXX.XXX.XXX» указывается актуальный IP-адрес сервера.
Импорт базы данных с помощью PhpMyAdmin
Для начала необходимо авторизоваться в интерфейсе PhpMyAdmin и выбрать базу данных в левом верхнем углу. После этого стоит перейти в раздел «Импорт».

Теперь нужно нажать «Выбрать файл» и в открывшемся проводнике выбрать SQL-файл (принимаются также архивы Gzip, Bzip2, Zip). В разделе «Формат» отмечается расширение используемого файла.
Все остальные параметры изменять необязательно. Завершить импорт можно нажатием кнопки «Вперёд»
Импорт базы данных MySQL через консоль (замена существующей)
Для начала необходимо авторизоваться в командной строке MySQL:
mysql --user=Login --password=Password
*Вместо «Login» и «Password» вводятся действительные данные пользователя MySQL.
Теперь выбирается существующая база данных, с которой планируется дальнейшая работа:
use db_name
*Вместо «db_name» вводится наименование существующей БД.
Остаётся выполнить импорт таблиц следующей командой:
source db_name.sql
*Вместо «db_name.sql» вводится путь до файла SQL (предварительно загружается на сервер).
Импорт и создание базы данных MySQL через консоль
Выше был описан способ импорта, при котором осуществляется замена таблиц в существующей базе данных. Но такой вариант не подойдёт, если БД изначально не существует. В таком случае потребуется сначала создать новую базу данных, а уже потом импортировать в неё таблицы из резервной копии.
Для начала необходимо авторизоваться в консоли MySQL:
mysql --user=Login --password=Password
*Вместо «Login» и «Password» вводятся действительные данные пользователя MySQL.
Далее нужно создать новую базу данных:
CREATE DATABASE new_database;
*Вместо «new_database» вводится собственное наименование базы данных.
На экране появится следующий вывод:
Output Query OK, 1 row affected (0.00 sec)
Теперь нужно выбрать созданную базу, чтобы все последующие команды относились к ней:
use new_database
Остаётся импортировать таблицы из резервной копии:
source db_name.sql
*Вместо «db_name.sql» вводится путь до файла SQL (предварительно загружается на сервер).
Надежный хостинг для сайта. 14 дней - бесплатно!
Мы всегда на связи в соцсетях
Поддержка в привычной среде
Мы в Яндекс Кью
- Хостинг для сайта
- CMS хостинг
- VPS сервер
- Удалённый рабочий стол
- Домены
- Стресс-тест на DDoS
Как импортировать большую базу данных в mysql
Бывает возникает ситуация, в которой необходимо загрузить на сервер хостинга базу данных больше разрешенного хостингом в утилите управления базами данных phpMyAdmin- обычно этот предел установлен в ~2Mb. Если это случается на виртуале, то обычно просто заливаю базу через ftp и прошу суппорт хостинга помочь в данном вопросе. Поскольку использую нормальные хостинги, то решение это проблемы занимает всего 10-15 минут, так что особо не парился, но тут столкнулся с тем что возникла необходимость подсказать человеку у которого суппорт курил бамбук, так что выделилось несколько вариантов решения данной проблемы. Оговорюсь сразу что наиболее удобен для импорта базы данных mysql последний вариант, но он подходит только тем у кого есть доступ к терминалу. Так что в статье описаны все возможные способы импорта большой базы данных в mysql, кроме общения с суппортом. 1. Варинт первый – выгружаем бэкап базы не целиком, а по несколько таблиц, чтобы файл не превышал наши лимиты. Основной минус данного решения- это то, что операцию выгрузки- загрузки необходимо будет проводить много раз, так что подойдет исключительно для тех у кого много свободного времени и нечем заняться на досуге. 2. Вариант второй – выгружать в пожатом состоянии- так как степень сжатия для текстового файла будет максимальной. Но тут опять же можно столкнуться с тем, что на хостинге не установлена поддержка архиваторов. 3. Используем сторонний скрипт, который позволяет производить экспорт и импорт базы данных, минуя общение с phpMyAdmin. Наиболее известный из имеющихся в наличии, и к тому же наиболее хорошо работающий- это BigDump. О том как его настроить – я отписался чуть позже, так что это касается и настройки по 5му пункту. 4. Как частный случай 3 вариант, возможно залить на сервер эмулятор терминала и сделать 5 пункт через него. Например можно попробовать PHPterm, но в этом варианте можно столкнуться с ограничениями хостинга в плане безопасности запуска команд и скриптов. 5. Также есть простенькая программка аналогичная BigDump, которая также позволяет импортировать большие базы данных, только в данном случае необходим Zend Optimizer либо Nu-Coder. Программка называется Sypex Dumper, и вторую версию скрипта можно даже интегрировать в наиболее популярные CMS. На сайте есть как платная утилита, так и облегченная бесплатная версия. 6. Если таки имеется доступ к консоли, то можно добавить в php.ini следующие строки (увеличиваем лимит загрузки файлов по времени и размеру), после загрузки, лучше вернуть все назад, чтобы не нагнули сервак с оказией:
max_execution_time = 20000
max_input_time = 20000
upload_max_filesize = 150M
post_max_size = 150M 7. Но на самом деле наиболее быстрым и оптимальным вариантом загрузки большой базы данных, имея доступ к консоли, будет загрузить дамп базы данных dump.sql через ftp, а затем залить её через консоль ssh:
mysql -h hostname -u user-name -p DB_name < /path-to-dir/dump.sql
если у вас в качестве хоста базы данных используется стандартный localhost , то ключик -h можно и опустить, так что получится вида:
mysql -u user-name -p DB_name < /path-to-dir/dump.sql Да, чуть не забыл про самые поганые грабли всей пляски с импортом- при импорте базы данных могут возникнуть проблемы с кодировками, поэтому нам надо убедиться что дефолтная база и выгрузка sql находятся в одной кодировке, либо переконвертировать базу данных в стандартную для mysql кодировку (обычно это utf-8):
iconv -f CP1251 -t UTF-8 dump.sql > dump.sql.utf8
либо указать необходимую кодировку при процедуре импорта базы данных:
mysql -h hostname -u user-name -default_character_set utf8 -p DB_name < /path-to-dir/dump.sql ---------------------------------- И ещё немного информации .
Импорт и экспорт данных MySQL
Экспорт и импорт данных в MySQL обычно требуется при переносе информации из одной базы данных MySQL в другую и для осуществления резервного копирования. Резервное копирование данных носит чисто технологический характер. Это означает, что в случае какого-либо программного или аппаратного сбоя оборудования, мы сможем восстановить актуальные данные клиента. Мы гарантируем сохранность самих данных, а не их резервных копий. Однако, при наличии резервной копии на необходимую дату, мы готовы пойти навстречу клиенту и восстановить утерянные по неосторожности данные. Для это необходимо подать заявку на свободную тему из панели управления. Единственный способ быть уверенным в 100% восстановлении данных — самостоятельно выполнять регулярное резервное копирование информации. Для этого необходимо воспользоваться утилитой mysqldump, которая доступна через unix shell. Пример команд для экспорта и импорта базы данных:
mysqldump -u имя_пользователя -p -h имя_сервера_БД имя_базы > dump.sql
Данные будут сохранены в файле dump.sql. Далее (в случае необходимости) восстанавливаем данные из резервной копии (дампа) так:
mysql -u имя_пользователя -p -h имя_сервера_БД имя_базы < dump.sql
Запускаемые указанным образом утилиты для работы с MySQL будут запрашивать пароль к базе данных. Нужно вводить пароль соответствующего пользователя БД. Если пароль был утерян, вы можете самостоятельно изменить его в панели управления, в разделе Древо услуг (выпадающее меню расположено в самой верхней строчке панели управления справа). По умолчанию система считает, что данные в базе хранятся в кодировке UTF-8. Если ваши данные хранятся в другой кодировке, то после создания резервной копии (дампа) для последующего корректного восстановления данных необходимо открыть созданный файл текстовым редактором и исправить в нём строчку:
/*!40101 SET NAMES utf8 */;
Например, для кодировки Windows-1251 нужно указать:
/*!40101 SET NAMES cp1251 */;
Дополнительные опции утилиты mysqldump: --add-drop-table — опция, которая добавляет команду DROP TABLE перед созданием таблиц. Перед восстановлением таблиц из дампа, таблицы с таким же именем в рабочей базе данных будут удалены и пересозданы из резервной копии. Рекомендуется использовать для предотвращения возможных ошибок после восстановления; --add-locks — опция, которая добавляет команды LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы. Применяется для ускорения доступа к MySQL; --quote-names — опция, сообщающая утилите о необходимости ставить кавычки для названий таблиц и столбцов. Рекомендуется к использованию для MySQL версий, младше 4.1.1. В старших версиях она активирована по умолчанию. Опции --quick и --opt рекомендуется использовать, если база данных MySQL слишком большая для того, чтобы целиком поместиться в памяти. При этом утилита mysqldump выдает ошибку:
mysqldump: Out of memory (Needed XXXXX bytes) mysqldump: Got error: 2008: MySQL client run out of memory when retrieving data from server
В итоге строчка для создания копии базы данных получается следующей:
mysqldump --opt -u имя_пользователя -p -h имя_сервера_БД --add-drop-table имя_базы > dump.sql
либо такой:
mysqldump --quick -u имя_пользователя -p -h имя_сервера_БД --add-drop-table имя_базы > dump.sql
Для совместимости дампа, сделанного на стороннем сервере мы рекомендуем создавать дамп базы данных с ключом:
--set-variable max_allowed_packet=2M
-O max_allowed_packet=2M
Если во время импорта вы получите ошибку вида
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `some_table_name ` at row: 2
значит в вашей базе данных присутствуют данные, которые невозможно разделить на отдельные части, каждая не больше двух мегабайт. Как правило, такое случается, если базу данных MySQL используют для хранения содержимого различных файлов, например, картинок или музыки, не размещая их непосредственно в файловой системе. В таком случае, если размер какого-нибудь файла превышает определённое значение — база данных становится непригодной для использования на наших серверах и потребуется либо удалить такие данные из вашей базы, либо рассмотреть вариант использования сервера баз данных на VPS-сервере , где можно установить нужное ограничение max_allowed_packet в необходимое значение, либо не использовать его вообще. Если на вашем сервере установлена версия MySQL 4.0.x, то для корректного переноса данных со сторонних серверов необходимо при экспорте базы данных использовать ключ:
--compatible=mysql40
Как работать с MySQL из скриптов на Perl
Для работы с MySQL из Perl-скриптов как правило используют модуль DBI. Это позволяет удобно открывать и закрывать соединения к СУБД, подготавливать и выполнять запросы к базе, обрабатывать ошибки и так далее. Если вы не имеете опыта работы с MySQL из Perl, рекомендуем вам книгу «Программирование на Perl DBI» (рус., англ.). Итак, пример работы с MySQL из Perl DBI:
#!/usr/bin/perl use DBI; my $host = "u12345.mysql.masterhost.ru"; # вымышленный MySQL-сервер my $port = "3306"; # порт, на который открываем соединение my $user = "u12345"; # имя пользователя (вымышленное) my $pass = "password"; # пароль my $db = $user; # имя базы данных -по умолчанию равно имени пользователя print "Content-type: text/html\n\n"; $dbh = DBI->connect("DBI:mysql:$db:$host:$port",$user,$pass); $sth = $dbh->prepare("select field1 from table2");# готовим запрос $sth->execute; # исполняем запрос while ($ref = $sth->fetchrow_arrayref) < print "$$ref[0]\n"; # печатаем результат >$rc = $sth->finish; # закрываем $rc = $dbh->disconnect; # соединение
В этом примере мы сначала определяем переменные с параметрами доступа к MySQL, далее выдаем HTTP-заголовок, так как это у нас скрипт для запуска через веб, затем соединяемся с базой, подготавливаем и отправляем select-запрос, получаем и печатаем результаты, после чего закрываем соединение. Это простейший скрипт для работы с MySQL из Perl. Более подробные примеры вы можете найти в этой статье.
Как работать с MySQL из скриптов на PHP
Для работы с MySQL вы можете использовать встроенный в язык PHP средства, поддержка которых уже осуществляется на хостинге. PHP имеет развитый и понятный интерфейс к этой СУБД, что делает работу с MySQL именно из PHP наиболее простой и удобной особенно для начинающих веб-мастеров и веб-программистов.
# соединяемся с сервером и выбираем свою базу данных mysql_connect("u12345.mysql.masterhost.ru","u12345","password"); mysql_select_db("database"); # готовим и выполняем запрос к БД $query = "SELECT * FROM table"; $result = mysql_query($query) or die(mysql_error()); # выводим результаты выполнения запроса while($i = mysql_fetch_row($result))
Полная документация на русском языке по работе с MySQL из PHP-скриптов находится здесь. Кроме описаний, там же вы найдете советы опытных пользователей и примеры использования функций, упоминаемых в документации. Также рекомендуем вам статью «Использование MySQL в PHP сценариях» на сервере hostinfo.ru.
Загрузка данных с помощью LOAD DATA
- Параметр --local-infile=1
- Создать в домашней директории файл .my.cnf и в нем разрешить эту опцию для группы [mysql], которой пользуется данная утилита:
[mysql] local-infile=1
Включение данного режима из perl'а: необходимо в dsn при подключении указать файл конфигурации mysql (т.к. библиотека libmysql по умолчанию никаких дополнительных файлов конфигурации не читает) и группу в нем, в файле создать эту группу, и для этой группы выставить local-infile=1:
Например, вписываем в ~/.my.cnf
[perl] local-infile=1
а в скрипте подключение оформляем так:
my $dsn = "DBI:mysql:database:hostname;mysql_read_default_group=perl;". "mysql_read_default_file=~/.my.cnf"; my $dbh = DBI->connect($dsn, "username", "password") ||die "[err]: Can't connect to MySQL: $!";
Включение данного режима из PHP: у вас обязательно должен быть установлен свой собственный, скомпилированный интерпретатор PHP.
В функции mysql_connect() необходимо использовать аргумент 128 (значение константы CLIENT_LOCAL_FILES) в качестве пятого параметра.
$dbh = mysql_connect($server, $user, $pass, false, 128);
Дополнительные MySQL-база и MySQL-доступ (MySQL-пользователь)
Пользователям предоставляется определенное количество баз MySQL в рамках приобретенного тарифа. При этом автоматически подключается одна база, и реквизиты доступа к ней сообщаются в письме с уведомлением о заведении услуг. Клиенты могут самостоятельно создавать дополнительные базы данных и MySQL-доступы.
Для этого необходимо в контрольной панели в разделе Древо услуг выбрать площадку, для которой необходимо создать дополнительную услугу и в таблице «MySQL» выбрать команду «добавить» для услуги «MySQL-доступ (доп.)» или «MySQL-база (доп.)». Пароли доступа к базам данных можно изменить, вызвав команду «изменить» у требуемого MySQL-доступа.
Вот еще немного инфы (которая, кстати работает, сам проверял)
Импорт больших файлов sql в базу данных mysql
Как изменить максимально допустимый размер импорта файла sql в базе данных Mysql.
Для этого нужен доступ к папке \usr\local\mysql-5.1\ на сервере (или на локальном сервере denver).
По умолчанию у вас установлен Максимально допустимый размер загружаемого файла 2 MB .
По этому пути \usr\local\mysql-5.1\ открываем файл конфигурации my.cnf.
Раскомментируйте следующие строки, если вы хотите изменить
настройки InnoDB по умолчанию.
#
#innodb_data_home_dir = /usr/local/mysql-5.1/var/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql-5.1/var/
#innodb_log_arch_dir = /usr/local/mysql-5.1/var/
# Вы можете установить .._buffer_pool_size размером до 50 - 80 %
# оперативной памяти, но опасайтесь перерасхода
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M - здесь меняем до нужного размера!
#Устанавливайте .._log_file_size to 25 % от _buffer_pool_size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout = 50
Затем перезагружаем сервер и весело работаем с импортом больших sql файлов.
Импорт базы данных
но она содержит подводные камни в виде того, что если например база уже создана, то импорт может оказаться неудачным.
Самым лучшим выходом из ситуации будет ипморт напрямую через cli MySQL :
Заходим в MySQL:
mysql -u Login -p DB_name -h Host
mysql -u Login -p DB_name -h Host
(вместо Login и DB_name вводим данные пользователя БД и хост, например localhost)
Выбираем базу данных:
use db_name
