加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

怎样动态创建MySQL Group Replication的节点

发布时间:2023-09-13 13:22:57 所属栏目:MySql教程 来源:
导读:这篇文章主要为大家展示了“如何动态创建MySQL Group Replication的节点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何动态创建MySQL Group Re

这篇文章主要为大家展示了“如何动态创建MySQL Group Replication的节点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何动态创建MySQL Group Replication的节点”这篇文章吧。

  首先说两个配置文件。这个文件是动态搭建的核心,每个节点的端口号,节点的编码(自定义),是否为主节点等都一一做了标识。

[root@grtest data]# cat init.lst

24801 s1 24901 Y

24802 s2 24902 N

24803 s3 24903 N

24804 s4 24904 N

24805 s5 24905 N

24806 s6 24906 N

24807 s7 24907 N

24808 s8 24908 N

24809 s9 24909 N接下来就是参数文件,里面的动态部分都使用变量来达到动态替换的效果。

[root@grtest data]# cat s.cnf

[mysqld]

# server configuration

datadir=${base_data_dir}/${node_name}

basedir=${base_dir}

port=${port}

socket=${base_data_dir}/${node_name}/${node_name}.sock

server_id=${port}

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

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="1bb1b861-f776-11e6-be42-782bcb377193"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address= "127.0.0.1:${v_port}"

loose-group_replication_group_seeds= "${seed_list}"

loose-group_replication_bootstrap_group= off其中难点在于参数group_replication_group_seeds=这个参数值需要花点功夫拼出来。

除此之外,就没有其它的配置文件了,直接上我们的核心脚本。

get_seed_list就是特别处理参数group_replication_group_seeds的值,init_node用来初始化各个节点。

base_dir=/usr/local/mysql

base_data_dir=/home/mysql/data

function get_seed_list

{

while read line

do

tmp_port='127.0.0.1:'`echo $line|awk '{print $3}'`

echo ${tmp_port}

done <init.lst|xargs |sed 's/ /,/g'

}

export seed_list=`get_seed_list`

#echo ${seed_list}

function init_node

{

echo $seed_list

port=$1

node_name=$2

v_port=$3

primary_flag=$4

${base_dir}/bin/mysqld --initialize-insecure --basedir=${base_dir} --datadir=${base_data_dir}/${node_name} --explicit_defaults_for_timestamp

chown -R mysql:mysql ${base_data_dir}/${node_dir}

cp ${base_data_dir}/s.cnf ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's:${base_data_dir}:'"${base_data_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's:${base_dir}:'"${base_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's:${node_name}:'"${node_name}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's:${port}:'"${port}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's:${v_port}:'"${v_port}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

sed -i 's/${seed_list}/'"${seed_list}/g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

chown -R mysql:mysql ${base_data_dir}/${node_name}

${base_dir}/bin/mysqld_safe --defaults-file=${base_data_dir}/${node_name}/${node_name}.cnf &

sleep 5

${base_dir}/bin/mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "show databases"

if [[ ${primary_flag} = 'Y' ]];then

mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'

                     FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';              

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

select *from performance_schema.replication_group_members;

"

elif [[ ${primary_flag} = 'N' ]];then

mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e  "

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'

       FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

set global group_replication_allow_local_disjoint_gtids_join=on;

start group_replication;

select *from performance_schema.replication_group_members;

"

else

  echo 'Please check variable primary_flag'

fi

}

#MAIN

while read line

do

echo ${seed_list}

init_node $line

done <init.lst我们花一两分钟来模拟一下节点数超限的问题。

即在init.lst添加10个节点信息。

很快就得到了报错信息:

ERROR 3191 (HY000) at line 10: The START GROUP_REPLICATION command failed since the group already has 9 members.

以上是“如何动态创建MySQL Group Replication的节点”这篇文章的所有内容,感谢各位的阅读!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章