mysqlhotcopy, Копирование баз данных и таблиц MySQL
Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES , FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. Пожалуй, это наиболее быстрый способ копирования базы данных в целом или одиночных таблиц, но он может работать только на том же компьютере, где расположены каталоги копируемой базы данных.
mysqlhotcopy db_name [/path/to/new_directory] mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory mysqlhotcopy db_name./regex/
Утилита mysqlhotcopy поддерживает следующие опции:
-?, --help
Показать окно справки и выйти из программы.
-u, --user=#
Имя пользователя для входа в базу данных.
-p, --password=#
Используемый пароль при подсоединении к серверу.
-P, --port=#
Номер порта, используемого для подсоединения к локальному серверу.
-S, --socket=#
Номер сокета, используемого для подсоединения к локальному серверу.
--allowold
Не делать прерывания, если объект уже существует (переименовать в it_old).
--keepold
Не удалять предыдущий результат (только что переименованный) после выполнения команды.
--noindices
Не включать обширные индексные файлы в копию, чтобы сделать дубликат меньше по размеру и более быстрым. Индексы можно реконструировать позже с помощью команды myisamchk -rq .
--method=#
Метод копирования (cp или scp ).
-q, --quiet
Выводить только сообщения об ошибках.
--debug
Разрешить отладку.
-n, --dryrun
Сообщать о действиях без их выполнения.
--regexp=#
Копировать все базы данных с именами, встречающимися в функции regexp.
--suffix=#
Суффикс для имен скопированных баз данных.
--checkpoint=#
Внести проверочную запись в предусмотренную таблицу базы данных.
--flushlog
Записать на диск данные журналов из буфера, как только все таблицы заблокируются.
--tmpdir=#
Временная директория (вместо '/tmp').
Более полное описание данного сценария можно посмотреть в документации по языку программирования Perl.
Сценарий mysqlhotcopy берет информацию для групп [client] и [mysqlhotcopy] из файлов опций.
Для выполнения программы mysqlhotcopy необходимы доступ для записи в директорию, куда будет помещена копия, и привилегия выполнения команды SELECT для копируемых таблиц и команды RELOAD для MySQL-сервера (чтобы выполнить FLUSH TABLES ).
mysqlimport, импорт данных из текстовых файлов
Утилита mysqlimport обеспечивает интерфейс командной строки для SQL-оператора LOAD DATA INFILE . Большинство параметров mysqlimport полностью соответствует аналогичным параметрам для оператора LOAD DATA INFILE . См. раздел Синтаксис оператора LOAD DATA INFILE .
Утилита mysqlimport вызывается следующим образом:
shell> mysqlimport [параметры] database textfile1 [textfile2 ...]
Для каждого текстового файла, указанного в командной строке, mysqlimport удаляет расширение в каждом имени файла и использует его, чтобы определить, в какую таблицу занести содержимое. Например, файлы с именами 'patient.txt', 'patient.text' и 'patient' должны быть все занесены в таблицу с именем 'patient'.
Утилита mysqlimport поддерживает следующие опции:
-c, --columns=...
Эта опция принимает в качестве аргумента список разделенных запятыми имен полей. Данный список полей используется для создания соответствующей команды LOAD DATA INFILE , которая затем посылается в MySQL. См. раздел Синтаксис оператора LOAD DATA INFILE .
-C, --compress
Использовать компрессию в связи между клиентом и сервером, если они оба поддерживают сжатие.
-#, --debug[=option_string]
Отслеживать прохождение программы (для отладки).
-d, --delete
Удалить данные из таблицы перед импортированием текстового файла.
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
Эти опции аналогичны соответствующим операторам для LOAD DATA INFILE . См. раздел Синтаксис оператора LOAD DATA INFILE .
-f, --force
Игнорировать ошибки. Например, если таблица для текстового файла не существует, продолжать обработку остающихся файлов. Без параметра --force утилита mysqlimport прекращает работу при отсутствии таблицы.
--help
Вывести справочную информацию и выйти из программы.
-h host_name, --host=host_name
Импортировать данные в MySQL-сервер на указанном хосте. Значение хоста по умолчанию - localhost .
-i, --ignore
См. описание для параметра --replace .
-l, --lock-tables
Заблокировать все таблицы для записи перед обработкой любых текстовых файлов. Это обеспечивает синхронизацию всех таблиц на сервере.
-L, --local
Читать входящие файлы из клиента. По умолчанию предполагается, что текстовые файлы расположены на сервере при подсоединении к localhost (значение хоста по умолчанию).
-pyour_pass, --password[=your_pass]
Используемый пароль при подключении к серверу. Если аргумент =your_pass не введен, mysqlimport предложит ввести пароль.
-P port_num, --port=port_num
Номер порта TCP/IP, используемого для подсоединения к хосту (применяется при подсоединении к хостам, отличным от localhost , для которого используются сокеты Unix).
-r, --replace
Опции --replace и --ignore управляют обработкой поступающих на вход записей, которые дублируют имеющиеся записи по значениям уникальных ключей. Если задано значение --replace , новые строки заменяют существующие с тем же самым значением уникального ключа. Если задано значение --ignore , входные строки, которые дублируют существующую строку по значению уникального ключа, пропускаются. Если же ни одна из опций не задана, то при обнаружении ключа-дубликата возникает ошибка и остаток текстового файла игнорируется.
-s, --silent
Режим молчания. Выводить только сообщения об ошибках.
-S /path/to/socket, --socket=/path/to/socket
Файл сокета для подсоединения к localhost (значение хоста по умолчанию).
-u user_name, --user=user_name
Имя пользователя MySQL-сервера, используемое при подсоединении к серверу. Значением по умолчанию является имя для входа в Unix.
-v, --verbose
Расширенный режим вывода. Вывод более детальной информации о работе программы.
-V, --version
Вывести информацию о версии и выйти из программы.
Ниже приведен пример листинга программы, использующей утилиту mysqlimport :
$ mysql --version mysql Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686) $ uname -a Linux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown $ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test $ ed a 100 Max Sydow 101 Count Dracula . w imptest.txt 32 q $ od -c imptest.txt 0000000 1 0 0 \t M a x S y d o w \n 1 0 0000020 1 \t C o u n t D r a c u l a \n 0000040 $ mysqlimport --local test imptest.txt test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 $ mysql -e 'SELECT * FROM imptest' test
+------+---------------+ | id | n | +------+---------------+ | 100 | Max Sydow | | 101 | Count Dracula | +------+---------------+
1 2 3 4 5 6
8 8 8
| |