博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker + mysql主从配置
阅读量:2168 次
发布时间:2019-05-01

本文共 4856 字,大约阅读时间需要 16 分钟。

Docker + mysql主从配置

文件结构

在这里插入图片描述

主 mysql 的配置:master.cnf

[mysqld]## 设置server_id,一般设置为IP,注意要唯一server_id=100## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)log-bin=replicas-mysql-bin## 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062

从 mysql 的配置:slave.cnf

[mysqld]## 设置server_id,一般设置为IP,注意要唯一server_id=101## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=replicas-mysql-slave1-bin## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062## relay_log配置中继日志relay_log=replicas-mysql-relay-bin## log_slave_updates表示slave将复制事件写进自己的二进制日志log_slave_updates=1## 防止改变数据(除了特殊的线程)read_only=1

配置mysql主从的脚本:mysql_connector.sh

#!/bin/bashBASE_PATH=$(dirname $0)echo "Waiting for mysql to get up"# Give 60 seconds for master and slave to come upsleep 60echo "Create MySQL Servers (master / slave repl)"echo "-----------------"echo "* Create replication user"mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e 'STOP SLAVE;';mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'RESET SLAVE ALL;';mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "CREATE USER '$MYSQL_REPLICATION_USER'@'%';"mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD';"mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'flush privileges;'echo "* Set MySQL01 as master on MySQL02"MYSQL01_Position=$(eval "mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -e 'show master status \G' | grep Position | sed -n -e 's/^.*: //p'")MYSQL01_File=$(eval "mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -e 'show master status \G'     | grep File     | sed -n -e 's/^.*: //p'")MASTER_IP=$(eval "getent hosts mysqlmaster|awk '{print \$1}'")echo $MASTER_IPmysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e "CHANGE MASTER TO master_host='mysqlmaster', master_port=3306, \        master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD', master_log_file='$MYSQL01_File', \        master_log_pos=$MYSQL01_Position;"echo "* Set MySQL02 as master on MySQL01"MYSQL02_Position=$(eval "mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -e 'show master status \G' | grep Position | sed -n -e 's/^.*: //p'")MYSQL02_File=$(eval "mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -e 'show master status \G'     | grep File     | sed -n -e 's/^.*: //p'")SLAVE_IP=$(eval "getent hosts mysqlslave|awk '{print \$1}'")echo $SLAVE_IPmysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "CHANGE MASTER TO master_host='mysqlslave', master_port=3306, \        master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD', master_log_file='$MYSQL02_File', \        master_log_pos=$MYSQL02_Position;"echo "* Start Slave on both Servers"mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e "start slave;"echo "Increase the max_connections to 2000"mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'set GLOBAL max_connections=2000';mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e 'set GLOBAL max_connections=2000';mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -e "show slave status \G"echo "MySQL servers created!"echo "--------------------"echoecho Variables available fo you :-echoecho MYSQL01_IP       : mysqlmasterecho MYSQL02_IP       : mysqlslave

docker-compose 配置文件

version: '2'services:  mysqlmaster:    image: mysql:5.7.15    container_name: "mysql_master1"    environment:      - "MYSQL_ROOT_PASSWORD=root"    volumes:      - "./data/mysql-master:/var/lib/mysql/"      - "./config/mysql-master:/etc/mysql/conf.d/"    ports:      - "3306:3306"  mysqlslave:    image: mysql:5.7.15    container_name: "mysql_slave1"    environment:      - "MYSQL_ROOT_PASSWORD=root"    volumes:      - "./data/mysql-slave:/var/lib/mysql/"      - "./config/mysql-slave:/etc/mysql/conf.d/"    ports:      - "3307:3306"  mysqlconfigure:    image: mysql:5.7.15    container_name: "mysql_configure"    environment:      - "MYSQL_SLAVE_PASSWORD=root"      - "MYSQL_MASTER_PASSWORD=root"      - "MYSQL_ROOT_PASSWORD=root"      - "MYSQL_REPLICATION_USER=repl"      - "MYSQL_REPLICATION_PASSWORD=repl"    volumes:      - "./mysql_connector.sh:/tmp/mysql_connector.sh"    command: /bin/bash -x /tmp/mysql_connector.sh

转载地址:http://xtxzb.baihongyu.com/

你可能感兴趣的文章
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>