分分钟搭建MySQL一主多从环境(r12笔记第31天)
时间:2022-05-05
本文章向大家介绍分分钟搭建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 statusG;
"
else
echo 'Please check variable primary_flag'
fi
}
#MAIN
while read line
do
echo ${seed_list}
init_node $line
done <init2.lst
有了之前的模板和基础准备,整个过程大概也就一个小时就能够在一个小时左右完成测试和练习。
我写文章的这会儿,已经创建了快十多遍。所以分分钟绝对不是噱头。
- javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites
- 一次数据库无法登陆的问题及排查 (r3笔记第99天)
- 用深度学习keras的cnn做图像识别分类,准确率达97%
- 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
- job处理缓慢的性能问题排查与分析(r4笔记第18天)
- 京东商品评论情感分析:数据采集与词向量构造方法
- springboot开启access_log日志输出
- 完美的执行计划导致的性能问题(r4笔记第17天)
- 解决Docker容器时区及时间不同步的问题
- 移动端测试方案--sptt
- 服务端事件EventSource揭秘
- 让docker中的mysql启动时自动执行sql文件
- 通过执行计划中的CONCATENATION分析sql问题(r4笔记第16天)
- 《小美好》短评文本情感分析+生成词云
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 打卡群刷题总结0729——分隔链表
- 单细胞tSNE细胞降维图还可以这样做?!
- 从IIC实测波形入手,搞懂IIC通信
- FreeRTOS例程4-串口DMA收发不定长数据
- FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- 前端如何将json数据导出为excel文件
- 使用Postman访问腾讯云API3.0
- C语言将float拆分为4个hex传输与重组
- C语言字符串相关函数使用示例 strtok_r strstr strtok atoi
- FreeRTOS例程1-基础任务创建
- ARouter路由记录
- java的DES和3DES加解密算法
- Flink 批处理算子详解
- Flink 流计算算子函数详解
- TensorFlow-手写数字识别(三)