Плагин MySQL Group Replication не найден в версии 5.7.19, 5.7.21

Я пытаюсь включить плагин MySQL для групповой репликации на MySQL 5.7.21, который должен быть доступен в 5.7 согласно документации ( https://dev.mysql.com/doc/refman/5.7/en/group-replication.html)

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper

Когда я пытаюсь включить плагин через MySQL:

$ mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/group_replication.so' (errno: 2 /usr/lib/mysql/plugin/group_replication.so: cannot open shared object file: No such file or directory)

Вывод моих плагинов в MySQL:

$ mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+
44 rows in set (0.01 sec)

Это содержимое каталога плагинов:

$ ls -lah /usr/lib/mysql/plugin/
total 644K
drwxr-xr-x 2 root root 4.0K Sep 26 23:24 .
drwxr-xr-x 3 root root 4.0K Sep 26 23:24 ..
-rw-r--r-- 1 root root  21K Jul 19 14:10 adt_null.so
-rw-r--r-- 1 root root 6.2K Jul 19 14:10 auth_socket.so
-rw-r--r-- 1 root root  44K Jul 19 14:10 connection_control.so
-rw-r--r-- 1 root root 107K Jul 19 14:10 innodb_engine.so
-rw-r--r-- 1 root root  79K Jul 19 14:10 keyring_file.so
-rw-r--r-- 1 root root 151K Jul 19 14:10 libmemcached.so
-rw-r--r-- 1 root root 9.7K Jul 19 14:10 locking_service.so
-rw-r--r-- 1 root root  11K Jul 19 14:10 mypluglib.so
-rw-r--r-- 1 root root 6.2K Jul 19 14:10 mysql_no_login.so
-rw-r--r-- 1 root root  55K Jul 19 14:10 rewriter.so
-rw-r--r-- 1 root root  56K Jul 19 14:10 semisync_master.so
-rw-r--r-- 1 root root  15K Jul 19 14:10 semisync_slave.so
-rw-r--r-- 1 root root  27K Jul 19 14:10 validate_password.so
-rw-r--r-- 1 root root  31K Jul 19 14:10 version_token.so

Это содержимое моего конфига:

кошка /etc/mysql/my.cnf

    [mysqld_safe]
    nice                                    = 0
    socket                                  = /var/run/mysqld/mysqld.sock

    [mysqld]
    basedir                                 = /usr
    bind_address                            = 123.45.67.89
    binlog_checksum                         = NONE
    binlog_format                           = ROW
    datadir                                 = /var/lib/mysql
    enforce_gtid_consistency                = ON
    expire_logs_days                        = 10
    general_log                             = 1
    general_log_file                        = /var/log/mysql/mysql.log
    gtid_mode                               = ON
    key_buffer_size                         = 8388608
    lc_messages_dir                         = /usr/share/mysql
    log_bin                                 = binlog
    log_error                               = /var/log/mysql/mysql_error.log
    log_slave_updates                       = ON
    long_query_time                         = 60
    loose-group_replication_bootstrap_group = OFF
    loose-group_replication_enforce_update_everywhere_checks= ON
    loose-group_replication_group_name      = 34dee7cd-d20d-4f59-9500-f56ada9a1abz
    loose-group_replication_group_seeds     = 123.45.67.88:33061,123.45.67.89:33061
    loose-group_replication_ip_whitelist    = 123.45.67.88,123.45.67.89
    loose-group_replication_local_address   = 123.45.67.89:33061
    loose-group_replication_recovery_use_ssl= 1
    loose-group_replication_single_primary_mode= OFF
    loose-group_replication_ssl_mode        = REQUIRED
    loose-group_replication_start_on_boot   = OFF
    master_info_repository                  = TABLE
    max_allowed_packet                      = 16M
    max_binlog_size                         = 100M
    max_connect_errors                      = 100000000
    pid-file                                = /var/run/mysqld/mysqld.pid
    port                                    = 3306
    query_cache_limit                       = 1M
    query_cache_size                        = 16M
    relay_log                               = my-project-prod-relay-bin
    relay_log_info_repository               = TABLE
    report_host                             = 123.45.67.88
    require_secure_transport                = ON
    server_id                               = 2
    skip_external_locking
    slow_query_log                          = 1
    slow_query_log_file                     = /var/log/mysql/mysql-slow-query.log
    socket                                  = /var/run/mysqld/mysqld.sock
    thread_cache_size                       = 8
    thread_stack                            = 192K
    tmpdir                                  = /tmp
    transaction_write_set_extraction        = XXHASH64
    user                                    = mysql

    [mysqldump]
    max_allowed_packet                      = 16M
    quick
    quote_names

    [mysql]
    no-auto-rehash

    [isamchk]
    key_buffer_size                         = 16M

    [client]
    port                                    = 3306
    socket                                  = /var/run/mysqld/mysqld.sock

    !includedir /etc/mysql/conf.d/

Мне интересно, если я использую неправильную версию MySQL или есть какой-то другой шаг, необходимый для установки плагина групповой репликации?

2 ответа

Решение

FWIW Я загрузил 5.7.19 Edihttps сообщества://dev.mysql.com/doc/refman/5.7/en/group-replication.htmltion, чтобы запустить его в песочнице, и я подтверждаю, что файл.so репликации группы присутствует.

Я получил плагин для загрузки с помощью инструкции INSTALL PLUGIN, как вы и пытались.

Сначала мне нужно было добавить некоторые параметры конфигурации, которые описаны в https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html

server_id=1 # or any value unique among your replica set
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

И, конечно, перезапустите mysqld после редактирования настроек конфигурации.

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

Чтобы узнать, используете ли вы Community Edition, запустите mysql:

> mysql -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-log MySQL Community Server (GPL)
.....

Чтобы вручную установить Community Edition 5.7 (или другие архивные версии здесь: https://downloads.mysql.com/archives/community/), выполните следующие команды:

sudo apt-get install libaio1
sudo apt-get install libmecab2
curl -OL https://downloads.mysql.com/archives/get/file/mysql-common_5.7.20-1ubuntu16.04_amd64.deb
curl -OL https://downloads.mysql.com/archives/get/file/mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb
curl -OL https://downloads.mysql.com/archives/get/file/mysql-client_5.7.20-1ubuntu16.04_amd64.deb
curl -OL https://downloads.mysql.com/archives/get/file/mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-common_5.7.20-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-client_5.7.20-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb   

Наткнулся на ту же проблему. Ответ Билла и ссылка на то, почему он не включен в стандартную версию, указали мне правильное направление, тогда я нашел ответ Луиса здесь. Связанное руководство показывает, что после установки mysql-apt-config apt-get install mysql-server по умолчанию выбирает версию сообщества. Это позволило мне продолжить установку плагина, хотя у меня была дополнительная ошибка:

ERROR 1123 (HY000): Can't initialize function 'group_replication'; Plugin initialization function failed.

Когда я проверил /var/log/mysql/error.log, я увидел, что он не работает, потому что:

2018-07-04T14:19:36.039987Z 5 [ERROR] For the creation of replication channels the master info and relay log info repositories must be set to TABLE

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

РЕДАКТИРОВАТЬ: Хотя вышеперечисленное работает, это создает проблемы при использовании роли Geerlingguy Ansible, поэтому вместо установки Сервера совместной работы я поставил плагин непосредственно со следующим кодом Ansible:

    - name: Provision the MySQL group_replication plugin
  copy:
    src: group_replication.so
    dest: /usr/lib/mysql/plugin/group_replication.so
    mode: 0644

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

Другие вопросы по тегам