分分钟搭建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 <init2.lst 

有了之前的模板和基础准备,整个过程大概也就一个小时就能够在一个小时左右完成测试和练习。

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

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-04-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶架构师

手把手带你秒杀架构实践(含完整代码)

之前在 Java-Interview 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。

2231
来自专栏杨建荣的学习笔记

MySQL中使用undrop来恢复drop的表(上)

MySQL中可以使用编程语言(比如Python)来解析binlog中DML的逆操作来达到闪回的效果,如果数据不多,手工解析也可以。这也是现在大家碰到的很多DML...

4125
来自专栏Albert陈凯

2018-11-19 如何将大规模数据导入Neo4j及导入具体步骤及Demo

博文原地址:https://my.oschina.net/zlb1992/blog/918243

2962
来自专栏battcn

一起来学SpringBoot | 第七篇:整合Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,几乎避免了所有的 JDBC 代码和手动设置参数以及获取结果集,使用简单的 X...

1412
来自专栏乐沙弥的世界

Possible MySQL server UUID duplication for server

    在mysql enterprise monitor监控过程中出现这样的event事件,Topic: Possible MySQL server UUID...

762
来自专栏张善友的专栏

SQL Server 2012 中的 Service Broker功能的一些改进或增强

1. 可以将消息发送到多个目标服务(多播) 通过支持多个会话句柄,扩展了 SEND (Transact-SQL) 语句的语法以启用多播。 DECLARE @di...

1957
来自专栏Hadoop实操

Hive Load本地数据文件异常分析

使用beeline登录HiveServer2向my_table表Load本地数据文件时报如下异常:

5944
来自专栏耕耘实录

CentOS7中mysql-5.7.21-el7-x86_64.tar.gz版MySQL的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

892
来自专栏DannyHoo的专栏

开发后期在各个页面中添加友盟统计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

3002
来自专栏杨建荣的学习笔记

配置dg broker的问题分析及修复(r6笔记第84天)

最近从同事那儿接手了一套新环境,备库因为服务器问题已经下架,重新配了一台服务器,所以需要搭一套备库,主库已经配置好了,而且同事已经把在主库把dg broker配...

3797

扫码关注云+社区

领取腾讯云代金券