Бэкап баз данных MySQL в Linux

Бэкап баз данных MySQL в Linux

Life-Hack

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

В этом уроке я опишу как сделать резервную копию MySQL сервера с помощью mysqldump.

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

Для установки mysqldump на Ubuntu, Debian или Mint:

$ sudo apt-get install mysql-client


Для установки mysqldump на CentOS, Fedora или RedHat:

$ sudo yum install mysql


Чтобы сгенерировать онлайн снимок живого MySQL сервера, вам нужно предотвратить любые обновления его баз данных во время процедуры создания резервной копии. Как добиться этого зависит от системы хранения, которое вы используете внутри для MySQL таблиц. Поэтому в первую очередь выясните, какую систему хранения (например, MyISAM, Innodb) вы используете. 

Резервное копирование баз данных InnoDB

Если все ваши MySQL используют InnoDB, вы можете использовать опцию "—single-transaction" с mysqldump для создания онлайн бэкапа:

$ mysqldump -h[server-ip-address] -u[username] -p[password] --all-databases --single-transaction > backup.sql


Обратите внимание, что в вышеприведённой mysqldump команде нет пробелов между опциями аргументов (например, -h, -u, -p) и самими величинами аргумента (например, server-ip-address, username, password).



Резервные копии баз данных MyISAM или InnoDB/MyISAM

Приведённая выше команда, тем не менее, не работает, если вы используете таблицы MyISAM или смесь таблиц InnoDB/MyISAM, поскольку MyISAM не поддерживает транзакции. В этом случае вам нужно явным образом заблокировать все таблицы на время проведения резервного копирование. Как это сделать показано ниже.

mysql> flush tables with read lock;


Вышеприведённый MySQL оператор flush закрывает все открытые таблицы в сервере MySQL и получает блоки чтения всех таблиц во всех существующих базах данных, тем самым предотвращая любые записи в базы данных. Это обеспечивает последовательных снимок запущенной системы. Теперь продолжайте выполнять резервное копирование.

$ mysqldump -h[server-ip-address] -u[username] -p[password] --all-databases > backup.sql


По окончании снимите глобальную блокировку баз данных.

mysql> unlock tables;


Бэкап баз данных MySQL в Widnows

Пользователи Widnows тоже люди и у них тоже возникает потребность в создании резервных копий. Красота использования кроссплатформенных программ в том, что синтаксис команд (если это консольное приложение) или внешний вид интерфейса (если он есть) одинаковые. Т.е. не нужно изучить две разные программы.

Файл в Widnows называется mysqldump.exe, лежит в подкаталоге bin корневого каталога MySQL. При запуске из командной строки нужно прописывать полный путь до файла. Например, у меня этот файл размещён в папке C:Serverbinmysql-5.6bin, следовательно моя команда (запускаю в командной строке — Win+X и там выбрать «Командная строка»):

C:Serverbinmysql-5.6binmysqldump.exe -h[server-ip-address] -u[username] -p[password] --all-databases --single-transaction > backup.sql


Если делаете на локальном компьютере, то -h[server-ip-address] можно пропустить.

Для файла backup.sql тоже можно указать абсолютный путь, чтобы потом не пришлось искать его по всему Widnows. Если абсолютный путь не указан, и если командная строка запущена не от имени администратора, то файл по умолчанию будет размещён в корне пользовательского каталога.

Например, у меня файл появился в папке C:UsersAlex

Если командная строка запущена от имени администратора, то файл появится в каталоге C:WindowsSystem32

Источник




Report Page