Устраняем типичные ошибки в mysql

Шаг 1: Установка Apache на Ubuntu 16.10 или 17.04

1. Начнём с установки веб-сервера Apache из официальных репозиториев Ubuntu. Это делается командой:

sudo apt install apache2 vim
# ИЛИ
sudo apt-get install apache2 vim

2. После успешной установки веб-сервера Apache, убедитесь следующими командами, что демон запущен и к какому порту он привязан (по умолчанию apache прослушивает 80 порт):

sudo systemctl status apache2.service

sudo ss -tlpn

3. Установка ServerName для подавления предупреждения

Далее мы добавим одну строку в файл /etc/apache2/apache2.conf чтобы убрать сообщение с предупреждением. Хотя это и безвредно, если вы не установили ServerName на глобальном уровне, вы будете получать следующее сообщение о синтаксической ошибке в конфигурации Apache:

sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Откройте главный конфигурационный файл текстовым редактором:

sudo gedit /etc/apache2/apache2.conf

Если вы настраиваете систему без графического интерфейса, вместо gedit используйте, например, vim:

sudo vim /etc/apache2/apache2.conf

Внутри, в конце файла добавьте директиву ServerName, указывающую на ваше основное доменное имя. Если у вас нет связанного с вашим сервером доменного имени, вы можете использовать внешний IP сервера:

. . .
ServerName server_domain_или_IP

Если вы забыли внешний IP сервера, то проверить его можно так:

curl suip.biz/ip/

Для локального веб-сервера можно сделать следующую запись:

ServerName localhost

Когда закончите, сохраните и закройте файл.

Далее, проверьте ошибки синтаксиса набрав:

sudo apache2ctl configtest
Syntax OK

Поскольку мы добавили глобальную директиву ServerName, предупреждения больше нет.

Для того, чтобы изменения вступили в силу, перезапустите Apache:

sudo systemctl restart apache2

4. Для проверки работы веб-сервера apache, откройте в браузере IP адрес сервера. Если вы устанавливаете на локальном компьютере, но наберите localhost. Должна появиться страница по умолчанию для веб-сервера, примерно как на скриншоте:

5. Следующей командой мы добавляем службу веб-сервера в автоматическую автозагрузку при каждом запуске компьютера:

sudo systemctl enable apache2

Чем MariaDB лучше MySQL

MariaDB поддерживает больше систем хранения (Storage Engines).

В дополнении к стандартным MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE, и MERGE движкам хранения, в MariaDB также имеются следующие:

  • ColumnStore, система хранения, ориентированная на столбцы, оптимизирована для хранилища данных.
  • MyRocks, система хранения с большим сжатием, добавлена с 10.2 версии
  • Aria, замена для MyISAM с улучшенным кэшированием.
  • FederatedX (замена для Federated)
  • OQGRAPH.
  • SphinxSE.
  • TokuDB.
  • CONNECT.
  • SEQUENCE.
  • Spider.
  • Cassandra.

MariaDB имеет множество различных улучшений и оптимизаций в скорости обработки данных.

MariaDB дополнена новыми расширениями и функциями.

Подробности: https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/

Восстановление новой базы данных

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

Пример:

mysql> CREATE DATABASE customers_db;

2. Далее следует загрузить файл дампа SQL с помощью команды «mysql»:

$ mysql -u  -p  <  /(Путь к файлу)/ 

Пример:

$ mysql -u root -pSeCrEt customers_db < /(Путь к файлу)/customers_db_backup.sql

3. В случае, когда дамп был сделан до того, поможет следующая команда:

$ gunzip <  | mysql -u  -p 

Пример:

$ gunzip < customers_db_backup.sql.gz | mysql -u root -pSeCrEt customers_db

Следовательно, этими командами можно осуществить восстановление базы данных MySQL без особых трудностей.

5. Поддержка движков хранения данных

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

  • Aria;
  • XtraDB — улучшенная версия InnoDB;
  • FederatedX — улучшенная версия Federated;
  • OQGRAPH;
  • SphinxSE;
  • IBMDB2I;
  • TokuDB;
  • Cassandra;
  • CONNECT;
  • SEQUENCE;
  • Spider;
  • ColumnStore;
  • MySIAM.

Напомню, что оригинальная MySQL поддерживает по умолчанию только три типа таблиц — Aria, MySIAM и InnoDB. Это важный аспект в выборе MySQL или MariaDB.

ODBC connector

Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget.

а) на CentOS / Red Hat:

yum install wget

б) на Ubuntu / Debian:

apt-get install wget

После установки wget перейдем в каталог /tmp:

cd /tmp

Открываем браузер и заходим на MariaDB и выбираем ODBC connector, а также нашу операционную систему, например:

* в данном случае мы загрузим коннектор для CentOS 8.

Ниже на этой же страницы мы увидим ссылку на скачивание нужного нам коннектора. Копируем данную ссылку:

С помощью wget и скопированной ссылки загружаем на сервер коннектор:

wget https://dlm.mariadb.com/1269825/Connectors/odbc/connector-odbc-3.1.10/mariadb-connector-odbc-3.1.10-centos8-amd64.tar.gz

Распаковываем его:

tar zxvf mariadb-connector-odbc-*.tar.gz

И копируем библиотеки в каталог /usr/lib64:

cp mariadb-connector-odbc-*-amd64/lib64/mariadb/lib* /usr/lib64/

После скачанный архив и распакованный каталог можно удалить:

rm -rf mariadb-connector-odbc-*

Шаг 4: Установка phpMyAdmin в Ubuntu 16.10 или 17.04

14. Опционально, если вы хотите администрировать MariaDB из веб-браузера, установите phpMyAdmin.

sudo apt install php-gettext phpmyadmin

Во время установки phpMyAdmin выберите веб сервер apache2:

Ответьте «Нет» на запрос о настройки с dbconfig-common:

15. После завершения установки phpMyAdmin выполните следующее.

Для загрузки конфигурации phpMyAdmin веб-сервером Apache откройте файл

sudo gedit /etc/apache2/apache2.conf
# ИЛИ
sudo vim /etc/apache2/apache2.conf

И добавьте в самый конец строку

Include /etc/phpmyadmin/apache.conf

Сохраните и закройте файл. Перезапустите сервер:

sudo systemctl restart apache2

Теперь phpMyAdmin будет доступен по адресу https://IP_адрес_вашего_сервера/phpmyadmin/

А для локального сервера по адресу http://localhost/phpmyadmin/

Рекомендуется продолжить знакомство с настройкой веб-сервера Apache на Ubuntu и посмотреть инструкции:

  • Файлы настроек веб-сервера Apache в Ubuntu
  • Как настроить виртуальные хосты веб-сервера Apache на Ubuntu 16.10 или 17.04

Vagrant

Это такая вспомогательная программа для VirtualBox. Хотя, работает и с другими системами виртуализации. Позволяет легко и быстро автоматизированно создавать виртуальные машины. Можно создать наподобие той, которую мы уже создали. Работать с Vagrant необходимо из командной строки.

Пишу это здесь просто для информации, что такое есть.

Я пробовал Vagrant. Да, действительно программа делает своё дело. Но мне показалось это лишним и не совсем тем, что надо. Мои соображения на этот счёт:

  • Такое полезно тому, кто создаёт виртуальные машины пачками. Не мой случай. Возможно, пока.
  • Виртуальные машины при помощи Vagrant создаются на основе готовых образов (боксов), список которых есть на официальном сайте. Они в случае необходимости автоматически загружаются. Честно говоря, я не сильно доверяю этим боксам. Считаю, что безопаснее создать своё. Тем более это не сложно.

В принципе, боксы для Vagrant — это созданные и специально настроенные виртуальные машины VirtualBox. Мы, вот, создали свою виртуальную машину. Её, в теории, можно немного допилить, чтобы использовать в качестве бокса Vagrant. Бокс может быть локальным.

Я когда начал изучать информацию по Vagrant, то меня напугали все эти инструкции в интернете. В каждой автор начинает разбирать конфигурационный файл виртуальной машины, и это поначалу выглядит дико и совсем непросто. Спешу успокоить новичков! Этот файл создается автоматически самим Vagrant-ом. Вы (при желании) можете внести в него дополнительные параметры, а можете и не вносить! Машина просто получит настройки по умолчанию. Часто этого достаточно.

Далее простой пример, как можно создать с помощью Vagrant тот же веб-сервер на базе Debian 8.

Перед тем как начать скачиваем Vagrant с официального сайта и устанавливаем его в любую папку

Важно, чтобы в пути к этой папке не было русских символов

Открываем консоль в Windows:

Скачиваем нужный бокс и убеждаемся, что он попал в список доступных локально боксов:

Для первой команды название бокса я нашёл в списке по запросу «debian 8 lemp». Вот информация по нему, где автор советует перед использованием бокса выполнить установку плагина:

Такая команда выполняется единожды, если ранее данный плагин ещё не инсталлировался. Плагин позволяет автоматически устанавливать в виртуальную машину дополнения гостевой ОС.

Создаём каталог и переходим в него, например:

Инициализация виртуальной машины:

При этом у нас появляется в этом каталоге файл . Он содержит конфигурацию будущей машины. Как я уже сказал, настройки можно оставить по умолчанию. Устанавливаем виртуальную машину:

Всё! Через некоторое время машина будет готова.

При установке машины автоматически устанавливаются все актуальные обновления Debian. При каждом старте монтируется общая папка.

Для входа по SSH используем адрес 127.0.0.1, порт 2222, пользователя , пароль .

Таким образом, всего несколько команд в консоли и у нас готовая для работы виртуальная машина.

Последующий запуск машины из консоли происходит быстро:

В VirtualBox машину тоже видно:

Настройка php

Теперь настроим подключение из php. Мы рассмотрим 2 способа подключения — с помощью odbc_connect и PDO. 

Предварительно, создадим каталог, в который разместим тестовый скрипт для подключения к базе:

mkdir -p /var/www/php

odbc_connect

Ставим расширение php-odbc (а также сам php, если его нет на сервере).

а) для CentOS / Red Hat:

yum install php php-odbc

б) для Ubuntu / Debian:

apt-get install php php-odbc

После установки создадим скрипт для проверки подключения:

vi /var/www/php/db.php

<?php
    $driver = «DRIVER=MariaDB»;
    $server = «127.0.0.1»;
    $db_name = «my_db»;
    $port = «3306»;
    $user = «odbc_user»;
    $password = «odbc_password»;
    $ocon = odbc_connect(«{$driver};Server={$server};Database={$db_name};Port={$port};String Types=Unicode», $user, $password);
    $result = odbc_exec($ocon, «SELECT * FROM users LIMIT 10»);
    while ($mass = odbc_fetch_array ($result)) {
        print_r($mass);
    }
    odbc_close($ocon);
?>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:

<?php
    $ocon = odbc_connect(«ODBC», «odbc_user», «odbc_password»);
    $result = odbc_exec($ocon, «SELECT * FROM users LIMIT 10»);
    while ($mass = odbc_fetch_array ($result)) {
        print_r($mass);
    }
    odbc_close($ocon);
?>

* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:

  1. ODBC — название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

PDO

Ставим расширение php-pdo (а также сам php, если его нет на сервере).

а) для CentOS / Red Hat:

yum install php php-pdo

б) для Ubuntu / Debian:

apt-get install php php-pdo

После установки создадим скрипт для проверки подключения:

vi /var/www/php/db.php

<?php
    $pcon = new PDO(«odbc:Driver=MariaDB;Server=127.0.0.1;Database=my_db;»,»odbc_user»,»odbc_password»);
 
    try {
        $result = $pcon->query(«SELECT * FROM users LIMIT 10»);
        $mass = $result->fetchAll(PDO::FETCH_ASSOC);
        print_r($mass);
    } catch (Exception $e){
        throw new PDOException(var_export($pcon->errorInfo(),true));
    }
?>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:

<?php
    $pcon = new PDO(«odbc:ODBC»,»odbc_user»,»odbc_password»);
    try {
        $result = $pcon->query(«SELECT * FROM users LIMIT 10»);
        $mass = $result->fetchAll(PDO::FETCH_ASSOC);
        print_r($mass);
    } catch (Exception $e){
        throw new PDOException(var_export($pcon->errorInfo(),true));
    }
?>

* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:

  1. odbc:ODBC — способ соединения с базой и название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

Проверка запроса

После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:

php /var/www/php/db.php

Мы должны получить следующий результат:

Array
(
    => 1
    => Дмитрий
    => admin
)
Array
(
    => 2
    => Оля
    => superuser
)
Array
(
    => 3
    => Антон
    => operator
)

Подключение к MariaDB с помощью ODBC настроено.

Запуск базы данных MariaDB

Как вы видите ниже, модуль сервера базы данных MariaDB загружен, но еще не запущен.

# systemctl status mariadb
? mariadb.service - MariaDB database server
 Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
 Active: inactive (dead)

Запустите сервер MySQL с помощью systemctl, как показано ниже.

# systemctl start mariadb

Проверьте состояние systemctl, чтобы убедиться, что сервер базы данных MariaDB запущен успешно.

# systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)                                                                 
  Drop-In: /etc/systemd/system/mariadb.service.d                                                                                                              
           └─nofile.conf                                                                                                                                      
   Active: active (running) since Tue 2017-10-03 13:56:53 MSK; 1 months 7 days ago
 Main PID: 840 (mysqld_safe)                                                                                                                                  
   CGroup: /system.slice/mariadb.service                                                                                                                      
           ├─ 840 /bin/sh /usr/bin/mysqld_safe --basedir=/usr                                                                                                 
           └─1121 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log...

Если вы программист, и используете PHP, вы найдете это полезным: 3 метода подключения к MySQL с помощью PHP с примерами кода

Траблшутинг

show master status возвращает пустой вывод

Если

SHOW MASTER STATUS;

возвращает пустой результат, проверьте, включены ли бинарные логи:

SHOW BINARY LOGS;

Если на выходе получаем ошибку:

ERROR 1381 (HY000) at line 1: You are not using binary logging

то смотрим информацию ниже.

ERROR 1381 (HY000) at line 1: You are not using binary logging

Ошибка возвращается при запросе статистики по бинарным логам:

SHOW BINARY LOGS;

Не включили бинарные логи

Проверьте корректно ли задали параметр log_bin — важно, чтобы он был определён в секции

Last_IO_Error: error connecting to master…

Если SHOW SLAVE STATUS выводим примерно следующую ошибку:

*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 10.1.0.11
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 419
               Relay_Log_File: mysql-relay-bin.000005
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 
                   Last_Error: 
                 Skip_Counter: 
          Exec_Master_Log_Pos: 419
              Relay_Log_Space: 1281
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 2003
                Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60  retries: 86400  message: Can't connect to MySQL server on '10.1.0.11' (113)
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 11

то у slave-сервера отсутствует возможность соединения с master-сервером. Причины:

  1. некорректные авторизационные данные пользователя репликации;
  2. закрыт порт MySQL для исходящих соединений на slave-сервере;
  3. закрыт порт MySQL для входящих соединений на master-сервере.

Проверяем соединение:

$ telnet 10.1.0.11 3306
Trying 10.1.0.11...
telnet: connect to address 10.1.0.11: No route to host

Добавим правило на slave-сервере

iptables -I OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT

Добавим правило на master-сервере:

iptables -I INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

Проверим возможность соединения:

$ telnet 10.1.0.11 3306
Trying 10.1.0.11...
Connected to 10.1.0.11.
Escape character is '^]'.
V
5.5.47-MariaDB-log
                  0P$_6/&�}K;%Gt7Po\aQmysql_native_password

Дефрагментация

Необходима для освобождения пространства, занимаемого файлом базы. Это связано с тем, что при удалении элементов, сама база не уменьшается.

Посмотреть, какое количество пространства удастся высвободить можно командой:

Get-MailboxDatabase -Status | ft Name, DatabaseSize, AvailableNewMailboxSpace

Пример ответа:

Name        DatabaseSize    AvailableNewMailboxSpace
—-        ————    ————————
Base1       686.4 GB        286.4 MB
Base2       170 GB          69.42 GB

* где DatabaseSize — текущий размер базы; AvailableNewMailboxSpace — пространство, которое можно освободить при дефрагментации.

Саму оптимизацию можно выполнить двумя способами:

  1. Офлайн дефрагментация.
  2. Создание новой базы с последующим переносом в нее всех элементов; после, базу можно отключить и или удалить. Это более надежный вариант, так как не приведет к большому простою и позволит выполнить работу постепенно.

В текущем подразделе мы рассмотрим первый способ.

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

Если используется база на основе группы DAG, сначала необходимо .

Операция дефрагментации выполняется из Exchange Management Shell с применением утилиты eseutil.

Сначала переходим в каталог хранения базы данных, например:

cd C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1

Выполняем команду для отмонтирования базы:

Dismount-Database Base1

* напомним, что это приведет к отключению базы и приостановки обслуживания.

Запускаем дефрагментацию:

eseutil /d Base1.edb /t \\share\base1_tmp.edb

* где опция d — имя файла базы; t — путь до временного файла на момент дефрагментации, если его не указать, временный файл будет создан в каталоге с основным файлом и, в таком случае, нужно убедиться, что на диске достаточно свободного места (110% от размер дефрагментируемого файла).

После завершения операции, снова подключаем базу:

Mount-Database Base1

Создание пользователя и выдача прав

Рассмотрим два варианта создания учетных записей в СУБД MySQL/MariaDB.

1. С помощью команды GRANT.

Данный метод позволяет одной командой сразу и создать пользователя, и дать ему права. Но, начиная с MySQL 8, она возвращает ошибку — разработчики запретили ее использование и сначала требуется создать пользователя (с помощью ).

Синтаксис:

> GRANT <тип привилегий> ON <объект> TO <пользователь> <дополнительные опции>;

Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:

> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

Описание команды:

ALL PRIVILEGES: предоставляет полные права на использование данных.*.* : права предоставляются на все базы и все таблицы.dbuser: имя учетной записи.localhost: доступ для учетной записи будет предоставлен только с локального компьютера.password: пароль, который будет задан пользователю.WITH GRANT OPTION: будут предоставлены дополнительные права на изменение структуры баз и таблиц.

2. С помощью команды CREATE USER.

Данный метод является универсальным. Он позволяет создать пользователя в системе без каких либо прав. После права назначаются командой GRANT.

Пример создания учетной записи:

> CREATE USER ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

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

> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’;

Сброс пароля для root

При необходимости, мы можем сбросить пароль для суперпользователя mysql. Для этого необходимо запустить сервер баз данных в безопасном режиме и ввести команду на смену пароля.

Для начала необходимо остановить сервис:

systemctl stop mysql

… или:

systemctl stop mariadb

Создаем каталог /var/run/mysqld и зададим для него нужные права:

mkdir -p /var/run/mysqld

chown mysql:mysql /var/run/mysqld

* в некоторых системах данного каталога может не быть, однако, для безопасного режима mysql он необходим.

Запускаем в безопасном режиме СУБД:

mysqld_safe —skip-grant-tables &

Запускаем оболочку sql — система не потребует пароль:

mysql -uroot

Выполняем запрос FLUSH PRIVILEGES:

> FLUSH PRIVILEGES;

Меняем пароль .

Выходим из оболочки:

> quit

Уничтожаем процесс, который запустили ранее:

kill %1

После, запускаем mysql в нормальном режиме:

systemctl start mysql

… или:

systemctl start mariadb

2. Частота релизов

Политика Oracle — выпускать обновления безопасности для всех своих продуктов каждые три месяца. Но выход новой версии MySQL запланирован каждые два месяца. Это часто приводит к тому, что обновления продукта и обновления безопасности не синхронизируются.

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

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

Смена пароля

Команды отличаются в зависимости от версии СУБД.

MySQL

Версия 5.7.6 и более современная:

> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘New_Password’;

Версия 5.7.5 и древнее:

> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);

* посмотреть версию СУБД можно командой mysql -V.

MariaDB

В MariaDB команда для смены пароля одна, независимо от версии:

> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);

* в данном примере будет задан пароль New_Password для пользователя root.

MySQL < 8 или MariaDB

Первый раз пароль задается из командной строки операционной системы (для MySQL/MariaDB):

> mysqladmin -u root password

Для смены пароля root необходимо выполнить команду в оболочке mysql по инструкции, описанной выше.

MySQL 8 и выше

Пароль создается автоматически при установке системы. Его можно посмотреть командой:

grep ‘password’ /var/log/mysqld.log

Мы увидим что-то на подобие:

2021-08-16T20:14:13.173577Z 6 A temporary password is generated for root@localhost: oi25?wznro%W

* где oi25?wznro%W — пароль для пользователя root.

Заходим в оболочку sql с помощью данного пароля:

mysql -p

и .

Шаг 2. Настройка кластера MariaDB в режиме Master — Master

Если одностороннего режима копирования данных нам недостаточно, продолжаем настройку.

Настройка на сервере Slave

На втором сервере откроем конфигурационный файл MariaDB:

vi /etc/my.cnf.d/server.cnf

и допишем в него следующее:

log_bin=mysql-bin
log_error=mysql-bin.err
binlog-ignore-db=information_schema,mysql,test

Перезагрузим демон для применения настроек:

systemctl restart mariadb

Теперь подключимся к MariaDB:

mysql -uroot -p

и создадим учетную запись для репликации с первого сервера:

MariaDB > GRANT replication slave ON *.* TO «replmy»@»192.168.166.155» IDENTIFIED BY «password»;

* replmy: имя учетной записи (можно использовать любое). 192.168.166.155: IP-адрес первого сервера, с которым будем реплицировать данные. password: пароль для учетной записи (желательно, сложный).

Выведем состояние работы мастера:

MariaDB > show master status\G

Как и при настройке первого сервера, запомните или запишите значения для File и Position.

Настройка на сервере Master

Теперь подключитесь к первому серверу.

И зайдем в командную оболочку MariaDB:

mysql -uroot -p

введем такую команду:

MariaDB > change master to master_host = «192.168.166.156», master_user = «replmy», master_password = «password», master_log_file = «mysql-bin.000003», master_log_pos = 245;

* 192.168.166.156: IP-адрес моего второго сервера. replmy: учетная запись для репликации, которая была создана на втором сервере. password: пароль для учетной записи, также был сделан на втором сервере. mysql-bin.000003: имя файла, которое мы должны были записать или запомнить (у вас может быть другим). 245: номер позиции, с которой необходимо начать репликацию (также должны были записать или запомнить ранее).

Теперь запустим вторичный сервер для репликации:

MariaDB > start slave;

И проверим состояние репликации:

MariaDB > SHOW SLAVE STATUS\G

Отключитесь от СУРБД:

MariaDB > \q

Настройка кластера в режиме Master — Master закончена.

Теперь остается окончательно убедиться, что репликация работает. Внесите изменения на первом сервере — они должны попасть на второй. И наоборот, при внесении изменений на втором сервере, они должны попадать на первый.

Что такое MariaDB

MariaDB – это система управления базами данных (СУБД), которая основывается на MySQL и во многом с ней совместима.

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

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

MariaDB совместима с форматами баз данных MySQL, но есть некоторые нюансы. Если вы переносите базы данных через экспорт/импорт (например, с помощью .SQL файла), то переносимые таким образом базы данных будут полностью совместимы между любыми версиями и не требуют каких-либо дальнейших действий. Тем не менее, если вы установили MariaDB поверх MySQL, то есть MariaDB использует файлы баз данных от MySQL, то нужно учитывать совместимость:

  • MariaDB 10.2 совместима с предыдущими версиями файлов данных MariaDB, а также с MySQL 5.6 и MySQL 5.7, но не совместима с MySQL 8.0.
  • MariaDB 10.1 совместима с предыдущими версиями файлов данных MariaDB, а также с MySQL 5.6.

Дополнительная информация: https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/

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

Часто используемые команды

Управление процессами

Запуск MariaDB:

sudo service mariadb start

или

sudo /etc/init.d/mysql start

Остановка MariaDB:

sudo service mariadb stop

или

sudo /etc/init.d/mysql stop

Перезапуск MariaDB:

sudo service mariadb restart

или

sudo /etc/init.d/mysql restart

Статус MariaDB:

sudo service mariadb status

или

sudo /etc/init.d/mysql status

принудительно остановить

sudo killall -9 mysqld

Автозагрузка

Добавить MariaDB в автозагрузку:

sudo systemctl enable mariadb

Удалить MariaDB из автозагрузки:

sudo systemctl disable mariadb

Читаем логи

Только если вы включали логи по нашей статье в разделе — 

tail -10 /var/log/mysql/mysql.log
tail -10 /var/log/mysql/mysql_error.log

У меня всё!

Поделиться публикацией

Была ли вам полезна статья? Есть возможность

поддержать проект.

Заключение

Вот так относительно просто настраивается обычная master — slave репликация mysql. Подобным же образом настраивается и master-master репликация, но на практике она очень нестабильно работает. Я пробовал в свое время, но в итоге отказался, так как надоело ее чинить и исправлять ошибки. Для полноценного кластера с мультизаписью лучше использовать какие-то специализированные решения типа Percona XtraDB Cluster.

Кстати, он же может заменить и текущую конфигурацию, если сделать его из двух нод и писать только в одну. Разрешив ему работать при выходе из строя реплики, получится примерно то же самое, что и в статье. Но смысла в этом особо нет, так как предложенная мной конфигурация настраивается проще и быстрее. Плюс, это типовое решение для любого mysql сервера.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Что даст вам этот курс:

  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: