共计 3868 个字符,预计需要花费 10 分钟才能阅读完成。
这篇文章主要为大家展示了“如何动态创建 MySQL Group Replication 的节点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“如何动态创建 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 的节点”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!