Установка, настройка, бэкапы в MariaDB
База данных важный элемент, к примеру, для такого стека как LAMP (Linux, Apache, MySQL, PHP). В RedHat (CentOS) MariaDB установлен по умолчанию.
В этой этой статье вы узнаете, как установить MariaDB на CentOS 7, как выполнять основные задачи администрирования и как делать бэкапы и восстановление баз.
Базовая конфигурация MariaDB
Сначала установим MariaDB и выполним базовые настройки. В этом разделе вы узнаете, как это сделать и как сделать небольшие изменения в файле конфигурации /etc/my.cnf.
Чтобы установить MariaDB, выполните следующие действия:
- Введите yum install mariadb mariadb-server mariadb-test -y.
- Введите systemctl start mariadb; systemctl enable mariadb, чтобы запустить и включить сервис базы данных.
- Убедитесь, что mariadb запущен, выполнив systemctl status mariadb. Эта команда покажет текущее состояние, включая последние сообщения, которые были зарегистрированы. В листинге 1 показано, как это выглядит.
После установки 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, чтобы сохранить и применить внесенные изменения.
MariaDB можно использовать локально или по сети. Преимущества есть у обоих вариантов. Если MariaDB доступен по сети, легко настроить стек сервисов, где база работает на одном сервере, а связанные сервисы работают где-то еще. Этот вараинт предлагает максимально возможную производительность.
Если же вы хотите максимально повысить безопасность, рассмотрите возможность полного изолирования БД от сети. Это значит, что все сервисы, использующие БД, доступны на одном сервере.
Чтобы определить, будет ли MariaDB использовать сеть, вы измените несколько параметров в файле конфигурации /etc/my.cnf (который является основным файлом конфигурации MariaDB). В листинге 3 показан пример содержимого этого файла.
В разделе [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 всего одной строкой:
В упражнении 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.
При работе с MariaDB важно знать разницу между базами данных, таблицами и записями. Таблица 1 суммирует их.
Таблица 1. Элементы базы данных
Название | Описание |
Database (База данных) | Совокупность данных, состоящая из разных таблиц. Сотрудники могут быть именем базы данных. |
Table (Таблица) | Классы элементов, которые используются в базе данных. В базе данных сотрудника вы можете иметь такие таблицы, как статус занятости и адресная книга. В базе данных таблицы могут быть взаимосвязаны. В каждой базе данных у вас должна быть хотя бы одна таблица. |
Fields (Поля) | Тип информации, которая создается в таблице. В таблице адресной книги у вас есть такие поля, как, например, название, улица, город. |
Record (Запись) | Определенный набор данных хранится в таблице. Например, у каждого клиента есть запись в базе данных адресной книги, в которой содержатся записи об имени и улице. |
Value (Значение) | Конкретные значения, которые хранятся в поле. Например, поле имени в таблице адресной книги может иметь значение Линда Джонс. Выполнение простых задач администрирования базы данныхДаже если вы являетесь администратором Linux, полезно иметь базовые знания о командах администрирования базы данных. Это не делает вас администратором базы данных, но помогает выполнять основные задачи по настройке. Чтобы начать работу с базами данных, вам необходимо сначала подключиться к службе баз данных. Для этого используйте команду mysql: mysql -u root -h localhost -p. (Даже если вы используете MariaDB, многие команды все еще являются командами mysql.) Эта команда регистрирует вас как пользователя root на сервере localhost, а затем запрашивает пароль. После входа в систему, как показано в упражнении 1, вы входите в интерактивную оболочку MySQL, где будете работать с базами данных. Вы уже видели команду show databases;, которая отображает список доступных баз данных. Работа с базами данных выглядит как работа с каталогами. Администратор создает базу данных, затем начинает использовать эту базу и затем вводит в неё контент. Команда USE используется как команда cd из оболочки bash. Там, где cd позволяет легко переключаться между каталогами, команда USE позволяет переключаться между базами данных. Попробуйте, например, следующие команды (после входа в среду оболочки MySQL от имени root):
Листинг 5 В MariaDB, как и в MySQL, вы будете использовать язык структурированных запросов (SQL) для манипулирования данными в базе данных. Основные команды позволяют создавать, читать, обновлять и удалять. Эти команды также называются операциями CRUD: create, select, update, и delete. Перед вставкой данных в базу данных вам необходимо создать хотя бы одну таблицу. Для этого используйте CREATE TABLE, а затем имя таблицы, которую вы хотите добавить, например CREATE TABLE addressbook(name VARCHAR(40), street VARCHAR(40));. При определении таблицы вы также определяете записи, которые вы хотите добавить в таблицу, в дополнение к типу данных, который будет храниться в этой таблице. В этом примере это просто тип VARCHAR, который позволяет хранить 40 байт переменных данных. Если вы работаете с базой данных, которая уже была определена, или если вам нужно проверить, что вы только что создали, вам нужно выяснить атрибуты таблицы. Для этого используйте DESCRIBE, в случае с адресной книгой DESCRIBE addressbook;. Команды даст результат, как в листинге 6, который сначала показывает, как создать таблицу, а затем показывает, как получить информацию о полях, хранящихся в этой таблице. После того, как вы выяснили, какие поля необходимы для создания данных в таблице, вы можете использовать команду 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 вы можете использовать разные операторы: |
<> | Не равно |
>= | Больше или равно |
/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 для размещения физической базы данных.) 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 SQL Источник |