您的当前位置:首页 >知识 >使用Docker自动化部署MySQL集群 正文
时间:2025-11-05 13:58:52 来源:网络整理编辑:知识
本文主要是简化mysql主从搭建,同时给需要学习mysql主从的同学一个现成的环境。1. 编写master.sh脚本 此脚本主要是根据环境变量,创建出用于主从同步的用户。关于为什么要创建
本文主要是使用署简化mysql主从搭建,同时给需要学习mysql主从的自动同学一个现成的环境。

此脚本主要是化部根据环境变量,创建出用于主从同步的集群用户。关于为什么要创建出master,使用署slave脚本,是自动为了区分master和slave环境,因为只要把sql和sh文件放到master目录下面,化部master在第一次初始化的集群时候,会自动执行里面的使用署文件内容
复制mkdir -p init init/master init/slave cat > init/master/master.sh <<EOF #!/bin/bash #定义用于同步的用户名 MASTER_SYNC_USER=\${MASTER_SYNC_USER:-sync_admin} #定义用于同步的用户密码 MASTER_SYNC_PASSWORD=\${MASTER_SYNC_PASSWORD:-123456} #定义用于登录mysql的用户名 ADMIN_USER=\${ADMIN_USER:-root} #定义用于登录mysql的用户密码 ADMIN_PASSWORD=\${ADMIN_PASSWORD:-123456} #定义运行登录的host地址 ALLOW_HOST=\${ALLOW_HOST:-%} #定义创建账号的sql语句 CREATE_USER_SQL="CREATE USER \$MASTER_SYNC_USER@\$ALLOW_HOST IDENTIFIED BY \$MASTER_SYNC_PASSWORD;" #定义赋予同步账号权限的亿华云sql,这里设置两个权限,REPLICATION SLAVE,自动属于从节点副本的化部权限,REPLICATION CLIENT是集群副本客户端的权限,可以执行show master status语句 GRANT_PRIVILEGES_SQL="GRANT SELECT,使用署REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO \$MASTER_SYNC_USER@\$ALLOW_HOST;" #定义刷新权限的sql FLUSH_PRIVILEGES_SQL="FLUSH PRIVILEGES;" #执行sql mysql -u"\$ADMIN_USER" -p"\$ADMIN_PASSWORD" -e "\$CREATE_USER_SQL \$GRANT_PRIVILEGES_SQL \$FLUSH_PRIVILEGES_SQL" EOF1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22. 2. 编写slave.sh脚本slave主要是去master查询最新的pos位置和binlog文件名称,然后创建同步需要的自动相关信息,然后执行start slave;
复制cat >init/slave/slave.sh<<EOF #定义连接master进行同步的化部账号 SLAVE_SYNC_USER="\${SLAVE_SYNC_USER:-sync_admin}" #定义连接master进行同步的账号密码 SLAVE_SYNC_PASSWORD="\${SLAVE_SYNC_PASSWORD:-123456}" #定义slave数据库账号 ADMIN_USER="\${ADMIN_USER:-root}" #定义slave数据库密码 ADMIN_PASSWORD="\${ADMIN_PASSWORD:-123456}" #定义连接master数据库host地址 MASTER_HOST="\${MASTER_HOST:-%}" #连接master数据库,查询二进制数据,并解析出logfile和pos,这里同步用户要开启 REPLICATION CLIENT权限,才能使用SHOW MASTER STATUS; RESULT=\`mysql -u"\$SLAVE_SYNC_USER" -h\$MASTER_HOST -p"\$SLAVE_SYNC_PASSWORD" -e "SHOW MASTER STATUS;" | grep -v grep |tail -n +2| awk {print $1,$2}\` #解析出logfile LOG_FILE_NAME=\`echo \$RESULT | grep -v grep | awk {print $1}\` #解析出pos LOG_FILE_POS=\`echo \$RESULT | grep -v grep | awk {print $2}\` #设置连接master的同步相关信息 SYNC_SQL="change master to master_host=\$MASTER_HOST,master_user=\$SLAVE_SYNC_USER,master_password=\$SLAVE_SYNC_PASSWORD,master_log_file=\$LOG_FILE_NAME,master_log_pos=\$LOG_FILE_POS,get_master_public_key=1;" #开启同步 START_SYNC_SQL="start slave;" #查看同步状态 STATUS_SQL="show slave status\G;" mysql -u"\$ADMIN_USER" -p"\$ADMIN_PASSWORD" -e "\$SYNC_SQL \$START_SYNC_SQL \$STATUS_SQL" EOF1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25. 3. 编写docker-compose.yml脚本 复制version: 3 services: master: image: mysql:8 container_name: mysql-master ports: - 3306:3306 restart: always hostname: mysql-master environment: MYSQL_ROOT_PASSWORD: "123456" MASTER_SYNC_USER: "sync" MASTER_SYNC_PASSWORD: "123456" ADMIN_USER: "root" ADMIN_PASSWORD: "123456" TZ: "Asia/Shanghai" deploy: resources: limits: memory: 512M cpus: 50m healthcheck: test: ["CMD","mysqladmin","-uroot","-p$${MYSQL_ROOT_PASSWORD}","ping","-h","localhost"] timeout: 2s interval: 10s retries: 5 start_period: 5s logging: options: max-file: 1 max-size: 128k command: - "--server-id=1" - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" - "--log-bin=mysql-bin" - "--sync_binlog=1" - "--binlog-ignore-db=mysql" - "--binlog-ignore-db=sys" - "--binlog-ignore-db=performance_schema" - "--binlog-ignore-db=information_schema" - "--sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES" volumes: - ./init/master:/docker-entrypoint-initdb.d - ./data/master:/var/lib/mysql slave: image: mysql:8 container_name: mysql-slave ports: - 3307:3306 restart: always hostname: mysql-slave environment: MYSQL_ROOT_PASSWORD: "123456" SLAVE_SYNC_USER: "sync" SLAVE_SYNC_PASSWORD: "123456" ADMIN_USER: "root" ADMIN_PASSWORD: "123456" MASTER_HOST: "mysql-master" TZ: "Asia/Shanghai" healthcheck: test: ["CMD","mysqladmin","-uroot","-p$${MYSQL_ROOT_PASSWORD}","ping","-h","localhost"] timeout: 2s interval: 10s retries: 5 start_period: 5s deploy: resources: limits: memory: 512M cpus: 50m logging: options: max-file: 1 max-size: 128k depends_on: master: condition: service_healthy command: - "--server-id=2" - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" - "--sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES" volumes: - ./init/slave:/docker-entrypoint-initdb.d - ./data/slave:/var/lib/mysql1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.启动脚本
复制docker-compose up -d1.后期维护过程中可能用到的脚本
复制STOP SLAVE; RESET SLAVE; CHANGE MASTER TO master_log_pos=0; START SLAVE; SHOW SLAVE STATUS;1.2.3.4.5.写在后面,源码下载基于docker-compose搭建mysql主从已经结束,这里主要演示了如何一键搭建mysql主从,同时测试在各种环境下,还能保证主从同步。但是单主从同步肯定也无法满足企业的需求,有兴趣的同学可以研究一些主主双写同步,然后通过nginx搭建主备模式,达到高可用。
这里提供一个判断的方法,编写#boot.sh脚本文件,这时候需要重写dockerfile文件,使用myslq debian的镜像文件。并通过apt添加netcat工具。具体不再详述了,以下为判断脚本。
复制#!/bin/bash wait_for() { echo Waiting for $1 to listen on $2... sleep 1 while ! nc -vz $1 $2 do echo waiting...; sleep 1s; done } if [ -e "/slave" ]; then echo "slave..." cp /slave.cnf /etc/mysql/conf.d/ else echo "master..." cp /master.cnf /etc/mysql/conf.d/ fi echo "master config ... " /master.sh echo "complete. " if [ -n "$MASTER_HOST" ]; then echo "replicaof $MASTER_HOST" wait_for $MASTER_HOST $MASTER_PORT /slave.sh echo "Slave config complete." fi1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.华硕笔记本系统装机教程(从购买到系统安装,轻松搞定)2025-11-05 13:36
MannM3(探索MannM3的设计、性能和未来展望)2025-11-05 13:32
联想电脑安装64位系统教程(轻松学会联想电脑64位系统安装步骤与技巧)2025-11-05 13:02
硬盘U盘装系统教程(简单快捷,轻松装机,重要的是一键安装)2025-11-05 13:00
如何折叠手机支架,轻松享受便携观影体验(简单易学,以手机支架为切入点,掌握折叠技巧)2025-11-05 12:38
面包英语机构(以面包英语机构怎么样为主题的综合评价与经验分享)2025-11-05 12:11
蓝魅5手机全面评测(性能超群,拍照出众,绝对值得购买)2025-11-05 12:08
芝麻信用的重要性及影响(了解芝麻信用的关键信息和作用)2025-11-05 12:03
ivvi小骨Pro手机的全面评测(性能强悍、拍照出色,让你爱不释手)2025-11-05 11:40
联想S9电视震撼问世(颠覆你对电视的想象,带来全新视觉体验)2025-11-05 11:18
三星Note5的强劲性能让你惊叹不已(一部能满足你所有需求的智能手机)2025-11-05 13:49
微星集成独立显卡的优势与特点(探索微星集成独立显卡的性能与创新)2025-11-05 13:39
老毛桃镜像文件安装教程(详细指南及步骤,让你轻松完成安装)2025-11-05 13:16
韩博士分区工具教程(从分区原理到操作步骤,让你成为分区专家)2025-11-05 13:12
探索vivo1.27.1系统的优势与特点(揭秘vivo1.27.1系统的一体化设计及卓越性能)2025-11-05 12:57
电脑开机密码设置的详细流程(确保电脑安全的关键步骤)2025-11-05 12:31
Win7系统本地安装教程(Win7系统本地安装教程,让你轻松安装自己的操作系统)2025-11-05 12:27
三星电脑重新装系统教程(轻松搞定,让你的三星电脑焕然一新)2025-11-05 12:24
3AGames(透视3AGames的辉煌历程及其对游戏产业的影响)2025-11-05 11:54
如何使用戴尔笔记本电脑修复系统(详细教程及注意事项)2025-11-05 11:35