-
Установить MySQL
-
Создание кластера InnoDB
Установите MySQL, используя Zip-архив
Уведомление
Для работы MySQL Community 5.7 Server на платформе Windows требуется распространяемый пакет Microsoft Visual C++ 2013. Перед установкой проверьте, поддерживает ли его системная среда.
-
Выберите место установки
Уведомление
Выберите место установки и убедитесь, что в пути установки нет пробелов. Местоположение этой установки выбрано в C:\MySQL.
-
Создать файл конфигурации
my.ini
, и воляmy.ini
Хранится в каталоге установки MySQL[mysqld] # 设置MySQL安装路径 basedir=C:/MySQL # 设置MySQL数据保存目录 datadir=C:/MySQL/data
-
Вручную инициализируйте каталог данных с помощью mysqld
-
Описание параметров инициализации
-
--initialize
Инициализация с этой опцией будет генерировать случайный пароль, рекомендуется комбинировать--console
возможность использовать -
--initialize-insecure
Инициализация с этой опцией не будет генерировать никаких паролей. -
--defaults-file
Указывает файл конфигурации, читаемый при инициализации каталога данных mysql.Эта опция должна быть вmysqld
после командыпервый
-
-
Инициализировать каталог данных
Уведомление
--initialize
Инициализация опции генерирует случайный пароль в последней строкеmysqld --defaults-file=C:/MySQL/my.ini ----initialize --console
-
-
Запустите сервер MySQL
mysqld --console
-
Подключиться к серверу MySQL
-
использовать
--initialize
Возможность инициализировать каталог данных, используйте случайный пароль для входа на серверmysql -u root -p
-
использовать
--initialize-insecure
возможность инициализировать каталог данных, используйте--skip-password
Возможность подключения к серверуmysql -u root --skip-password
-
-
После подключения смените пароль root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'
Уведомление
Обычно подключение к серверу с использованием 127.0.0.1 разрешается для учетной записи localhost. Соединение с сервером MySQL может быть обеспечено
CREATE USER 'username'@'hostname' IDENTIFIED BY 'new_password'
Создание кластера InnoDB
-
Введение в кластер InnoDB
Кластер MySQL InnoDB предоставляет набор решений высокой доступности для MySQL.MySQL ShellВключенный AdminAPI позволяет легко настраивать и управлять кластером, состоящим как минимум из 3 экземпляров сервера MySQL. Каждый экземпляр сервера MySQL запускает модуль MySQL Group Replication, который обеспечивает механизм репликации данных кластера InnoDB со встроенными возможностями аварийного переключения.
Уведомление
InnoDB Cluster не поддерживает MySQL NDB Cluster. Кластер NDB опирается наNDBМеханизм хранения, а также многие программы NDB Cluster не поставлялись с MySQL Server 5.7. Кроме того, mysqld, поставляемый с MySQL Server 5.7, нельзя использовать с кластером NDB.
На следующей диаграмме показано, как MySQL InnoDB Cluster использует эти технологии для совместной работы.
Использование AdminAPI
MySQL Shell предоставляет функцию AdminAPI, предоставляемую AdminAPI.dba
Глобальные переменные и методы позволяют развертывать, настраивать и управлять кластерами InnoDB. Например, используйте метод dba.createCluster() для создания кластера InnoDB.
Уведомление
MySQL Shell позволяет вам подключаться к серверу через сокеты, но AdminAPI требует TCP-подключения к экземпляру сервера. Не используйте подключения на основе сокетов в AdminAPI.
MySQL Shell предоставляет интерактивную справку по AdminAPI. Чтобы получить список всех доступных команд dba, используйте метод dba.help(). Для получения справки по конкретному методу используйте формат object.help('имя метода').
-
Создайте кластер InnoDB
- Sandbox deployment: Если вы тестируете InnoDB Cluster перед производственным развертыванием, функция «Песочница» позволяет вам быстро создать кластер на вашем локальном компьютере.
- Production deployment: Если вы хотите использовать InnoDB Cluster в производственной среде, вам необходимо настроить все экземпляры MySQL Server, а затем развернуть сервер на машине.
Уведомление
Развертывание в песочнице не подходит для развертывания в полной производственной среде.
-
Требования к среде кластера InnoDB Cluster
-
InnoDB Cluster использует модуль групповой репликации, и вы должны гарантировать, что ваши серверы должны соответствовать тем же требованиям. AdminAPI предоставляет
dba.checkInstanceConfiguration()
Убедитесь, что экземпляр соответствует требованиям групповой репликации,dba.configureLocalInstance()
Настройте экземпляры в соответствии с требованиями групповой репликации.Уведомление
При развертывании в песочнице экземпляры настраиваются на автоматическое выполнение этих условий.
Основные требования к групповой репликации
- InnoDB Storage Engine, данные должны использовать транзакционный механизм хранения InnoDB.
- Первичные ключи, чтобы гарантировать, что каждая таблица, использующая групповую репликацию, должна иметь определенный первичный ключ или его эквивалент.
- Сеть IPv4, модуль групповой репликации MySQL поддерживает только сеть IPv4.
- Производительность сети, групповая репликация требует, чтобы экземпляры серверов находились в непосредственной близости друг от друга в кластерной среде, поскольку на функциональность групповой репликации сильно влияют сетевые задержки и пропускная способность.
конфигурация сервера
- Двоичный журнал активен, активировать двоичный журнал,
--log-bin[=log_file_name]
. - Ведомые обновления зарегистрированы, серверу необходимо обновить двоичный журнал через приложение групповой репликации,
--log-slave-updates
. - Двоичный формат строки журнала, формат групповой репликации основан на строке для последовательного распространения изменений между серверами в группе,
--binlog-format=row
- Глобальные идентификаторы транзакций включены, групповая репликация использует глобальные идентификаторы транзакций для точного отслеживания совершенных транзакций на каждом экземпляре сервера, что позволяет делать выводы о том, что эти серверы выполняют транзакции, которые могут конфликтовать с транзакциями, совершенными в другом месте.
--gtid-mode=on
. - Хранилища информации о репликации, настройки
--master-info-repository=TABLE
а также--relay-log-info-repository=TABLE
. Групповая репликация требует записи информации о главном узле и информации о подчиненном узле в системные таблицы.mysql.slave_master_info
а такжеmysql.slave_relay_log_info
системная таблица. Такой подход гарантирует, что подключаемый модуль групповой репликации имеет согласованные возможности репликации и управления транзакциями для репликации метаданных. - Извлечение набора операций записи, набор
--transaction-write-set-extraction=XXHASH64
Для сбора строк и записи в двоичный журнал сервер также собирает записи. Наборы записей основаны на первичном ключе каждой строки и представляют собой упрощенное и компактное представление разметки, которая однозначно идентифицирует измененные строки. Затем этот тег используется для обнаружения коллизий. - Многопоточные приложения, участники групповой репликации могут быть настроены как многопоточные приложения, что позволяет применять транзакции параллельно. настраивать
--slave-parallel-workers=N
(N определяет количество потоков параллельного приложения),--slave-preserve-commit-order=1
а также--slave-parallel-type=LOGICAL_CLOCK
. Групповая репликация опирается на механизм согласованности вокруг принятия и применения совершенных транзакций в одном и том же порядке всеми участвующими членами, поэтому он должен быть установлен--slave-preserve-commit-order=1
Убедитесь, что окончательная фиксация параллельной транзакции находится в том же порядке, что и исходная транзакция. Наконец, чтобы определить, какие транзакции могут выполняться параллельно, подчиненный сервер должен содержать родительскую информацию о генерирующей транзакции.
-
Shell MySQL используется для настройки кластера InnoDB, а скрипт конфигурации требует доступа к версии Python 2.7.
-
-
способ установки
То, как пользователи устанавливают InnoDB Cluster, зависит от используемого метода развертывания. Для развертывания в песочнице установите компоненты кластера на один компьютер. Развертывание в песочнице — это локальное развертывание одного компьютера, поэтому установку необходимо выполнить только один раз на локальном компьютере. Для производственных развертываний установите компоненты на каждый компьютер.
-
Sandbox deployment
Вы можете создавать кластеры InnoDB и управлять ими с помощью оболочки MySQL, которая включает AminAPI. Перед производственным развертыванием вы можете использовать развертывание в песочнице. InnoDB Cluster — лучший способ изучить кластер. MySQL Shell имеет встроенное развертывание Sandbox, которое можно использовать для создания правильно настроенного кластера InnoDB Cluster.
Уведомление
Развертывание в песочнице подходит только для развертывания и тестирования на локальном компьютере. В производственной среде экземпляры MySQL Server развернуты на различных хостах в сети.
Развернуть экземпляр песочницы
Глобальная переменная dba в AdminAPI, предоставляемом MySQL Shell, обеспечивает функцию развертывания Sandbox, которую вы можете использовать
dba.deploySandboxInstance()
Создайте и разверните экземпляр Sandbox.Запустите оболочку MySQL
> mysqlsh
Помимо включения режима SQL, MySQL Shell также предоставляет два режима языка сценариев: Javascript и Python. В этом примере кластер Sandbox InnoDB создается в основном в режиме Javascript. В MySQL Shell это можно сделать через
\js
,\py
а также\sql
Команда для переключения режимов, по умолчанию в режиме Javascript.msyql-js> dba.deploySandboxInstance(3310)
Уведомление
В режимах Javascript и Python нет необходимости завершать команду точкой с запятой.
Параметр, переданный в deploySandboxInstance(), — это номер порта MySQL, и экземпляр MySQL будет прослушивать соединения с порта 3310. После выполнения команды вам будет предложено ввести пароль root экземпляра.
Уведомление
Каждый экземпляр имеет свой пароль. В тестовых средах рекомендуется использовать как можно более простые и одинаковые пароли, но по возможности использовать разные пароли для каждого экземпляра в производственных развертываниях.
Чтобы развернуть дополнительные экземпляры Sandbox, повторите приведенную выше команду:
msyql-js> dba.deploySandboxInstance(3320) msyql-js> dba.deploySandboxInstance(3330)
Создать кластер InnoDB для песочницы
Следующим шагом является подключение к главному серверу MySQL Server (Сервер — это экземпляр, который содержит данные для репликации другими экземплярами.) для создания кластера InnoDB. В этом примере экземпляр Sandbox пуст, поэтому вы можете выбрать любой экземпляр.
Используйте MySQL Shell для подключения к главному экземпляру, в данном случае к экземпляру на порту 3310:
mysql-js> \connect root@localhost:3310
\connect
это оболочка MySQLshell.connect()
Ярлыки для методов:mysql-js> shell.connect('root@localhost:3310')
После подключения AdminAPI может записывать в файл конфигурации этого экземпляра. Это отличается от использования производственного развертывания, когда вам необходимо подключиться к удаленному экземпляру и запустить приложение MySQL Shell локально на экземпляре, прежде чем AdminAPI сможет записать файл конфигурации экземпляра.
использовать
dba.createCluster()
метод для создания кластера InnoDB с подключенным в данный момент экземпляром в качестве мастера:mysql-js> var cluster = dba.createCluster('testCluster')
createCluster()
Настройте метаданные InnoDB Cluster для выбранного экземпляра с текущим подключенным экземпляром в качестве основного экземпляра.createCluster()
Метод возвращает созданный кластер, который в приведенном выше примере присваивается переменной cluster.createCluster()
Аргумент состоит в том, чтобы дать кластеру InnoDB имя.Добавить экземпляр в кластер InnoDB
Транзакции, выполняемые ведущим экземпляром, выполняются повторно при добавлении подчиненного экземпляра.
Поскольку в примере данные главного сервера пусты. В производственной среде главный экземпляр содержит много данных.Рекомендуется использовать программное обеспечение для резервного копирования базы данных, чтобы создать резервную копию существующих данных и восстановить их в других экземплярах, чтобы уменьшить задержку, вызванную репликацией данных из подчиненной базы данных.
Добавьте второй экземпляр InnoDB Cluster:
mysql-js> cluster.addInstance('root@localhost:3320')
Запросить пароль пользователя root.
Добавить третий экземпляр
mysql-js> cluster.addInstance('root@localhost:3330')
намекать
Если экземпляр является экземпляром Sandbox, можно указать только экземпляр localhost.
Конфигурация кластера хранения
Чтобы добавить экземпляр Sandbox в кластер, конфигурация, необходимая для кластера InnoDB, должна быть сохранена в файле конфигурации каждого экземпляра.
использовать
dba.configureLocalInstance('instance')
Конфигурация экземпляра может быть сохранена в файле конфигурации каждого экземпляра.mysql-js> \connect instance mysql-js> dba.configureLocalInstance('instance')
Уведомление
Если dba.configureLocalInstance() не выполняется успешно, экземпляр не сможет присоединиться к кластеру после следующего перезапуска.
Повторите вышеуказанные операции, чтобы убедиться, что конфигурация каждого экземпляра Sandbox сохранена.Для этого примера вам нужно настроить хранилище на портах 3310, 3320 и 3330.
mysql-js> \connect root@localhost:port_number) mysql-js> dba.configureLocalInstance('root@localhost:port_number)
Чтобы проверить, был ли создан кластер, используйте функцию status() экземпляра кластера.
После развертывания кластера вы можете настроить MySQL Router для обеспечения высокой доступности.
-
Развертывание производства
В производственной среде экземпляры сервера MySQL, составляющие кластер InnoDB, работают на нескольких хостах как часть сети, а не на одном компьютере.
На следующей диаграмме показан сценарий, который вы используете в этом разделе:
Уведомление
В отличие от развертывания в песочнице, для производственного развертывания необходимо подключиться к каждой машине и использовать AdminAPI, предоставляемый MySQL Shell.
dba.configureLocalInstance()
Сохраните конфигурацию для каждого экземпляра. Вы также можете контролировать доступ к кластеру через MySQL Shell.Права пользователя
Учетная запись пользователя экземпляра управления пользователями не обязательно должна быть учетной записью root, но ей необходимо назначить полное разрешение на чтение администратора MySQL и записать ее в таблицу метаданных кластера (SUPER, GRANT OPTION, CREATE, DROP, так далее.). Предоставьте your_user необходимые разрешения для управления кластером InnoDB:
GRANT ALL PRIVILEGES ON mysql_innodb_cluster_metadata.* TO your_user@'%' WITH GRANT OPTION; GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, \ CREATE USER ON *.* TO your_user@'%' WITH GRANT OPTION; GRANT SELECT ON *.* TO your_user@'%' WITH GRANT OPTION;
Если требуются только операции чтения, можно использовать учетную запись с более ограниченными привилегиями. Дайте разрешение your_user на мониторинг кластера InnoDB:
GRANT SELECT ON mysql_innodb_cluster_metadata.* TO your_user@'%'; GRANT SELECT ON performance_schema.global_status TO your_user@'%'; GRANT SELECT ON performance_schema.replication_applier_configuration TO your_user@'%'; GRANT SELECT ON performance_schema.replication_applier_status TO your_user@'%'; GRANT SELECT ON performance_schema.replication_applier_status_by_coordinator TO your_user@'%'; GRANT SELECT ON performance_schema.replication_applier_status_by_worker TO your_user@'%'; GRANT SELECT ON performance_schema.replication_connection_configuration TO your_user@'%'; GRANT SELECT ON performance_schema.replication_connection_status TO your_user@'%'; GRANT SELECT ON performance_schema.replication_group_member_stats TO your_user@'%'; GRANT SELECT ON performance_schema.replication_group_members TO your_user@'%'; GRANT SELECT ON performance_schema.threads TO your_user@'%' WITH GRANT OPTION;
Настроить имя хоста
Производственные экземпляры, составляющие кластер, работают на разных машинах, поэтому каждая машина должна иметь уникальное имя хоста и иметь возможность разрешать имена хостов других машин в кластере, на котором запущены экземпляры сервера. Если это не так, вы можете
- Настройте каждый компьютер для сопоставления IP-адреса каждого другого компьютера с именем хоста.
- Настройка DNS-сервисов
- Буду
report_host
Каждый экземпляр настроен как доступный извне адрес
Чтобы убедиться, что имя хоста сервера MySQL настроено правильно, выполните следующий запрос, чтобы увидеть, как экземпляр сообщает свой собственный адрес другим серверам, и попытайтесь подключиться к этому серверу MySQL с другого мастера, используя возвращенный адрес:
SELECT coalesce(@@report_host, @@hostname);
подробный журнал
При использовании производственного развертывания настройка подробного ведения журнала для MySQL Shell может помочь вам найти и решить любые проблемы, возникающие при подготовке экземпляра сервера к тому, чтобы он стал частью кластера InnoDB. использовать
--log-level
Настройки опции:ps> mysqlsh --log-level=DEBUG3
Помимо включения ведения журнала MySQL Shell, вы можете просматривать выходные данные после каждого вызова API:
mysql-js> dba.verbose=2
Это наиболее полный вывод вызова AdminAPI. Доступные варианты вывода:
- 0 или OFF рекомендуется, когда не проводится поиск и устранение неисправностей, это значение такжеПо умолчанию.
- 1 или ON будет выводить подробный контент каждый раз, когда он вызывается
- 2 будет отлаживать данные с полным содержимым.
Проверить конфигурацию экземпляра
Перед развертыванием рабочего сервера вы можете использовать
dba.checkInstanceConfiguration()
Функция проверяет, соответствует ли MySQL на каждом экземпляре конфигурации кластера InnoDB.Эта операция не проверяет никаких данных на экземпляре.Демонстрируются следующие данные:mysql-js> dba.checkInstanceConfiguration('ic@ic-1:3306') Please provide the password for 'ic@ic-1:3306': Validating instance... The instance 'ic-1:3306' is not valid for Cluster usage. The following issues were encountered: - Some configuration options need to be fixed. +----------------------------------+---------------+----------------+--------------------------------------------------+ | Variable | Current Value | Required Value | Note | +----------------------------------+---------------+----------------+--------------------------------------------------+ | binlog_checksum | CRC32 | NONE | Update the server variable or restart the server | | enforce_gtid_consistency | OFF | ON | Restart the server | | gtid_mode | OFF | ON | Restart the server | | log_bin | 0 | 1 | Restart the server | | log_slave_updates | 0 | ON | Restart the server | | master_info_repository | FILE | TABLE | Restart the server | | relay_log_info_repository | FILE | TABLE | Restart the server | | transaction_write_set_extraction | OFF | XXHASH64 | Restart the server | +----------------------------------+---------------+----------------+--------------------------------------------------+ Please fix these issues , restart the server and try again. { "config_errors": [ { "action": "server_update", "current": "CRC32", "option": "binlog_checksum", "required": "NONE" }, { "action": "restart", "current": "OFF", "option": "enforce_gtid_consistency", "required": "ON" }, { "action": "restart", "current": "OFF", "option": "gtid_mode", "required": "ON" }, { "action": "restart", "current": "0", "option": "log_bin", "required": "1" }, { "action": "restart", "current": "0", "option": "log_slave_updates", "required": "ON" }, { "action": "restart", "current": "FILE", "option": "master_info_repository", "required": "TABLE" }, { "action": "restart", "current": "FILE", "option": "relay_log_info_repository", "required": "TABLE" }, { "action": "restart", "current": "OFF", "option": "transaction_write_set_extraction", "required": "XXHASH64" } ], "errors": [], "restart_required": true, "status": "error" } mysql-js>
Повторите этот процесс для каждого экземпляра в запланированном кластере, чтобы проверить, подходит ли экземпляр для запуска кластера.
Экземпляр конфигурации
вы можете в соответствии с
dba.checkInstanceConfiguration()
Проверьте отчет, чтобы настроить вышеуказанные параметры в файле конфигурации, чтобы убедиться, что служба базы данных соответствует требованиям кластера InnoDB. Вы также можете пройтиdba.configureLocalInstance()
Экземпляры автоматически настраиваются в соответствии с требованиями кластера. Пример данных, когда:mysql-js> dba.configureLocalInstance('root@localhost:3306') Please provide the password for 'root@localhost:3306': Please specify the path to the MySQL configuration file: /etc/mysql/mysql.conf.d/mysqld.cnf Validating instance... The configuration has been updated but it is required to restart the server. { "config_errors": [ { "action": "restart", "current": "OFF", "option": "enforce_gtid_consistency", "required": "ON" }, { "action": "restart", "current": "OFF", "option": "gtid_mode", "required": "ON" }, { "action": "restart", "current": "0", "option": "log_bin", "required": "1" }, { "action": "restart", "current": "0", "option": "log_slave_updates", "required": "ON" }, { "action": "restart", "current": "FILE", "option": "master_info_repository", "required": "TABLE" }, { "action": "restart", "current": "FILE", "option": "relay_log_info_repository", "required": "TABLE" }, { "action": "restart", "current": "OFF", "option": "transaction_write_set_extraction", "required": "XXHASH64" } ], "errors": [], "restart_required": true, "status": "error" } mysql-js>
Создать кластер
Используйте MySQL Shell для подключения к основному серверу базы данных и создайте кластер на этом сервере.
shell> mysqlsh --uri username@hostname:port mysql-js> var cluster = dba.createCluster('prodCluster') A new InnoDB cluster will be created on instance 'ic@ic-1:3306'. Creating InnoDB cluster 'prodCluster' on 'ic@ic-1:3306'... Adding Seed Instance... Cluster successfully created. Use Cluster.addInstance() to add MySQL instances. At least 3 instances are needed for the cluster to be able to withstand up to one server failure.
Добавьте другие экземпляры в кластер InnoDB:
mysql-js> cluster.addInstance('username@hostname:port')
Уведомление
На втором этапе экземпляр сервера был добавлен в кластер, но изменения метаданных кластера InnoDB действительны только для текущего соединения. Вы не должны использовать dba.configureLocalInstance() для экземпляра, чтобы убедиться, что конфигурация экземпляра сохранена на сервере для использования после следующего перезапуска.
-
Развертывание с групповой репликацией
Если ваш экземпляр сервера уже имеет групповую репликацию и вы хотите использовать ее для создания кластера, добавьте
adoptFromGR
параметры, переданныеdba.createCluster()
. Созданный кластер InnoDB будет соответствовать тому, работает ли группа репликации как база данных с одним мастером или как база данных с несколькими мастерами.намекать
Если экземпляр групповой репликации содержит таблицы, созданные механизмом MyISAM, преобразуйте все такие таблицы в механизм хранения InnoDB перед созданием кластера.
mysql-js> var cluster = dba.createCluster('prodCluster', {adoptFromGR: true}); A new InnoDB cluster will be created on instance 'root@gr-member-2:3306'. Creating InnoDB cluster 'prodCluster' on 'root@gr-member-2:3306'... Adding Seed Instance... Cluster successfully created. Use cluster.addInstance() to add MySQL instances. At least 3 instances are needed for the cluster to be able to withstand up to one server failure.