Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Усовершенствование MySQL с помощью Tarantool

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

Если возникнут трудности с основами Tarantool, см. руководство для начинающих или описание модели данных. Для устранения неполадок в ходе этого руководства полезен лог-файл replicatord.log в каталоге /var/log. Также можно просмотреть лог-файл экземпляра example.log в каталоге /var/log/tarantool.

Руководство предназначено для CentOS 7.5 и MySQL 5.7. Для выполнения руководства требуется установить systemd и MySQL.

Настройка MySQL

В этом разделе выполняется настройка MySQL и создание базы данных.

  1. Сначала установите необходимые пакеты в CentOS:

    $ yum -y install git ncurses-devel cmake gcc-c++ boost boost-devel wget unzip nano bzip2 mysql-devel mysql-lib
  2. Склонируйте пакет репликации Tarantool-MySQL из GitHub:

    $ git clone https://github.com/tarantool/mysql-tarantool-replication.git
  3. Соберите репликатор с помощью cmake:

    $ cd mysql-tarantool-replication$ git submodule update --init --recursive$ cmake .$ make
  4. Репликатор будет работать как демон systemd под именем replicatord, поэтому отредактируйте файл службы systemd (replicatord.service) в репозитории mysql-tarantool-replication:

    $ nano replicatord.service

    Отредактируйте следующую строку:

    ExecStart=/usr/local/sbin/replicatord -c /usr/local/etc/replicatord.cfg

    Здесь нужно заменить расширение .cfg на .yml:

    ExecStart=/usr/local/sbin/replicatord -c /usr/local/etc/replicatord.yml
  5. Затем скопируйте файлы из репозитория replicatord в другие необходимые каталоги:

    $ cp replicatord /usr/local/sbin/replicatord$ cp replicatord.service /etc/systemd/system
  6. Войдите в консоль MySQL и создайте пример базы данных (в зависимости от существующей установки, пользователь может отличаться от root):

    mysql -u root -pCREATE DATABASE menagerie;QUIT
  7. Загрузите пример данных из MySQL. Данные будут загружены в корневой каталог. После этого установите их из терминала.

    cdwget http://downloads.mysql.com/docs/menagerie-db.zipunzip menagerie-db.zipcd menagerie-dbmysql -u root -p menagerie < cr_pet_tbl.sqlmysql -u root -p menagerie < load_pet_tbl.sqlmysql menagerie -u root -p < ins_puff_rec.sqlmysql menagerie -u root -p < cr_event_tbl.sql
  8. Войдите в консоль MySQL и подготовьте данные для использования с репликатором Tarantool. На этом шаге выполняется:

    • добавление идентификатора
    • изменение имени поля во избежание конфликта
    • уменьшение количества полей При работе с реальными данными этот шаг требует наибольшей настройки.
    mysql -u root -pUSE menagerie;ALTER TABLE pet ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;ALTER TABLE pet CHANGE COLUMN 'name' 'name2' VARCHAR(255);ALTER TABLE pet DROP sex, DROP birth, DROP death;QUIT
  9. Пример данных готов. Отредактируйте конфигурационный файл MySQL для использования с репликатором:

    $ cd$ nano /etc/my.cnf

    Обратите внимание, что путь к файлу my.cnf для MySQL может отличаться от вышеуказанного. Задайте следующие параметры:

    [mysqld]binlog_format = ROWserver_id = 1log-bin = mysql-bininteractive_timeout = 3600wait_timeout = 3600max_allowed_packet = 32Msocket = /var/lib/mysql/mysql.sockbind-address = 127.0.0.1[client]socket = /var/lib/mysql/mysql.sock
  10. После выхода из nano перезапустите mysqld:

    $ systemctl restart mysqld

Установка и настройка Tarantool

В этом разделе выполняется установка Tarantool и настройка спейсов для репликации.

  1. Перейдите на страницу загрузки и следуйте инструкциям по установке.

  2. Установите утилиту tt CLI.

  3. Создайте новое окружение tt в текущем каталоге с помощью команды tt init.

  4. В каталоге /etc/tarantool/instances.available/mysql создайте конфигурационные файлы экземпляра tt:

    • config.yaml — задаёт следующую конфигурацию
app:  file: 'myapp.lua'groups:  group001:    replicasets:      replicaset001:        instances:          instance001:            iproto:              listen:              - uri: '127.0.0.1:3301'
- `instances.yml` — задаёт экземпляры для запуска в текущем окружении
instance001:
- `myapp.lua` — содержит Lua-скрипт с приложением для загрузки
box.schema.user.grant('guest', 'read,write,execute', 'universe')local function bootstrap()    if not box.space.mysqldaemon then        s = box.schema.space.create('mysqldaemon')        s:create_index('primary',                { type = 'tree', parts = { 1, 'unsigned' }, if_not_exists = true })    end    if not box.space.mysqldata then        t = box.schema.space.create('mysqldata')        t:create_index('primary',                { type = 'tree', parts = { 1, 'unsigned' }, if_not_exists = true })    endendbootstrap()
Подробнее см. в разделе [Конфигурация](../../../configuration#configuration).

5. В каталоге instances.enabled созданного окружения tt создайте символическую ссылку (mysql) на каталог из предыдущего шага:

```bash$ ln -s /etc/tarantool/instances.available/mysql mysql```

6. Затем запустите Lua-программу с помощью tt — утилиты командной строки Tarantool:

```bash$ tt start mysql```

7. Подключитесь к экземпляру Tarantool:

```bash$ tt connect mysql:instance001```

8. Убедитесь, что целевые спейсы успешно созданы:

```bashmysql:instance001> box.space._space:select()```В конце вывода будут указаны спейсы `mysqldaemon` и `mysqldata`.Теперь нажмите "CTRL+C", чтобы выйти.

Настройка репликатора

MySQL и Tarantool настроены. Можно переходить к настройке репликатора.

  1. Отредактируйте файл replicatord.yml в основном каталоге tarantool-mysql-replication:

    nano replicatord.yml
  2. Измените весь файл следующим образом. Не забудьте добавить свой пароль MySQL и задать соответствующего пользователя:

    mysql:    host: 127.0.0.1    port: 3306    user: root    password:    connect_retry: 15 # secondstarantool:    host: 127.0.0.1:3301    binlog_pos_space: 512    binlog_pos_key: 0    connect_retry: 15 # seconds    sync_retry: 1000 # millisecondsmappings: - database: menagerie   table: pet   columns: [ id, name2, owner, species ]   space: 513   key_fields:  [ 0 ]   # insert_call: function_name   # update_call: function_name   # delete_call: function_name
  3. Скопируйте replicatord.yml в каталог, где systemd ищет его:

    $ cp replicatord.yml /usr/local/etc/replicatord.yml
  4. Затем запустите репликатор:

    $ systemctl start replicatord
  5. Подключитесь к экземпляру Tarantool:

    $ tt connect mysql:instance001
  6. Выполните выборку из спейса mysqldata. Реплицированные из MySQL данные выглядят следующим образом:

    mysql:instance001> box.space.mysqldata:select()---- - [1, 'Fluffy', 'Harold', 'cat']  - [2, 'Claws', 'Gwen', 'cat']  - [3, 'Buffy', 'Harold', 'dog']  - [4, 'Fang', 'Benny', 'dog']  - [5, 'Bowser', 'Diane', 'dog']  - [6, 'Chirpy', 'Gwen', 'bird']  - [7, 'Whistler', 'Gwen', 'bird']  - [8, 'Slim', 'Benny', 'snake']  - [9, 'Puffball', 'Diane', 'hamster']

Проверка репликации

В этом разделе выполняется добавление записи в MySQL и проверка того, что запись реплицирована в Tarantool. Для этого:

  1. Выйдите из экземпляра Tarantool с помощью CTRL-D.

  2. Добавьте запись в MySQL:

    mysql -u root -pUSE menagerie;INSERT INTO pet(name2, owner, species) VALUES ('Spot', 'Brad', 'dog');QUIT
  3. В терминале подключитесь к экземпляру Tarantool:

    $ tt connect mysql:instance001
  4. Чтобы просмотреть реплицированные данные в Tarantool, выполните следующую команду:

    mysql:instance001> box.space.mysqldata:select()