Установка, настройка, бэкапы в MariaDB

База данных важный элемент, к примеру, для такого стека как LAMP (Linux, Apache, MySQL, PHP). В RedHat (CentOS) MariaDB установлен по умолчанию.

В этой этой статье вы узнаете, как установить MariaDB на CentOS 7, как выполнять основные задачи администрирования и как делать бэкапы и восстановление баз.

Базовая конфигурация MariaDB

Сначала установим MariaDB и выполним базовые настройки. В этом разделе вы узнаете, как это сделать и как сделать небольшие изменения в файле конфигурации  /etc/my.cnf.

Обратите внимание, что многие из компонентов MariaDB имеют имена, которые ссылаются на MySQL. Это нормально, потому что MariaDB является производной от программного обеспечения базы данных MySQL.

Чтобы установить MariaDB, выполните следующие действия:

  1. Введите yum install mariadb mariadb-server mariadb-test -y.
  2. Введите systemctl start mariadb; systemctl enable mariadb, чтобы запустить и включить сервис базы данных.
  3. Убедитесь, что mariadb запущен, выполнив systemctl status mariadb. Эта команда покажет текущее состояние, включая последние сообщения, которые были зарегистрированы. В листинге 1 показано, как это выглядит.

Листинг 1

[root@server1 system]# systemctl status mariadb -l
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
Active: active (running) since Thu 2019-10-20 04:44:32 PDT; 2 days
ago
Main PID: 1663 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─1663 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2220 /usr/libexec/mysqld --basedir=/usr --datadir=/var/
lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/
mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/
var/lib/mysql/mysql.sock
Oct 20 04:44:24 server1.example.com systemd[1]: Starting MariaDB
database server...
Oct 20 04:44:27 server1.example.com mysqld_safe[1663]: 150326 04:44:27
mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
Oct 20 04:44:28 server1.example.com mysqld_safe[1663]: 150326 04:44:28
mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Oct 20 04:44:32 server1.example.com systemd[1]: Started MariaDB
database server.


После установки MariaDB рекомендуется также защитить его. Для этого выполните mysql_secure_installation. Эта команда запустит список вопрсов, которые описаны ниже.

В листинге 2 показаны выходные данные команды, причем все вопросы выделены жирным шрифтом:

Enter current password for root (enter for none): если у пользователя БД root уже есть пароль, введите его здесь. Если нет, просто нажмите Enter, чтобы продолжить.

Set root password? [Y/n]: ответьте y, чтобы установить пароль для root, и введите его два раза.

Remove anonymous users? [Y/n]: ответьте y, чтобы удалить анонимных пользователей, которые по умолчанию есть в БД.

Disallow root login remotely? [Y/n]: ответьте y, чтобы гарантировать, что пользователь root может подключаться к БД только локально. Для пользователей с правами root, которые хотят получить удаленный доступ, все равно надо сначала подключиться к серверу по SSH.

Remove test database and access to it? [Y/n]: после установки создается тестовая БД. По соображениям безопасности рекомендуется удалить эту базу, но поскольку в этой статье вы научитесь работать с MariaDB, вы должны сохранить ее. Поэтому выбираем n.

Reload privilege tables now? [Y/n]: ответьте y, чтобы сохранить и применить внесенные изменения.

Листинг 2

[root@server1 system]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you have just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.

By default, a MariaDB installation has an anonymous user, allowing
anyone to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'.
This ensures that someone cannot guess at the root password from the
network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n
... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...

All done! If you have completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!


MariaDB можно использовать локально или по сети. Преимущества есть у обоих вариантов. Если MariaDB доступен по сети, легко настроить стек сервисов, где база работает на одном сервере, а связанные сервисы работают где-то еще. Этот вараинт предлагает максимально возможную производительность.

Если же вы хотите максимально повысить безопасность, рассмотрите возможность полного изолирования БД от сети. Это значит, что все сервисы, использующие БД, доступны на одном сервере.

Чтобы определить, будет ли MariaDB использовать сеть, вы измените несколько параметров в файле конфигурации /etc/my.cnf (который является основным файлом конфигурации MariaDB). В листинге 3 показан пример содержимого этого файла.

Листинг 3

[root@server1 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security
risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d


В разделе [mysqld] вы можете установить множество параметров, включая следующие:
bind-address адрес, по которому сервис БД будет прослушиваться.
Установите значение ::, если вы хотите разрешить доступ через все IP-адреса (IPv4, а также IPv6), или оставьте пустым, чтобы разрешить доступ только через IPv4. Кроме того, вы можете указать IP-адреса конкретных интерфейсов, с которыми база данных должна связываться.

skip-network установите значение 1, чтобы отключить всю сеть.
В этом случае связь с другими локальными процессами будет проходить через сокеты, которые по умолчанию находятся в /var/lib/mysql/mysql.sock. При использовании этого подхода клиентскому ПО также требуется доступ к базе данных через сокеты, и оно не может использовать localhost и IP для доступа к локальной БД.

port указывает порт для прослушивания соединений TCP/IP.

Для получения дополнительной информации о настройках, которые вы можете настроить, смотрите вывод команды /usr/libexec/mysqld --help --verbose.

Если к базе данных требуется удаленный доступ, необходимо также открыть файрвол. MariaDB использует сервис-файл firewalld mysql, который находится в /usr/lib/firewalld/services/mysql.xml, поэтому в файрволе можно легко открыть доступ через стандартный порт 3306 всего одной строкой:

firewall-cmd --permanent --add-service=mysql; firewall-cmd --reload


В упражнении 1 вы узнаете, как установить базу данных MariaDB.

Упражнение 1. Установка MariaDB

В этом упражнении вы выполните базовую установку MariaDB. Вы также отключите доступ к сети и примените настройки безопасности. Затем вы проверите, что некоторые системные базы данных по умолчанию доступны.

1. Введите yum install -y mariadb mariadb-server mariadb-test для установки БД.

2. Введите  systemctl start mariadb; systemctl enable mariadb чтобы запустить и включить в автозагрузку mariadb.

3. Убедитесь, что mariadb прослушивается, введя ss -tulpen | grep mysql. Вы должны увидеть процесс mysqld, прослушивающий порт 3306.

4. Отключите сетевое взаимодействие, добавив строку skip_networking=1 в /etc/my.cnf и перезапустите mariadb, используя systemctl restart mariadb.

5. Настройте базовую защиту mariadb, используя mysql_secure_installation. Установите пароль для root, отключите удаленный доступ для root, удалите тестовую базу данных и всех анонимных пользователей.

6. Введите mysql -u root -p, чтобы войти в базу данных под пользователем root.

7. В командной строке MariaDB введите show databases; для отображения всех доступных базы. Результат должен выглядеть как в листинге 4.

8. Введите exit; чтобы выйти из оболочки MariaDB.

Листинг 4

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)


При работе с MariaDB важно знать разницу между базами данных, таблицами и записями. Таблица 1 суммирует их.

Таблица 1. Элементы базы данных


Название Описание

Database (База данных)

Совокупность данных, состоящая из разных таблиц. Сотрудники могут быть именем базы данных.
Table (Таблица)
Классы элементов, которые используются в базе данных. В базе данных сотрудника вы можете иметь такие таблицы, как статус занятости и адресная книга. В базе данных таблицы могут быть взаимосвязаны. В каждой базе данных у вас должна быть хотя бы одна таблица.

Fields (Поля)
Тип информации, которая создается в таблице. В таблице адресной книги у вас есть такие поля, как, например, название, улица, город.

Record (Запись)
Определенный набор данных хранится в таблице. Например, у каждого клиента есть запись в базе данных адресной книги, в которой содержатся записи об имени и улице.

Value (Значение)
Конкретные значения, которые хранятся в поле. Например, поле имени в таблице адресной книги может иметь значение Линда Джонс.


Выполнение простых задач администрирования базы данных

Даже если вы являетесь администратором Linux, полезно иметь базовые знания о командах администрирования базы данных. Это не делает вас администратором базы данных, но помогает выполнять основные задачи по настройке.

Чтобы начать работу с базами данных, вам необходимо сначала подключиться к службе баз данных. Для этого используйте команду mysql: mysql -u root -h localhost -p. (Даже если вы используете MariaDB, многие команды все еще являются командами mysql.)

Эта команда регистрирует вас как пользователя root на сервере localhost, а затем запрашивает пароль. После входа в систему, как показано в упражнении 1, вы входите в интерактивную оболочку MySQL, где будете работать с базами данных. Вы уже видели команду show databases;, которая отображает список доступных баз данных.

Обратите внимание, что в командах оболочки MySQL регистр не учитывается (но имена баз данных и таблиц чувствительны к регистру). Также обратите внимание, что все команды заканчиваются точкой с запятой (;).

Работа с базами данных выглядит как работа с каталогами. Администратор создает базу данных, затем начинает использовать эту базу и затем вводит в неё контент. Команда USE используется как команда cd из оболочки bash. Там, где cd позволяет легко переключаться между каталогами, команда USE позволяет переключаться между базами данных.

Попробуйте, например, следующие команды (после входа в среду оболочки MySQL от имени root):

  1. Введите CREATE DATABASE addressbook; чтобы создать базу данных с именем addressbook.
  2. Введите USE addressbook; чтобы начать использовать эту базу.
  3. Введите  SHOW TABLES; чтобы показать текущие таблицы. Сейчас у вас нет ни одной таблицы.
  4. Теперь введите USE mysql; чтобы переключиться на базу данных mysql.
  5. Введите SHOW TABLES;, которая покажет множество таблиц, включая таблицу с именем user.
  6. Введите describe user;, чтобы получить имена из таблицы user. Команда дает подробное описание, как видно в листинге 5. Она сообщает, какие записи или поля доступны в таблице, какой тип данных, и показывает некоторые дополнительные атрибуты содержимого таблицы.

Листинг 5


В MariaDB, как и в MySQL, вы будете использовать язык структурированных запросов (SQL) для манипулирования данными в базе данных. Основные команды позволяют создавать, читать, обновлять и удалять. Эти команды также называются операциями CRUD:  createselectupdate, и delete.

Перед вставкой данных в базу данных вам необходимо создать хотя бы одну таблицу. Для этого используйте CREATE TABLE, а затем имя таблицы, которую вы хотите добавить, например CREATE TABLE addressbook(name VARCHAR(40), street VARCHAR(40));. При определении таблицы вы также определяете записи, которые вы хотите добавить в таблицу, в дополнение к типу данных, который будет храниться в этой таблице. В этом примере это просто тип VARCHAR, который позволяет хранить 40 байт переменных данных.

Если вы работаете с базой данных, которая уже была определена, или если вам нужно проверить, что вы только что создали, вам нужно выяснить атрибуты таблицы. Для этого используйте DESCRIBE, в случае с адресной книгой DESCRIBE addressbook;. Команды даст результат, как в листинге 6, который сначала показывает, как создать таблицу, а затем показывает, как получить информацию о полях, хранящихся в этой таблице.

Листинг 6

MariaDB [addressbook]> CREATE TABLE addressbook(name VARCHAR(40),street
VARCHAR(40));
Query OK, 0 rows affected (0.00 sec)
MariaDB [addressbook]> DESCRIBE addressbook;

+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(40) | YES | | NULL | |
| street | varchar(40) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)


После того, как вы выяснили, какие поля необходимы для создания данных в таблице, вы можете использовать команду INSERT, чтобы добавить их: INSERT INTO addressbook (name,street) VALUES (‘linda jones’,’state street’);. В этой команде вы сначала ссылаетесь на имя таблицы, в которую необходимо добавить данные, перечисляете конкретные атрибуты, которые вы хотите заполнить, а затем перечисляете значения, которые вы хотите ввести в эти конкретные атрибуты.

Обратите внимание, что важно помещать значения, которые вы хотите вставить в записи, в одинарные кавычки. Без них команды не будут работать.

Чтобы убедиться, что команда для вставки данных сработала, используйте SELECT * from addressbook;.

Чтобы удалить данные, используйте команду DELETE, например DELETE FROM addressbook WHERE name = ‘lucy ball’;. Обратите внимание, что в этой команде важно не забыть часть WHERE. Если вы опустите его, все записи в таблице будут удалены. Также обратите внимание, что в этой команде (как и в любой другой команде, которую вы используете в этом примере) вам необходимо указать, к какой таблице вы хотите применить изменения.

Чтобы изменить данные, используйте команду UPDATE: например, UPDATE addressbook SET street=’main street’ WHERE name = ‘linda jones’;. Обратите внимание, что в этой команде вам нужно использовать оператор WHERE, чтобы указать MariaDB, какую запись использовать, и команду SET, чтобы указать атрибут, который вы хотите изменить, с его новым значением.

Чтобы прочитать записи, используйте команду SELECT: например, SELECT name,street FROM addressbook;. Кроме того, вы можете выбрать отображение всех атрибутов, используя *: SELECT * FROM addressbook; и используя where, вы можете создавать простые запросы, фильтруя по конкретным результатам: SELECT * FROM addressbook WHERE street=’State street’;.

При использовании предложений WHERE вы можете использовать разные операторы:

=
Равно

<>
Не равно

>
Больше

>=
Больше или равно

<
Меньше

<=
Меньше или равно

BETWEEN
Его использование позволяет задать ограничение «От и До» к конкретному полю, и если очередное значение попадет в диапазон, то предикат примет значение «Истина», и значение попадет в итоговую выборку.

LIKE
Поиск по шаблону

IN
Указать несколько возможных значений в столбце


Управление пользователями

В MariaDB вы можете создавать пользователей и группы для предоставления определенных прав доступа конкретным пользователям в базах данных и таблицах. Кроме того, MariaDB может использовать Linux PAM (Pluggable Authentication Modules) систему для аутентификации.

При управлении пользователями из MySQL пользователи по умолчанию хранятся в таблице user в базе данных mysql. Для создания новых пользователей вы будете использовать CREATE USER;. Как пользователь, который создает нового пользователя, вам нужна привилегия CREATE USER или INSERT в базе данных mysql.

При создании пользователя обычно включается @hostname на имя пользователя (так что результатом будет username@hostname). Это способ позволит вам отличать пользователей, которые могут войти только с локального хоста, от пользователей, которые могут войти с других хостов.

Если вы хотите создать пользователя lisa, используйте команду CREATE USER lisa@localhost IDENTIFIED BY ‘password’;. Команда создает пользователя с именем lisa и паролем password. Пароли хранятся в зашифрованном виде в базе данных MariaDB.

В спецификации имени хоста у вас есть несколько вариантов. Вы можете использовать имя хоста или IP-адрес и знак % в качестве подстановочного знака(маски). Например, lisa@% относится к пользователю lisa, который может войти с любого хоста.

Когда пользователь больше не нужен, используйте DROP USER user@host; чтобы удалить пользователя. Обратите внимание, что пользователи, которые в данный момент активны в системе, не удаляются сразу.

Когда вы создаете пользователя, пользователь по умолчанию создается без каких-либо привилегий. Таким образом, пользователь может подключиться, но не сможет использовать любую команду. Привилегии могут предоставляеться на определенные таблицы, но также и ко всей базе данных.

Например, GRANT SELECT, UPDATE, DELETE, INSERT on addressbook.names to lisa@localhost; предоставит пользователю lisa базовые права доступа к таблице names в базе данных addressbook.


Давайте посмотрим на еще несколько примеров предоставления привилегий:


Даёт права на SELECT для конкретной таблицы в конкретной БД.

GRANT SELECT ON database.table TO user@host;


Даёт права на SELECT для всех таблиц в конткретной БД.

GRANT SELECT ON database.* TO user@host;


Даёт права на SELECT для всех таблиц и БД.

GRANT SELECT ON *.* TO user@host;


Даёт права на CREATE, ALTER, DROP для всех таблиц в конкретной БД.

GRANT CREATE, ALTER, DROP ON database.* to user@host;


Делает user суперпользователем все таблиц и баз.

GRANT ALL PRIVILEGES ON *.* to user@host;


При работе с привилегиями важно перезапустить все привилегии после их изменения. Чтобы сделать это, используйте команду FLUSH PRIVILEGES;. Чтобы показать привилегии, назначенные определенному пользователю, вы можете использовать команду SHOW GRANTS FOR user@host;.

В упражнении 2 вы создадите простую базу данных под рутом.

Упражнение 2. Создание базы данных.

1. Введите mysql -u root -p, чтобы войти в систему как root.

2. Введите create database videos; чтобы создать базу данных с названием videos.

3. Введите USE videos; чтобы переключиться на базу данных videos.

4. Теперь давайте создадим несколько столбцов: CREATE TABLE videos(title VARCHAR(40), actor VARCHAR(40), year INT, registration INT);

5. Давайте вставим некоторые данные:  INSERT INTO videos (registration,title,actor,year) VALUES(1,’Basic Instinct’,’Sharon Stone’, 1992);

6. Повторите пункт 5, но чтобы ввести следующие видео:
   2,Pretty Woman, Julia Roberts, 1990
   3,Terminator, Arnold Schwarzenegger, 1984
   4,Jurassic Park, Harrison Ford, 1992

7. Введите SELECT * from videos; чтобы показать обзор всей базы данных. Вы должны увидеть результат, как показано в листинге 7.

Листинг 7

MariaDB [videos]> INSERT INTO videos (registration,title,actor,year) VALUES (1,'Basic Instinct', 'Sharon Stone', 1992);
Query OK, 1 row affected (0.01 sec)

MariaDB [videos]> INSERT INTO videos (registration,title,actor,year) VALUES (2, 'Pretty Woman', 'Julia Roberts', 1990);
Query OK, 1 row affected (0.00 sec)

MariaDB [videos]> INSERT INTO videos (registration,title,actor,year) VALUES (3, 'Terminator', 'Arnold Schwarzenegger', 1984);
Query OK, 1 row affected (0.01 sec)

MariaDB [videos]> INSERT INTO videos (registration,title,actor,year) VALUES (4, 'Jurassic Park', 'Harrison Ford', 1992);
Query OK, 1 row affected (0.00 sec)

MariaDB [videos]> select * from videos;
+-----------------+-----------------------+------+--------------+
| title | actor | year | registration |
+----------------+------------------------+------+--------------+
| Basic Instinct | Sharon Stone | 1992 | 1 |
| Pretty Woman | Julia Roberts | 1990 | 2 |
| Terminator | Arnold Schwarzenegger | 1984 | 3 |
| Jurassic Park | Harrison Ford | 1992 | 4 |
+----------------+------------------------+------+--------------+
4 rows in set (0.00 sec)


8. Создайте пользователя командой CREATE USER julia@’%’ IDENTIFIED BY 'secret';

9. Предоставьте разрешения пользователю julia с помощью команды GRANT SELECT,INSERT,UPDATE,DELETE ON videos.* TO julia@’%’;

10. Выполните FLUSH PRIVILEGES; чтобы обновить привилегии.

11. Выполните  DESCRIBE videos; чтобы показать обзор записей в базе данных videos.

12. Вставьте еще одно видео:  INSERT INTO videos(registration,title,actor,year) VALUES (5,’The Last Stand’, ‘Arnold Schwarzenegger’, 2013);

13. Чтобы отобразить список всех записей, в которых значение поля актера установлено на Арни:  SELECT * FROM videos WHERE actor=‘Arnold Schwarzenegger’;

14. Выполните quit, чтобы закрыть интерфейс оболочки MySQL.

Бэкапы и восстановление  MariaDB

Чтобы сделать резервные копии MariaDB, вы можете использовать два подхода. Вы можете создать физическую резервную копию. В физической резервной копии у вас есть raw(сырая) копия каталогов и папок базы данных. Это резервное копирование быстрое и переносимое, но только для машин, использующих аналогичное аппаратное и программное обеспечение. Для создания физического резервного копирования сервис базы данных должен быть отключен или таблицы в базе данных должны быть заблокированы, чтобы предотвратить изменение данных во время резервного копирования.

В качестве альтернативы вы можете сделать логическое резервное копирование (далее просто резервное копирование). В резервном копировании структура базы данных извлекается путем запроса базы данных. Такое резервное копирование является относительно медленным потому что база данных должна быть доступна и преобразована в логический формат.

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

Для восстановления резервной копии первым делом вам надо узнать имя базы данных из файла резервной копии (в случае, если оно неизвестно). Вы можете открыть файл резервной копии с параметром less, потому что это читаемый файл. Узнав имя, убедитесь, что база данных, которую вы хотите восстановить существует, и, если это не так, то выполните mysql create databasename. Чтобы восстановить резервную копию, вы можете запустить команду mysqldump -u root -p databasename </root/databasename.dump.

Чтобы сделать резервное копирование базы данных, вы можете использовать команду mysqldump.
Если вы хотите создать резервную копию базы данных videos и записать ее, например, в файл /root/videos-db.dump, используйте следующую команду: mysqldump -u root -p videos --databases > /root/videos-db.dump. Вы также можете использовать команду mysqldump для создания резервной копии всех баз данных, выполнив mysqldump -u root -p --alldatabases --databases > /root/all-db.dump.

Для создания физических резервных копий рекомендуется использовать тома LVM. В LVM вы можете создать снапшот, который содержит фактическое состояние тома LVM на момент создания снапшота. Затем будет сделано само физическое резервное копирование из снапшота, а не из открытого тома LVM.

Снапшот LVM похож на фотографию логического тома LVM. Сделав резервную копию снапшота, вы обязательно получите стабильную резервную копию среды, в которой в настоящий момент нет открытых файлов. Чтобы создать моментальный снапшот тома базы данных, ее необходимо временно остановить. Грубо говоря, процедура создания моментального снапшота тома базы данных выглядит следующим образом:

1. В базе данных mariadb используйте команду FLUSH TABLES WITH READ LOCK;. Команда гарантирует, что никакие файлы не используются при создании снапшота. Эта команда закрывает все таблицы и блокирует все таблицы для всех баз данных с глобальной блокировкой чтения. Это удобный способ убедиться, что в базу данных ничего не записывается во время создания моментального снапшота на следующем шаге этой процедуры. Альтернативное решение - полностью остановить сервис mariadb с помощью systemctl stop mariadb и запустить ее снова после создания снапшота.

2. В другом окне терминала введите lvcreate -s -n lvdatabase-snap -L 1G /dev/vgname/lvdatabase. В этой команде обязательно используйте правильные имена тома и группы томов. Также обратите внимание на размер тома снимка. Как правило, 10% размера исходного тома считается достаточно большим, если предположить, что том снапшота будет удален в конце процедуры.

3. Теперь, когда снапшот создан, введите UNLOCK TABLES; чтобы снова запустить базу данных.

4. Запустите задание резервного копирования.

5. После завершения задания резервного копирования используйте lvremove, чтобы удалить том снапшота.

В упражнении 3 вы можете узнать, как создать физическую резервную копию базы данных.

Упражнение 3. Создание физической резервной копии базы данных MySQL.

1. Для начала узнайте, где хранится актуальная база данных. Для этого выполните mysqladmin -u root -p variable | grep datadir. Эта команда показывает каталог в файловой системе, где хранятся данные. Как правило, результатом является каталог /var/lib/mysql.

2. Выполните команду df /var/lib/mysql, чтобы узнать, какой том LVM используется для размещения этого расположения. (Эта команда будет работать, только если во время установки был создан том LVM для размещения физической базы данных.)

ПРИМЕЧАНИЕ. Для эффективного использования моментальных снимков убедитесь, что /var/lib/mysql находится на выделенном логическом томе. Если это не так, резервное копирование может оказаться излишне большим. В этом упражнении предполагается, что это так и что база данных mariadb находится в /dev/vgdata/lvmariadb.


3. Убедитесь, что в группе томов, в которой находится том базы данных, нераспределенное дисковое пространство все еще доступно, используя vgs vgname.

4. На этом этапе вам необходимо временно заморозить базу данных, чтобы никакие изменения не могли быть применены во время создания моментального снимка. Для этого подключитесь к базе данных в качестве пользователя root командой mysql -u root -p и введите FLUSH TABLES WITH READ LOCK;. Не закрывайте эту сессию, потому что она снимет блокировку!

5. В другом терминальном сеансе создайте снимок LVM. Следующая команда предполагает, что именем группы томов является vgdata, а именем тома LVM, на котором размещается база данных, является lvmariadb: lvcreate -L 2G -s -n lvmariadbsnapshot /dev/vgdata/lvmariadb.

6. Вернитесь к сеансу MariaDB и введите UNLOCK TABLES;, чтобы разблокировать таблицы.

7. Вернитесь в другой сеанс и смонтируйте снимок mkdir /mnt/snapshot; mount -o nouuid /dev/vgdata/lvmariadb-snapshot /mnt/snapshot.

8. Выполните tar -cvf /root/mariadb.tar /mnt/snapshot/lib/mysql для создания резервной копии.

9. После успешного создания резервной копии необходимо размонтировать и удалить снимок: umount /mnt/snapshot; lvremove /dev/vgdata/lvmariadb-snapshot.

Восстановление резервных копий

Восстановление резервной копии зависит от того, какой у вас тип копии - логическая или физическая. Чтобы восстановить логическую резервную копию, используйте команду типа mysql -u root -p videos < /root/videos-db.dump.

Чтобы восстановить физическую резервную копию, вы должны сначала остановить сервис mariadb, после чего вы можете использовать tar для восстановления резервной копии:

  1. systemctl stop mariadb
  2. rm -rf /var/lib /mysql/*
  3. tar xvf /root/mariadb.tar -C /

Убедитесь, что вы проверили содержимое файла архива перед восстановлением резервной копии.

Резюме

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


SQL

Добавить комментарий