美文网首页
MySQL ( MGR ) 10 - 现有的复制组迁移到Prox

MySQL ( MGR ) 10 - 现有的复制组迁移到Prox

作者: 轻飘飘D | 来源:发表于2021-02-07 18:55 被阅读0次
    1. 克隆 MySQL ( MGR ) 01 后的VM & 修改配置(本次为 214节点)
    [root@xag200 ~]# hostname
    xag214
    
    [root@xag200 ~]# cat /etc/hostname
    xag214
    
    [root@xag200 ~]# cat /etc/sysconfig/network
    NETWORKING=yes
    NOZEROCONF=yes
    HOSTNAME=xag214
    
    [root@xag200 ~]# cat /etc/hosts
    ...
    192.168.40.211 xag211 xag211
    192.168.40.212 xag212 xag212
    192.168.40.213 xag213 xag213
    192.168.40.214 xag214 xag214
    
    [root@xag200 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33
    。。。
    IPADDR="192.168.40.211"
    。。。
    
    [root@xag200 ~]# reboot
    
    1. 安装mysql客户端,用于在本机连接到ProxySQL的管理接口
    [root@xag214 src]# cat /etc/yum.repos.d/mariadb.repo
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.3/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    
    安装mysql-clinet客户端
    [root@ProxySQL-node1 ~]# yum install -y MariaDB-client
    

    3.下载

    [root@xag214 src]# pwd
    /usr/local/src
    
    wget https://github.com/sysown/proxysql/releases/download/v2.0.16/proxysql-2.0.16-1-centos7.x86_64.rpm
    
    1. 安装 ProxySQL
    [root@xag214 src]# yum install -y perl-DBI perl-DBD-MySQL
    [root@xag214 src]# yum install -y gnutls
    [root@xag214 src]# rpm -ivh proxysql-2.0.16-1-centos7.x86_64.rpm
    
    or
    -----------------------------------------------------------------------------------------------------
    cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
    [proxysql_repo]
    name= ProxySQL YUM repository
    baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever
    gpgcheck=1
    gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key
    EOF
    
    yum install proxysql-2.0.16
    ------------------------------------------------------------------------------------------------------
    # 查看相应安装文件路径,有哪些文件
    [root@xag214 src]# rpm -ql proxysql
    /etc/logrotate.d/proxysql
    /etc/proxysql.cnf
    /etc/systemd/system/proxysql-initial.service
    /etc/systemd/system/proxysql.service
    /usr/bin/proxysql
    /usr/share/proxysql/tools/proxysql_galera_checker.sh
    /usr/share/proxysql/tools/proxysql_galera_writer.pl
    
    
    1. 启动 ProxySQL
    [root@xag214 src]# systemctl start proxysql.service
    or
    service proxysql start
    
    # 查看是否启动
    [root@xag214 src]# netstat -anlp | grep proxysql
    tcp        0      0 0.0.0.0:6032            0.0.0.0:*               LISTEN      1467/proxysql       
    tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      1467/proxysql       
    
    [root@xag214 src]# ss -lntup | grep proxysql
    tcp    LISTEN     0      128       *:6032                  *:*                   users:(("proxysql",pid=1467,fd=39))
    tcp    LISTEN     0      1024      *:6033                  *:*                   users:(("proxysql",pid=1467,fd=38))
    tcp    LISTEN     0      1024      *:6033                  *:*                   users:(("proxysql",pid=1467,fd=37))
    tcp    LISTEN     0      1024      *:6033                  *:*                   users:(("proxysql",pid=1467,fd=36))
    tcp    LISTEN     0      1024      *:6033                  *:*                   users:(("proxysql",pid=1467,fd=33))
    
    
    #check the ProxySQL version
    [root@xag214 src]# proxysql --version
    ProxySQL version 2.0.16-54-g96bfd0c, codename Truls
    
    6032 是 ProxySQL 的管理端口号,
    6033是对外服务的端口号 
    ProxySQL 的用户名和密码都是默认的 admin
    
    1. Stopping ProxySQL
    service proxysql stop
    
    Or 
    alternatively via the Admin interface:
    
     $ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
     Admin> proxysql stop
    

    7.初始化Proxysql,将之前的proxysql数据都删除
    Reinitializing ProxySQL from the config file (after first startup the DB file is used instead of the config file):

    systemctl start proxysql-initial
    # or
    service proxysql-initial start
    
    or
    ----------------------------------------------------------------------------------------------------
    mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
    
    delete from scheduler ;  
    delete from mysql_servers;      
    delete from mysql_users;      
    delete from mysql_query_rules;      
    delete from mysql_group_replication_hostgroups ;
    
    LOAD MYSQL VARIABLES TO RUNTIME;
    SAVE MYSQL VARIABLES TO DISK;
          
    LOAD MYSQL SERVERS TO RUNTIME;   
    SAVE MYSQL SERVERS TO DISK;
          
    LOAD MYSQL USERS TO RUNTIME;      
    SAVE MYSQL USERS TO DISK;
          
    LOAD SCHEDULER TO RUNTIME;
    SAVE SCHEDULER TO DISK;
          
    LOAD MYSQL QUERY RULES TO RUNTIME;
    SAVE MYSQL QUERY RULES TO DISK;
    -----------------------------------------------------------------------------------------------------
    
    1. 管理员登录 ProxySQL
    [root@xag214 src]# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
    
    Admin> show databases;
    +-----+---------------+-------------------------------------+
    | seq | name          | file                                |
    +-----+---------------+-------------------------------------+
    | 0   | main          |                                     |
    | 2   | disk          | /var/lib/proxysql/proxysql.db       |
    | 3   | stats         |                                     |
    | 4   | monitor       |                                     |
    | 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
    +-----+---------------+-------------------------------------+
    
    有五个库: main、disk、stats 、monitor 和 stats_history 
    main: 内存配置数据库,即 MEMORY,表里存放后端 db 实例、用户验证、路由规则等信息。main 库中有如下信息
    
    库下的主要表: 
    mysql_servers: 后端可以连接 MySQL 服务器的列表 
    mysql_users: 配置后端数据库的账号和监控的账号。 
    mysql_query_rules: 指定 Query 路由到后端不同服务器的规则列表。
    
    注: 表名以 runtime_开头的表示 ProxySQL 当前运行的配置内容,不能通过 DML 语句修改。
    
    只能修改对应的不以 runtime 开头的表,然后 “LOAD” 使其生效,“SAVE” 使其存到硬盘以供下次重启加载。 
    disk :持久化的磁盘的配置 
    stats: 统计信息的汇总 
    monitor:一些监控的收集信息,比如数据库的健康状态等 
    stats_history: 这个库是 ProxySQL 收集的有关其内部功能的历史指标
    
    Admin> show tables;
    +----------------------------------------------------+
    | tables                                             |
    +----------------------------------------------------+
    | global_variables                                   |
    | mysql_aws_aurora_hostgroups                        |
    | mysql_collations                                   |
    | mysql_firewall_whitelist_rules                     |
    | mysql_firewall_whitelist_sqli_fingerprints         |
    | mysql_firewall_whitelist_users                     |
    | mysql_galera_hostgroups                            |
    | mysql_group_replication_hostgroups                 |
    | mysql_query_rules                                  |
    | mysql_query_rules_fast_routing                     |
    | mysql_replication_hostgroups                       |
    | mysql_servers                                      |
    | mysql_users                                        |
    | proxysql_servers                                   |
    | restapi_routes                                     |
    | runtime_checksums_values                           |
    | runtime_global_variables                           |
    | runtime_mysql_aws_aurora_hostgroups                |
    | runtime_mysql_firewall_whitelist_rules             |
    | runtime_mysql_firewall_whitelist_sqli_fingerprints |
    | runtime_mysql_firewall_whitelist_users             |
    | runtime_mysql_galera_hostgroups                    |
    | runtime_mysql_group_replication_hostgroups         |
    | runtime_mysql_query_rules                          |
    | runtime_mysql_query_rules_fast_routing             |
    | runtime_mysql_replication_hostgroups               |
    | runtime_mysql_servers                              |
    | runtime_mysql_users                                |
    | runtime_proxysql_servers                           |
    | runtime_restapi_routes                             |
    | runtime_scheduler                                  |
    | scheduler                                          |
    +----------------------------------------------------+
    
    1. 查看是否MGR集群节点信息
    SELECT a.member_id,a.member_host,member_port,member_state
    ,if(b.variable_name is not null,'PRIMARY','SECONDDARY') as MEMBER_ROLE 
    FROM performance_schema.replication_group_members a left join performance_schema.global_status b
    on b.variable_name='group_replication_primary_member' and b.variable_value=a.member_id;
    
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | member_id                            | member_host | member_port | member_state | MEMBER_ROLE |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | 2116c7e9-63c9-11eb-a1ba-000c299e2211 | xag211      |        3306 | ONLINE       | PRIMARY     |
    | 2126c7e9-63c9-11eb-a1ba-000c299e2212 | xag212      |        3306 | ONLINE       | SECONDDARY  |
    | 2136c7e9-63c9-11eb-a1ba-000c299e2213 | xag213      |        3306 | ONLINE       | SECONDDARY  |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    
    
    1. 在proxysql节点中添加主机
    INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'xag211',3306);
    INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'xag212',3306);
    INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'xag213',3306);
    
    1. 在proxysql配置mysql_group_replication_hostgroups表:
    INSERT INTO mysql_group_replication_hostgroups(
    writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup
    ,active,max_writers,writer_is_also_reader,max_transactions_behind
    ) values (2,4,3,1,1,1,0,100);
    
    字段名                  描述
    writer_hostgroup        包含作者的所有成员的主机组的id
    backup_writer_hostgroup 在多主模式下运行有多个写入节点,
                             如果这些节点的数量大于max_writers,则额外节点位于该备份写入组中
    reader_hostgroup         包含read_only中所有成员的主机组的id
    offline_hostgroup         包含主机不在线或不属于该组的主机组的ID
    active                    启用后,ProxySQL将监视组并根据相应的主机组移动服务器
    max_writers               如果是多主模式下的组,则限制写入程序主机组中的节点数量
    writer_is_also_reader     布尔值,0或1,启用时,写入程序主机组中的节点也将属于读取器主机组
    max_transactions_behind   如果该值大于0,则它定义节点在应用组中的事务时可能滞后的程度
    
    1. 保存修改配置并生效:
    [root@xag214 ~]# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
    
    Admin> SAVE  MYSQL SERVERS TO DISK;
    Admin> LOAD MYSQL SERVERS TO RUNTIME;
    
    1. 在MGR数据库主节点中下载SQL脚本并导入
    [root@xag211 src]# 
    wget https://github.com/lefred/mysql_gr_routing_check/blob/master/addition_to_sys.sql
    
    [root@xag211 src]# ps -ef|grep mysql
    root        926      1  0 15:58 ?        00:00:00 /bin/sh /usr/local/servers/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid
    mysql      2453    926  0 15:58 ?        00:00:20 /usr/local/servers/mysql/bin/mysqld --basedir=/usr/local/servers/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/servers/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/log/error.log --open-files-limit=65535 --pid-file=/usr/local/mysql/data/mysql.pid --socket=/usr/local/mysql/tmp/mysql.socket --port=3306
    root       2560   2500  0 16:40 pts/0    00:00:00 grep --color=auto mysql
    
    查看结果
    [root@xag211 src]#
    mysql -uroot -p123456 -S /usr/local/mysql/tmp/mysql.socket < addition_to_sys.sql
    
    root@xag211:(none) [:05: ] 22 SQL->show tables from sys like 'gr%';
    +------------------------------------+
    | Tables_in_sys (gr%)                |
    +------------------------------------+
    | gr_member_routing_candidate_status |
    +------------------------------------+
    
    
    1. 在MGR数据库主节点中创建监控账户
    GRANT SELECT on sys.* to 'monitor'@'192.168.40.%' identified by 'monitor';
    FLUSH PRIVILEGES ;
    
    1. 查看在ProxySQL中配置用户(如与上面创建的的不同则修改之)
    Admin> select * from global_variables where variable_name='mysql-monitor_username';
    +------------------------+----------------+
    | variable_name          | variable_value |
    +------------------------+----------------+
    | mysql-monitor_username | monitor        |
    +------------------------+----------------+
    
    Admin> select * from global_variables where variable_name='mysql-monitor_password';
    +------------------------+----------------+
    | variable_name          | variable_value |
    +------------------------+----------------+
    | mysql-monitor_password | monitor        |
    +------------------------+----------------+
    
    
    1. 修改监控时间间隔
    Admin> 
    SELECT * FROM global_variables WHERE variable_name IN 
    ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
    +----------------------------------+----------------+
    | variable_name                    | variable_value |
    +----------------------------------+----------------+
    | mysql-monitor_connect_interval   | 60000          |
    | mysql-monitor_ping_interval      | 10000          |
    | mysql-monitor_read_only_interval | 1500           |
    +----------------------------------+----------------+
    
    UPDATE global_variables SET variable_value='2000' WHERE variable_name 
    IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
    
    Admin> LOAD MYSQL VARIABLES TO RUNTIME;
    Admin>  SAVE MYSQL VARIABLES TO DISK;
    
    
    1. 查看导入的视图信息
    各个节点的gr_member_routing_candidate_status视图也显示了当前节点是否是正常状态的,
    proxysql就是读取的这个视图的信息来决定此节点是否可用。
    
    root@xag211:(none) [:50: ] 4 SQL->select * from sys.gr_member_routing_candidate_status\G;
    *************************** 1. row ***************************
        viable_candidate: YES
               read_only: NO
     transactions_behind: 0
    transactions_to_cert: 0
    -------------------------------------------------------------------------
    root@xag212:(none) [:13: ] 2 SQL->select * from sys.gr_member_routing_candidate_status\G;
    *************************** 1. row ***************************
        viable_candidate: YES
               read_only: YES
     transactions_behind: 0
    transactions_to_cert: 0
    -----------------------------------------------------------------------------
    root@xag213:(none) [:52: ] 1 SQL->select * from sys.gr_member_routing_candidate_status\G;
    *************************** 1. row ***************************
        viable_candidate: YES
               read_only: YES
     transactions_behind: 0
    transactions_to_cert: 0
    
    
    1. 在proxysql节点中查看MGR中的节点信息状态:
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+--------+
    | hostgroup_id | hostname | status |
    +--------------+----------+--------+
    | 2            | xag211   | ONLINE |
    | 3            | xag213   | ONLINE |
    | 3            | xag212   | ONLINE |
    +--------------+----------+--------+
    
    
    1. 配置简单读写分离规则(仅测试用):
    介绍一下改表mysql_query_rules的几个字段: 
    active:是否启用这个规则,1表示启用,0表示禁用 
    match_pattern 字段就是代表设置规则 
    destination_hostgroup 字段代表默认指定的分组, 
    apply 代表真正执行应用规则。
    
    Admin>
    INSERT INTO  mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
    VALUES (1,1,'^SELECT.*FOR UPDATE$',2,1),(2,1,'^SELECT',3,1);
    
    LOAD MYSQL QUERY RULES TO RUNTIME;
    SAVE MYSQL QUERY RULES TO DISK;
    

    20.查看MGR主节点所在位置

    root@xag211:(none) [:01: ] 11 SQL->SELECT * FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member';
    +----------------------------------+--------------------------------------+
    | VARIABLE_NAME                    | VARIABLE_VALUE                       |
    +----------------------------------+--------------------------------------+
    | group_replication_primary_member | 2116c7e9-63c9-11eb-a1ba-000c299e2211 |
    +----------------------------------+--------------------------------------+
    
    
    1. 查看MGR节点是否存活
    root@xag211:(none) [:03: ] 16 SQL->
    SELECT member_state FROM performance_schema.replication_group_members
         WHERE member_id=@@server_uuid ;
    +--------------+
    | member_state |
    +--------------+
    | ONLINE       |
    +--------------+
    1 row in set (0.01 sec)
    
    root@xag211:(none) [:03: ] 17 SQL->
    SELECT * FROM performance_schema.global_variables
         WHERE variable_name in ('read_only','super_read_only');
    +-----------------+----------------+
    | VARIABLE_NAME   | VARIABLE_VALUE |
    +-----------------+----------------+
    | read_only       | OFF            |
    | super_read_only | OFF            |
    +-----------------+----------------+
    
    

    22.查看主从延迟

    root@xag211:(none) [:05: ] 21 SQL->
    SELECT RECEIVED_TRANSACTION_SET FROM performance_schema.replication_connection_status 
    WHERE Channel_name = 'group_replication_applier';
    +-----------------------------------------------------------+
    | RECEIVED_TRANSACTION_SET                                  |
    +-----------------------------------------------------------+
    | aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-30:1000012:2000012 |
    +-----------------------------------------------------------+
    
    1. 后端MySQL服务健康检测
    检测上述配置是否正确:connect_error & ping_error 为NULL则正确。
    1)查看后端连接状态:
    Admin> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
    +----------+------+------------------+-------------------------+---------------+
    | hostname | port | time_start_us    | connect_success_time_us | connect_error |
    +----------+------+------------------+-------------------------+---------------+
    | xag213   | 3306 | 1612688918404167 | 3549                    | NULL          |
    | xag212   | 3306 | 1612688918379695 | 3734                    | NULL          |
    | xag211   | 3306 | 1612688918358624 | 4468                    | NULL          |
    | xag211   | 3306 | 1612688916390191 | 3475                    | NULL          |
    | xag212   | 3306 | 1612688916370033 | 1572                    | NULL          |
    | xag213   | 3306 | 1612688916353355 | 1768                    | NULL          |
    | xag213   | 3306 | 1612688914389843 | 1320                    | NULL          |
    | xag211   | 3306 | 1612688914371416 | 1658                    | NULL          |
    | xag212   | 3306 | 1612688914350738 | 4325                    | NULL          |
    | xag213   | 3306 | 1612688912399851 | 3503                    | NULL          |
    +----------+------+------------------+-------------------------+---------------+
    
    2)查看后端存活状态
    Admin> SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;
    +----------+------+------------------+----------------------+------------+
    | hostname | port | time_start_us    | ping_success_time_us | ping_error |
    +----------+------+------------------+----------------------+------------+
    | xag213   | 3306 | 1612688948256540 | 1218                 | NULL       |
    | xag212   | 3306 | 1612688948234746 | 1272                 | NULL       |
    | xag211   | 3306 | 1612688948211061 | 1044                 | NULL       |
    | xag212   | 3306 | 1612688946251934 | 464                  | NULL       |
    | xag211   | 3306 | 1612688946230802 | 504                  | NULL       |
    | xag213   | 3306 | 1612688946209215 | 526                  | NULL       |
    | xag213   | 3306 | 1612688944244765 | 3256                 | NULL       |
    | xag212   | 3306 | 1612688944224932 | 1305                 | NULL       |
    | xag211   | 3306 | 1612688944206977 | 1141                 | NULL       |
    | xag213   | 3306 | 1612688942254723 | 1506                 | NULL       |
    +----------+------+------------------+----------------------+------------+
    
    3)配置的生效和持久化
    Admin> SELECT * FROM runtime_mysql_servers;
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    | hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    | 2            | xag211   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    | 3            | xag213   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    | 3            | xag212   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    3 rows in set (0.002 sec)
    
    Admin> SELECT * FROM disk.mysql_servers;
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    | hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    | 2            | xag211   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    | 2            | xag212   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    | 2            | xag213   | 3306 | 0         | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              |         |
    +--------------+----------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
    
    加载配置到RUNTIME层:
    Admin> LOAD MYSQL SERVERS TO RUNTIME;
    持久化配置到DISK层:
    Admin> SAVE MYSQL SERVERS TO DISK;
    
    
    1. 设置MySQL Users(连接后端使用)
    1)在后端MySQL创建业务账号
    Admin> SELECT * FROM mysql_users;
    Empty set (0.000 sec)
    
    在后端MySQL(211)上创建业务库及读写账号
    GRANT select,insert,update,delete ON testdb.* TO 'test_rw'@'%' IDENTIFIED BY '123456'; 
    
    2)将业务账号加入ProxySQL
    INSERT INTO mysql_users(username,password,default_hostgroup,comment) 
    VALUES ('test_rw','123456',2,'业务读写账号');
    
    Admin> SELECT * FROM mysql_users;
    +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | comment            |
    +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | test_rw  | 123456   | 1      | 0       | 2                 | NULL           | 0             | 1                      | 0            | 1       | 1        | 10000           | 业务读写账号       |
    +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    
    3)配置的生效
    Admin> LOAD MYSQL USERS TO RUNTIME;
    
    Admin> SELECT * FROM runtime_mysql_users;
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | username | password                                  | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | comment            |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | test_rw  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1      | 0       | 2                 |                | 0             | 1                      | 0            | 0       | 1        | 10000           | 业务读写账号       |
    | test_rw  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1      | 0       | 2                 |                | 0             | 1                      | 0            | 1       | 0        | 10000           | 业务读写账号       |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    
    4)加密MEMORY层用户密码, 从RUNTIME层获取用户加密后密码,更新MEMORY层
    Admin> SAVE MYSQL USERS FROM RUNTIME;
    
    Admin> SELECT * FROM mysql_users;
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | username | password                                  | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | comment            |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | test_rw  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1      | 0       | 2                 |                | 0             | 1                      | 0            | 1       | 1        | 10000           | 业务读写账号       |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    
    5)配置持久化, 持久化用户信息到DISK层
    Admin> SELECT * FROM disk.mysql_users;
    Empty set (0.000 sec)
    
    Admin> SAVE MYSQL USERS TO DISK;
    
    Admin> SELECT * FROM disk.mysql_users;
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | username | password                                  | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | comment            |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    | test_rw  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1      | 0       | 2                 |                | 0             | 1                      | 0            | 1       | 1        | 10000           | 业务读写账号       |
    +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+--------------------+
    
    
    1. 业务账号可用性验证
    Admin> select * from stats.stats_mysql_query_digest;
    Empty set (0.002 sec)
    
    [root@xag214 ~]# mysql -u test_rw -p123456 -h 127.0.0.1 -P6033
    
    test_rw@127.0.0.1 : (none)【05:37:28】1 SQL->show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | testdb             |
    +--------------------+
    
    [root@xag214 ~]# mysql -u test_rw -p123456 -h xag214 -P6033 -e "SELECT 1"
    
    [root@xag214 ~]# mysql -u test_rw -p123456 -h xag214 -P6033 -e "SELECT @@port"
    +--------+
    | @@port |
    +--------+
    |   3306 |
    +--------+
    
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "delete from testdb.t1;"
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "insert into testdb.t1 values(1,'a');"
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "update testdb.t1 set TestName='b' where id=1;"
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "SELECT * from testdb.t1;"
    
    Admin> select * from stats.stats_mysql_query_digest;
    +-----------+--------------------+----------+----------------+--------------------+--------------------------------------------+------------+------------+------------+----------+----------+----------+-------------------+---------------+
    | hostgroup | schemaname         | username | client_address | digest             | digest_text                                | count_star | first_seen | last_seen  | sum_time | min_time | max_time | sum_rows_affected | sum_rows_sent |
    +-----------+--------------------+----------+----------------+--------------------+--------------------------------------------+------------+------------+------------+----------+----------+----------+-------------------+---------------+
    | 3         | information_schema | test_rw  |                | 0x63E4D64EF2D6179E | SELECT * from testdb.t1                    | 1          | 1612690976 | 1612690976 | 1975     | 1975     | 1975     | 0                 | 1             |
    | 2         | information_schema | test_rw  |                | 0x226CD90D52A2BA0B | select @@version_comment limit ?           | 2          | 1612690648 | 1612690772 | 0        | 0        | 0        | 0                 | 0             |
    | 2         | information_schema | test_rw  |                | 0x594F2C744B698066 | select USER()                              | 2          | 1612690648 | 1612690772 | 0        | 0        | 0        | 0                 | 0             |
    | 2         | information_schema | test_rw  |                | 0x02033E45904D3DF0 | show databases                             | 1          | 1612690654 | 1612690654 | 2120     | 2120     | 2120     | 0                 | 2             |
    | 2         | information_schema | test_rw  |                | 0x1FAA742A35A78D70 | delete from test.t1                        | 1          | 1612690935 | 1612690935 | 1602     | 1602     | 1602     | 0                 | 0             |
    | 3         | information_schema | test_rw  |                | 0x620B328FE9D6D71A | SELECT DATABASE()                          | 1          | 1612690776 | 1612690776 | 2106     | 2106     | 2106     | 0                 | 1             |
    | 2         | testdb             | test_rw  |                | 0x99531AEFF718C501 | show tables                                | 1          | 1612690779 | 1612690779 | 2627     | 2627     | 2627     | 0                 | 1             |
    | 3         | information_schema | test_rw  |                | 0x1C46AE529DD5A40E | SELECT ?                                   | 1          | 1612690662 | 1612690662 | 1550     | 1550     | 1550     | 0                 | 1             |
    | 3         | testdb             | test_rw  |                | 0x3765930C7143F468 | select * from t1                           | 1          | 1612690784 | 1612690784 | 30939    | 30939    | 30939    | 0                 | 1             |
    | 2         | information_schema | test_rw  |                | 0x2A58805736DA75D1 | update testdb.t1 set TestName=? where id=? | 1          | 1612690975 | 1612690975 | 2733     | 2733     | 2733     | 1                 | 0             |
    | 2         | information_schema | test_rw  |                | 0x8F3313DEB6912889 | insert into testdb.t1 values(?,?)          | 1          | 1612690975 | 1612690975 | 2094     | 2094     | 2094     | 1                 | 0             |
    | 3         | information_schema | test_rw  |                | 0x831B091BA90D80E5 | SELECT @@port                              | 1          | 1612690747 | 1612690747 | 542      | 542      | 542      | 0                 | 1             |
    | 2         | information_schema | test_rw  |                | 0x1079F3981E546DAE | delete from testdb.t1                      | 1          | 1612690975 | 1612690975 | 5999     | 5999     | 5999     | 1                 | 0             |
    +-----------+--------------------+----------+----------------+--------------------+--------------------------------------------+------------+------------+------------+----------+----------+----------+-------------------+---------------+
    
    

    26.模拟主节点挂掉(xag211)

    [root@xag211 ~]# service mysqld stop
    
    root@xag212:(none) [:45: ] 3 SQL->
    SELECT a.member_id,a.member_host,member_port,member_state 
    ,if(b.variable_name is not null,'PRIMARY','SECONDDARY') as MEMBER_ROLE  
    FROM performance_schema.replication_group_members a left join performance_schema.global_status b 
    on b.variable_name='group_replication_primary_member' and b.variable_value=a.member_id;
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | member_id                            | member_host | member_port | member_state | MEMBER_ROLE |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | 2126c7e9-63c9-11eb-a1ba-000c299e2212 | xag212      |        3306 | ONLINE       | PRIMARY     |
    | 2136c7e9-63c9-11eb-a1ba-000c299e2213 | xag213      |        3306 | ONLINE       | SECONDDARY  |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+---------+
    | hostgroup_id | hostname | status  |
    +--------------+----------+---------+
    | 2            | xag212   | ONLINE  |
    | 1            | xag211   | SHUNNED |
    | 3            | xag213   | ONLINE  |
    +--------------+----------+---------+
    
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "update testdb.t1 set TestName='c' where id=1;"
    mysql -u test_rw -p123456 -h xag214 -P6033 -e "SELECT * from testdb.t1;"
    +----+----------+
    | Id | TestName |
    +----+----------+
    |  1 | c        |
    +----+----------+
    
    
    1. 原主节点故障修复(xag211)即启动
    [root@xag211 ~]# service mysqld start
    
    root@xag211:(none) [:26: ] 2 SQL-> START GROUP_REPLICATION;
    
    root@xag212:(none) [:45: ] 3 SQL->
    SELECT a.member_id,a.member_host,member_port,member_state 
    ,if(b.variable_name is not null,'PRIMARY','SECONDDARY') as MEMBER_ROLE  
    FROM performance_schema.replication_group_members a left join performance_schema.global_status b 
    on b.variable_name='group_replication_primary_member' and b.variable_value=a.member_id;
    
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | member_id                            | member_host | member_port | member_state | MEMBER_ROLE |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | 2126c7e9-63c9-11eb-a1ba-000c299e2212 | xag212      |        3306 | ONLINE       | PRIMARY     |
    | 2116c7e9-63c9-11eb-a1ba-000c299e2211 | xag211      |        3306 | ONLINE       | SECONDDARY  |
    | 2136c7e9-63c9-11eb-a1ba-000c299e2213 | xag213      |        3306 | ONLINE       | SECONDDARY  |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+--------+
    | hostgroup_id | hostname | status |
    +--------------+----------+--------+
    | 2            | xag212   | ONLINE |
    | 3            | xag211   | ONLINE |
    | 3            | xag213   | ONLINE |
    +--------------+----------+--------+
    
    
    1. 关闭
    关闭所有的组成员必须先先关闭slave,最后关闭master.
    service mysqld stop
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+---------+
    | hostgroup_id | hostname | status  |
    +--------------+----------+---------+
    | 1            | xag213   | SHUNNED |
    | 1            | xag212   | SHUNNED |
    | 1            | xag211   | SHUNNED |
    +--------------+----------+---------+
    
    [root@xag214 ~]# service proxysql stop
    
    1. 启动
    [root@xag214 ~]# service proxysql start
    
    [root@xag214 ~]# 
    mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+---------+
    | hostgroup_id | hostname | status  |
    +--------------+----------+---------+
    | 2            | xag211   | SHUNNED |
    | 2            | xag213   | SHUNNED |
    | 2            | xag212   | SHUNNED |
    +--------------+----------+---------+
    
    
    开启组复制需要先开始primary,接着一个启动slave server.
    root@xag211:(none) [:07: ] 3 SQL->set global group_replication_bootstrap_group=on;
    
    root@xag211:(none) [:07: ] 4 SQL->
    select * from performance_schema.replication_group_members;
    +---------------------------+-----------+-------------+-------------+--------------+
    | CHANNEL_NAME              | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
    +---------------------------+-----------+-------------+-------------+--------------+
    | group_replication_applier |           |             |        NULL | OFFLINE      |
    +---------------------------+-----------+-------------+-------------+--------------+
    #在没有开启组复制之前member_state为OFFLINE,开启组复制之后记得将group_replication_bootstrap_group再设为off
    root@xag211:(none) [:08: ] 6 SQL->start group_replication;
    
    root@xag211:(none) [:08: ] 7 SQL->set global group_replication_bootstrap_group=off;
    
    root@xag211:(none) [:09: ] 8 SQL->
    SELECT a.member_id,a.member_host,member_port,member_state 
    ,if(b.variable_name is not null,'PRIMARY','SECONDDARY') as MEMBER_ROLE  
    FROM performance_schema.replication_group_members a left join performance_schema.global_status b 
    on b.variable_name='group_replication_primary_member' and b.variable_value=a.member_id;
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | member_id                            | member_host | member_port | member_state | MEMBER_ROLE |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | 2116c7e9-63c9-11eb-a1ba-000c299e2211 | xag211      |        3306 | ONLINE       | PRIMARY     |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+---------+
    | hostgroup_id | hostname | status  |
    +--------------+----------+---------+
    | 2            | xag213   | SHUNNED |
    | 2            | xag211   | ONLINE  |
    | 2            | xag212   | SHUNNED |
    +--------------+----------+---------+
    
    待primary server准备好后,其它的slave数据库可以一个个打开并开启组复制
    [root@xag212 ~]# service mysqld start
    
    [root@xag212 ~]# mysql.login
    
    root@xag212:(none) [:13: ] 2 SQL->start group_replication;
    
    #启动后检查
    SELECT a.member_id,a.member_host,member_port,member_state 
    ,if(b.variable_name is not null,'PRIMARY','SECONDDARY') as MEMBER_ROLE  
    FROM performance_schema.replication_group_members a left join performance_schema.global_status b 
    on b.variable_name='group_replication_primary_member' and b.variable_value=a.member_id;
    
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | member_id                            | member_host | member_port | member_state | MEMBER_ROLE |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    | 2116c7e9-63c9-11eb-a1ba-000c299e2211 | xag211      |        3306 | ONLINE       | PRIMARY     |
    | 2126c7e9-63c9-11eb-a1ba-000c299e2212 | xag212      |        3306 | ONLINE       | SECONDDARY  |
    | 2136c7e9-63c9-11eb-a1ba-000c299e2213 | xag213      |        3306 | ONLINE       | SECONDDARY  |
    +--------------------------------------+-------------+-------------+--------------+-------------+
    
    Admin> SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers;
    +--------------+----------+--------+
    | hostgroup_id | hostname | status |
    +--------------+----------+--------+
    | 2            | xag211   | ONLINE |
    | 3            | xag213   | ONLINE |
    | 3            | xag212   | ONLINE |
    +--------------+----------+--------+
    
    

    问题处理

    9006 - ProxySQL Error: connection is locked to hostgroup 2 but trying to reach hostgroup 3
    
    Admin> set mysql-set_query_lock_on_hostgroup=0;
    Admin> load mysql variables to runtime;
    Admin> save mysql variables to disk;
    
    
    

    https://github.com/malongshuai/proxysql/wiki/Global-variables

    相关文章

      网友评论

          本文标题:MySQL ( MGR ) 10 - 现有的复制组迁移到Prox

          本文链接:https://www.haomeiwen.com/subject/jalntltx.html