#!/bin/bash
#Author: 臆想的一只猫
#Created: 2022-04-05 11:18:36
#Description: 搭建MySQL主从复制function menu() {clearecho -e "\033[1;3;34m搭建MySQL主从复制比较复杂,请按顺序执行操作,否则可能会失败呢...\033[0m\n"echo -e "\t\t\033[43mMySQL主从复制搭建\033[0m" echo -e "\t\t\033[32m0、Exit menu\033[0m"echo -e "\t\t\033[32m1、搭建主服务器\033[0m"echo -e "\t\t\033[32m2、进入主服务器\033[0m"echo -e "\t\t\033[32m3、搭建从服务器\033[0m"echo -e "\t\t\033[32m4、进入从服务器\033[0m" echo -e "\t\t\033[32m5、搭建主服务器\033[0m\n"echo -en "\033[46;37mEnter option:\033[0m\t"read -n 1 option
}menu# 搭建主服务器
MASTER_ADDR='/data/volume/ms_mysql/mysql-master'
MASTER_NAME='mysql-master'
PWD_ADDR='MYSQL_ROOT_PASSWORD'
MASTER_PWD='root'
MASTER_PORT='3307'
M_VERSION='mysql:5.7'
function master_command() {docker run -p ${MASTER_PORT}:3306 --name ${MASTER_NAME} --privileged=true -v ${MASTER_ADDR}/log:/var/log/mysql -v ${MASTER_ADDR}/data:/var/lib/mysql -v ${MASTER_ADDR}/conf:/etc/mysql -e ${PWD_ADDR}=${MASTER_PWD} -d ${M_VERSION}
}function master_conf() {cd ${MASTER_ADDR}/conftouch my.cnfecho '[mysqld]' >> my.cnfecho '# 设置server_id,同一局域网中需要唯一' >> my.cnfecho 'server_id=101' >> my.cnfecho '# 指定不需要同步的数据库名称' >> my.cnfecho 'binlog-ignore-db=mysql' >> my.cnfecho '# 开启二进制日志功能' >> my.cnfecho 'log-bin=mall-mysql-bin' >> my.cnfecho '# 设置二进制日志使用内存大小(事务)' >> my.cnfecho 'binlog_cache_size=1M' >> my.cnfecho '# 设置二进制日志格式(max,statement,row)' >> my.cnfecho 'binlog_format=mixed' >> my.cnfecho '# 二进制日志过期清理时间,默认为0,表示不自动清理' >> my.cnfecho 'expire_logs_days=7' >> my.cnfecho '# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断' >> my.cnfecho '# 如:1062错误是指一些主键重复,1032错误是因为主从数据库不一致' >> my.cnfecho 'slave_skip_errors=1062' >> my.cnf
}IS_MYSQL=`docker images | grep mysql | grep 5.7`
function master() {if [[ ${IS_MYSQL} ]];thenmaster_commandmaster_confelsedocker pull mysql:5.7master_commandmaster_conffi
}function exec_master() {docker exec -it ${MASTER_NAME} env LANG=C.UTF-8 /bin/bash
}# 搭建从服务器
SLAVE_ADDR='/data/volume/ms_mysql/mysql-slave'
SLAVE_NAME='mysql-slave'
PWD_ADDR='MYSQL_ROOT_PASSWORD'
SLAVE_PWD='root'
SLAVE_PORT='3308'
M_VERSION='mysql:5.7'
function slave_command() {docker run -p ${SLAVE_PORT}:3306 --name ${SLAVE_NAME} --privileged=true -v ${SLAVE_ADDR}/log:/var/log/mysql -v ${SLAVE_ADDR}/data:/var/lib/mysql -v ${SLAVE_ADDR}/conf:/etc/mysql -e ${PWD_ADDR}=${SLAVE_PWD} -d ${M_VERSION}
}function slave_conf() {cd ${SLAVE_ADDR}/conftouch my.cnfecho '[mysqld]' >> my.cnfecho '# 设置server_id,同一局域网中需要唯一' >> my.cnfecho 'server_id=102' >> my.cnfecho '# 指定不需要同步的数据库名称' >> my.cnfecho 'binlog-ignore-db=mysql' >> my.cnfecho '# 开启二进制日志功能' >> my.cnfecho 'log-bin=mall-mysql-slave1-bin' >> my.cnfecho '# 设置二进制日志使用内存大小(事务)' >> my.cnfecho 'binlog_cache_size=1M' >> my.cnfecho '# 设置二进制日志格式(max,statement,row)' >> my.cnfecho 'binlog_format=mixed' >> my.cnfecho '# 二进制日志过期清理时间,默认为0,表示不自动清理' >> my.cnfecho 'expire_logs_days=7' >> my.cnfecho '# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断' >> my.cnfecho '# 如:1062错误是指一些主键重复,1032错误是因为主从数据库不一致' >> my.cnfecho 'slave_skip_errors=1062' >> my.cnfecho '# relay_log配置中继日志' >> my.cnfecho 'relay_log=mail-mysql-relay-bin' >> my.cnfecho '# log_slave_updates表示slave将复制事件写进自己的二进制文件' >> my.cnfecho 'log_slave_updates=1' >> my.cnfecho '# slave设置为只读(具有super权限的用户除外)' >> my.cnfecho 'read_only=1' >> my.cnf
}function slave() {if [[ ${IS_MYSQL} ]];thenslave_commandslave_confelsedocker pull mysql:5.7slave_commandslave_conffi
}function exec_slave() {docker exec -it ${SLAVE_NAME} env LANG=C.UTF-8 /bin/bash
}HOST_IP=`ifconfig ens33 | awk 'NR==2{print $2}'`case $option in
0)echo -e "\n\n\n\n\033[3;1;35m已退出!!!\033[0m\n\n"exit;;
1)echo ''masterdocker restart ${MASTER_NAME}echo '';;
2)echo -e "\n\033[1;3;36m创建slave数据同步用户【已创建请忽略】\033[0m\n"echo -e "\033[32m查看数据库中有哪些用户:SELECT user, host FROM mysql.user;\033[0m"echo -e "\033[32mcreate user 'slave'@'%' identified by '123456';\033[0m"echo -e "\033[32mgrant replication slave, replication client on *.* to 'slave'@'%';\033[0m\n"echo -e "\033[32m搭建完slave之后,可使用show master status;查看master状态\033[0m\n"exec_masterecho '';;
3)echo ''slavedocker restart ${SLAVE_NAME}echo '';;
4)echo -e "\n\033[1;3;36m配置主从复制【已配置请忽略】\033[0m\n"echo -e "\033[32mmaster_log_file和master_log_pos的值,以master上,show master status出来的为准\033[0m\n"echo -e "\033[32mchange master to master_host='${HOST_IP}', master_user='slave', master_password='123456', master_port=3307, master_log_file='mail-mysql-bin.00006', master_log_pos=1287, master_connect_retry=30;\033[0m\n"echo -e "\033[32m查看状态:show slave status \G;\n"echo -e "\033[32m开启主从同步:start slave;\n"exec_slaveecho -e '\n';;
*)clearecho -e "\n\n\033[3;1;35m键入参数有误,GoodBey!!!\033[0m\n\n";;
esac

docker搭建mysql主从复制相关推荐

  1. Linux下基于 Docker 搭建 MySQL 主从复制(1 Master+2 Slave)

    1.准备环境 CentOS   7.2 64位 (CentOS-7-x86_64-DVD-1511.iso) MySQL   10.244.87.144/library/mysql5.7/centos ...

  2. 更换mysql_Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  3. 【MySQL】基于Docker的Mysql主从复制搭建

    基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...

  4. docker搭建mysql主从

    前言 为什么要使用Docker搭建? 不管是使用源码安装还是离线安装,在服务器上安装一个mysql总会花费不少的时间,而且对于新人来说,中间稍不注意哪一步出错了就导致安装失败,我之前也是安装过2次才成 ...

  5. docker安装mysql[主从复制版]

    概述: 总所周知,使用docker安装一些中间件是非常快速和便捷的,搭建mysql主从复制[1主n从节点或n主n从节点],这里我为了演示简单一点,选择搭建mysql主从复制的[1主1从]并使用mysq ...

  6. 【收藏】使用Docker搭建MySQL服务

    使用Docker搭建MySQL服务 https://www.cnblogs.com/sablier/p/11605606.html

  7. 【数据库七】搭建MySQL主从复制和读写分离详解

    详解搭建搭建MySQL主从复制和读写分离 1.案例实施:搭建MySQL主从复制 1.1 主节点数据库(CentOS 7-5) 1.2 从节点数据库(CentOS 7-6) 1.3 从节点数据库(Cen ...

  8. docker实现mysql 主从复制

    docker实现 mysql 主从复制! 记录一下如何在docker中启动两个mysql容器来进行主从复制 之前踩了不少坑,终于弄好了,和我一起来看看整个部署过程吧 ! 使用docker部署mysql ...

  9. windows系统使用Docker搭建MySQL服务

    windows系统使用Docker搭建MySQL服务 文章目录 windows系统使用Docker搭建MySQL服务 前题 一.安装docker 二.建立镜像 三.连接mysql 前题 请先在wind ...

最新文章

  1. Swift中使用正则表达式
  2. 依赖注入的三种方式_一起学Spring之三种注入方式及集合类型注入
  3. Verilog HDL中模块参数传递的方法
  4. 面试题,你什么时候可以入职?回答不好,容易被压薪资
  5. 【云栖大会】用爱成就彼此 距云栖大会还有10天
  6. 重磅开源!新型VOLO打破多项记录!
  7. /boot 目录文件丢失修复记录
  8. 微信接口开发之高级篇系列【网页授权获取用户基本信息】
  9. 疫情之下,你有多久没回过家了?
  10. 【Unity3D插件】PUN 2插件分享《Unity3D多人在线联机联网插件》——客户端服务器端一体
  11. item_search - 按关键字搜索alibaba商品
  12. Android系统编程入门系列之应用环境及开发环境介绍
  13. python基础之温度转换
  14. vue获取上级路由地址
  15. 为什么很多人家里不准备尺子了?手机怎么测量长度?
  16. 解决打开xml文件没有代码
  17. Bootstrap布局自动拉伸改变大小
  18. python manager 共享数据访问_python 进程间数据共享multiProcess.Manger实现解析
  19. selenium学习——问卷星(可控比例)
  20. 土拍熔断意味着什么_315土拍将解地市之渴?“熔断”来了,别高兴太早

热门文章

  1. python 提取sogou中文语料库
  2. 什么是软件过程?为什么要使用软件过程?如何评价一个好的软件过程?
  3. 数学建模之多元非线性回归
  4. linux中nmcli命令配置网卡ip,Linux 使用nmcli配置网络
  5. mysql的环境搭建
  6. 现在的千兆光猫都自带路由功能,是否就不需要路由器了?
  7. pythonnamedtuple定义类型_python namedtuple的使用
  8. JDK9-JDK17新特性总结
  9. python输出用逗号隔开的数字_python,得出一些数字后,怎样不输出最后一个逗号...
  10. outlook 邮件插入字自动消失