What's New In IT Edge?
 

CentOS7 安装 MySQL 5.7.23 并开启 MGR 多主模式

三台服务器,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';