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

Ниже приведен типичный пример использования этого сценария.


mysqldumpopt имя_пользователя пароль employee > backup.sql

Здесь используется опция —opt, инкапсулирующая несколько других оп­ций, — мы обсудим их чуть позже. Мы также указали имя базы данных и перена­правили вывод в резервный файл, который хотели бы использовать.

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

Листинг 14.1. Пример вывода сценария mysqldump

MySQL dump 10.2

– Host: localhost Database: employee

Server version 4.1.O-alpha-max-debug


— Table structure for table ‘assignment’

DROP TABLE IF EXISTS assignment;

CREATE TABLE assignment (

clientID int(11) NOT NULL default ‘0′, employeelD int (11) NOT NULL default ‘0′, workdate date NOT NULL default ‘0000-00-00′, hours float default NULL,

PRIMARY KEY (clientID,employeelD,workdate) ) TYPE=InnoDB CHARSET=latinl;

Dumping data for table ‘assignment’

/* 140000 ALTER TABLE assignment DISABLE KEYS */; LOCK TABLES assignment WRITE; INSERT INTO assignment VALUES

(1,7513,’0000-00-00′,5), (1,7513,’2003-01-20′,8.5); UNLOCK TABLES;

7*140000 ALTER TABLE assignment ENABLE KEYS */;
Table structure for table ‘client’

DROP TABLE IF EXISTS client;

CREATE TABLE client (

clientID’int(11) NOT NULL auto_increment, name varchar(40) default NULL, address varchar(100) default NULL, contactPerson varchar(80) default NULL, contactNumber varchar(12) default NULL, PRIMARY KEY (clientID)

) TYPE=InnoDB CHARSET=latinl;

Dumping data for table ‘client’

/* 140000 ALTER TABLE client DISABLE KEYS */; LOCK TABLES client WRITE; INSERT INTO client VALUES


(1,’Telco Inc’,'1 Collins St Melbourne’,'Fred Smith’,'95551234′),

(2,’The Bank’,'100 Bourke St Melbourne”,’Jan Tristan’,'95559876′); UNLOCK TABLES;

/*!40000 ALTER TABLE client ENABLE KEYS */;

Table structure for table ‘department’

DROP TABLE IF EXISTS department; CREATE TABLE department (

departmentID int (11) NOT NULL auto_increment,

name varchar(30) default NULL,

PRIMARY KEY (departmentID) ) TYPE=InnoDB CHARSET=latinl;

— Dumping data for table ‘department’

/*140000 ALTER TABLE department DISABLE KEYS */; LOCK TABLES department WRITE; INSERT INTO department VALUES

(42, ‘Finance’),

(128,’Research and Development’), (129,’Human Resources’), (130,’Marketing’) , (131,’Property Services’); UNLOCK TABLES;

/* 140000 ALTER TABLE department ENABLE KEYS */;

— Table structure for table ‘employee’

DROP TABLE IF EXISTS employee; CREATE TABLE employee (

employeelD int(11) NOT NULL auto_increment,

name varchar(80) default NULL,

job varchar(30) default NULL,

departmentID int (11) NOT NULL default ‘0′,

PRIMARY KEY (employeelD) ) TYPE=InnoDB CHARSET=latinl;


— Dumping data for table ‘employee’

/*140000 ALTER TABLE employee DISABLE KEYS */; LOCK TABLES employee WRITE; INSERT INTO employee VALUES

(6651, ‘Ajay Patel’, ‘ProgrammerM28) , (7513,’Nora Edwards’,'Programmer’,128), (9006,’Candy Burnett’,'Systems Administrator’,128), (9842, ‘Ben Smith’,'DBA’, 42), (9843,’Fred Smith’,'DBA’,131); UNLOCK TABLES;

/*140000 ALTER TABLE employee ENABLE “KEYS

Table structure for table ‘employeeSkills’

DROP TABLE IF ExTSTS employeeSkills;

CREATE TABLE’employeeSkills (

employeelD int (11) NOT NULL default ‘0′, skill varchar(15) NOT NULL default “, PRIMARY KEY (employeelD,skill)

) TYPE=InnoDB CHARSET=latinl;

Dumping data for table ‘employeeSkills’

/*140000 ALTER TABLE employeeSkills DISABLE KEYS */; LOCK TABLES employeeSkills WRITE; •■ INSERT INTO employeeSkills VALUES

(6651,’Java’),

(6651,’VB’),

(7513,’C'),

(7513,1 Java’),

(7513, ‘Perl’),

(9006,’Linux’),

(9006,’NT’),

(9842,’DB2′); UNLOCK TABLES;

/*140000 ALTER TABLE employeeSkills ENABLE KEYS */;


Теперь можно перезагрузить или воссоздать базу данных employee, выпол­нив следующие действия.

1. Создать базу данных с подходящим именем на нужной машине.

2. Загрузить файл копии с помощью команды mysql имя_пользователя -р < backup.sql

Сценарий mysqldump имеет множество опций. Здесь мы использовали опцию —opt, которую могут сопровождать следующие параметры.

quick. Заставляет MySQL направить данные дампа сразу в файл, минуя буфер памяти (что предполагается По умолчанию). В результате процесс ускорится.

add-drop-table. Дает MySQL указание добавлять оператор DROP TABLE перед каждым оператором CREATE TABLE в дампе (см. листинг 14.1),

add-locks. Добавляет операторы LOCK TABLES и UNLOCK TABLES (их вы тоже можете увидеть в файле дампа).

extend-insert. Заставляет MySQL использовать многострочный син­таксис вставки для добавления множества строк с помощью одного опера­тора INSERT. Так, в нашем листинге соответствующий оператор выглядит так:

INSERT INTO employeeSkills VALUES (6651,’Java’), (6651,’VB’), (7513,’C'),

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

■—lock-tables. Заставляет MySQL блокировать все таблицы, прежде чем начать создание дампа.

Обратите внимание на то, что опция —opt (означающая optimized — оптими­зированное) будет оптимизировать время, необходимое для последующей загрузки дампа, а не время, потраченное на создание дампа. Процесс создания файла дампа может оказаться долгим.

Вот еще несколько полезных опций.

databases. Позволяет указать не одну, а несколько баз данных для дампа.

all-databases. Дает MySQL указание создать дамп всех имеющихся баз данных.

allow-keywords. Если имеются имена полей, которые являются клю­чевыми словами MySQL (или могут стать таковыми в будущем), эта опция требует от MySQL квалифицировать (т.е. сопровождать) имя каждого столб­ца именем таблицы.

-^d или –no-data. Создавать дамп только структуры базы данных, но не ее содержимого. Это может оказаться полезным при размещении и тестиро­вании базы данных на разных машинах.

Преимуществами использования mysqldump являются простота и автомати­ческая блокировка таблиц.

Но имеются и два недостатка. Во-первых, этот сценарий блокирует таблицы: запуск этого сценария на сервере блокирует доступ пользователей на несколько секунд (или минут, в зависимости от размера таблиц). Если вам потребуется создать дамп на отдельном не имеющем репликации сервере, желательно делать это не во время пиковых нагрузок, чтобы не вызвать раздражения пользователей. Если вы храните множество данных и имеете много пользователей в любое время, необходимо выбрать другой способ резервирования.

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

Комментарии запрещены.

Фото
two 3d humans give their hand for handshake