三台服务器,hostname分别为node1, node2, node3, 可通过hostname相互访问
卸载mariadb
rpm -qa | grep mariadb | xargs rpm -e --nodeps rm -rf /etc/my.cnf /etc/mysql /etc/my.cnf.d
安装libaio
yum install libaio
下载Linux-Generic版本https://dev.mysql.com/downloads/mysql/5.7.html#downloads,上传到安装服务器目录/usr/local/services。
解压重命名为mysql-5.7.23
MySQL不能使用root运行服务,这里使用默认已有的user_00
创建/etc/my.cnf配置 https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html
[mysqld] basedir=/usr/local/services/mysql-5.7.23 datadir=/data/mysql-5.7.23 user=user_00 explicit_defaults_for_timestamp=true character-set-server=utf8 log_error_verbosity=2 log_error=/data/log/mysql-5.7.23/error.log slow_query_log=ON slow_query_log_file=/data/log/mysql-5.7.23/slow.log long_query_time=1 log_queries_not_using_indexes=ON log_throttle_queries_not_using_indexes=1 log_slow_admin_statements=ON server_id=1 # change 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 relay-log=node1-relay-bin # change binlog_format=ROW transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=off loose-group_replication_local_address="node1:13306" # change loose-group_replication_group_seeds="node1:13306,node2:13306,node3:13306" loose-group_replication_ip_whitelist='node1,node2,node3' loose-group_replication_bootstrap_group=off loose-group_replication_single_primary_mode=off loose-group_replication_auto_increment_increment=1 # id自增offset loose-group_replication_enforce_update_everywhere_checks=true [client] default-character-set=utf8
创建所需目录:
mkdir /data/mysql-5.7.23 mkdir /data/log/mysql-5.7.23
修改mysql相关文件属主
chown -R user_00:users /usr/local/services/mysql-5.7.23 chown -R user_00:users /data/mysql-5.7.23 chown -R user_00:users /data/log/mysql-5.7.23 chown -R user_00:users /etc/my.cnf
初始化mysql
cd /usr/local/services/mysql-5.7.23 ./bin/mysqld --initialize
会打印出临时root密码
启动mysql
(./bin/mysqld &)
所有节点机器分别执行以下操作:
# 使用临时密码登录mysql mysql -uroot -p # 设置新密码 mysql> SET PASSWORD = PASSWORD('password'); # 分别创建复制账号, 不创建节点状态不是ONLINE的 mysql> SET SQL_LOG_BIN=0; mysql> CREATE USER rpl@'%' IDENTIFIED BY 'password'; mysql> SET SQL_LOG_BIN=1; mysql> GRANT REPLICATION SLAVE ON *.* TO rpl@'%'; mysql> FLUSH PRIVILEGES; # 安装mgr插件 mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; -- 如果报错,确认配置文件是否配置了组复制相关的选项 # 开启组复制 mysql> CHANGE MASTER TO MASTER_USER='rpl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery'; mysql> SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON; -- 首个节点可以不用设置,其他节点需要设置为ON避免不能加入组无法启动组复制 # 启动 mysql> SET GLOBAL group_replication_bootstrap_group=ON; -- 只有首个节点首次启动时需要这一步操作,其他节点不能执行该操作,否则在某一节点看不到其他节点,以后重启第一个节点也不需要再执行这个操作 mysql> START GROUP_REPLICATION; mysql> SET GLOBAL group_replication_bootstrap_group=OFF; -- 第一个节点完成启动组复制后执行该操作 # 查看节点状态 mysql> SELECT * FROM performance_schema.replication_group_members;
任一创节点建mysql账号,并对指定数据库授权全部权限
mysql> CREATE USER username@'%' identified by 'password'; mysql> GRANT ALL ON databasename.* TO username@'%'; mysql> FLUSH PRIVILEGES;
完成后可以在所有节点上看到该用户
mysql> SELECT user, host FROM user; mysql> SHOW GRANTS FOR 'username';