mysql 搭建一主两从_分分钟搭建MySQL一主多从环境(r12笔记第31天)

之前写过一篇分分钟搭建MySQL Group Replication的测试环境,如果我们在一台服务器上想搭建一主多从的测试环境,怎么能够分分钟搞定呢,其实稍花点时间写个脚本即可搞定,无非就是把哪些程式化的东西整合起来,化繁为简。能够提高效率才是好。

搭建主从的环境,我们还是准备一个配置文件init2.lst,里面主要是端口和节点标示。

24801 s1   Y

24802 s2   N

24803 s3   N

24804 s4   N

24805 s5   N比如上面的写法,就是我创建了5个节点,端口是第一列,第2列是节点的一个标示,生成的节点目录名就是参考这个,第3列是节点的角色,比如一主四从。主为P,从为N

统一的参数文件,这个地方是值得我们改进的地方,因为个别的配置化参数的不同,就无需指定多个参数文件,可以动态生成。# cat s2.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

而这个功能主角就是整个脚本内容了。

脚本的内容如下:

base_dir=/usr/local/mysql

base_data_dir=/home/data

pri_port=`cat init2.lst|grep Y|awk '{print $1}'`

pri_ip=127.0.0.1

pri_node=`cat init2.lst|grep Y|awk '{print $2}'`

function init_node

{

port=$1

node_name=$2

primary_flag=$3

${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}/s2.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

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 "

CREATE USER rpl_user@'%';

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

FLUSH PRIVILEGES;

"

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

echo ${pri_node}"primary"

echo ${pri_port}

mysqldump

-P${pri_port} -S ${base_data_dir}/${pri_node}/${pri_node}.sock

--default-character-set=utf8 --single-transaction -R --triggers -q

--all-databases  |mysql -P${port}  -S

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

echo "CHANGE

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

MASTER_HOST='127.0.0.1',MASTER_PORT="${pri_port}",MASTER_AUTO_POSITION =

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

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

start slave;

show slave status\G;

"

else

echo 'Please check variable primary_flag'

fi

}

#MAIN

while read line

do

echo ${seed_list}

init_node $line

done

我写文章的这会儿,已经创建了快十多遍。所以分分钟绝对不是噱头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值