96 基于Docker的Mysql主从复制搭建

Docker安装MySQL主节点

Mysql主节点 端口是为3306

Mysql从节点 端口是为3307

  1. 使用docker启动mysql 主节点

docker run --name mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13

说明:

--name 为容器指定名称,这里是master

-p 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口

-e 设置环境变量,这里是指定root账号的密码为root

-d 后台运行容器,并返回容器ID

mysql:5.7.13 指定运行的mysql版本

  1. 创建从节点账号

连接主节点上执行:

GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by 'slave';

show grants for 'slave'@'%';
image.png
  1. 创建文件夹
mkdir -p /usr/local/mysql/master

mkdir -p  /usr/local/mysql/slave
  1. 将容器中的/etc/mysql/my.cnf 拷贝到容器外部
docker cp mysql_master:/etc/mysql/my.cnf /usr/local/mysql/master/my.cnf

将容器中 /etc/mysql/my.cnf 拷贝 容器外部中 /usr/local/mysql/master/my.cnf

  1. 进入外部 : cd /usr/local/mysql/master
Vi my.cnf

新增:

log-bin=mysql-bin

server-id=1

log-bin=mysql-bin 使用binary logging,mysql-bin是log文件名的前缀

server-id=1 唯一服务器ID,非0整数,不能和其他服务器的server-id重复

  1. 将修改后的文件覆盖Docker中MySQL中的配置文件
docker cp /usr/local/mysql/master/my.cnf mysql_master:/etc/mysql/my.cnf

容器外部 中的文件 /usr/local/mysql/master/my.cnf

mysql_master(容器名称):/etc/mysql/my.cnf

  1. 进入 docker mysql 主节点 容器
docker exec -it mysql_master bash  

cd etc/mysql/
  1. 重启 mysql 的docker , 让配置生效
docker restart mysql_master
  1. 查看服务器是否开启binlog
show variables like 'log_bin';
image.png
show master status

show variables like '%server%';

show variables like '%datadir%';
image.png

Docker安装MySQL从节点

1.## 启动mysql 从节点 容器

docker run --name mysql_slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13

2.将容器中的/etc/mysql/my.cnf 拷贝到容器外部

docker cp mysql_slave:/etc/mysql/my.cnf /usr/local/mysql/slave/my.cnf

3.cd /usr/local/mysql/slave

Vi my.conf

log-bin=mysql-bin

server-id=2

4.将修改后的文件覆盖Docker中MySQL中的配置文件

docker cp /usr/local/mysql/slave/my.cnf mysql_slave:/etc/mysql/my.cnf

5.重启容器

docker restart mysql_slave

show variables like '%server%';

show variables like '%datadir%';

show variables like 'log_bin';
image.png

Docker-compose 配置文件 自动启动2个容器

STOP SLAVE;
CHANGE MASTER TO 
MASTER_HOST='连接Navicat的ip',
MASTER_PORT=正确的端口,
MASTER_USER='正确的用户名',
MASTER_PASSWORD='正确的密码';
START SLAVE;
CHANGE MASTER TO 
MASTER_HOST='192.168.43.135',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='slave';
START SLAVE;

image.png

image.png

My.conf 相关配置

[mysqld]

设置server_id,一般设置为IP,同一局域网内注意要唯一

server_id=100

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin=edu-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

状态内容

状态解释:
1.Slave_IO_State: Waiting for master to send event
这里显示了当前slave I/O线程的状态。状态信息和使用show processlist显示的内容一样。
slave I/O线程的状态,有以下几种:
1) waiting for master update
这是connecting to master状态之前的状态
2) connecting to master
I/O线程正尝试连接到master
3) checking master version
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。
4) registering slave on master
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。
5) requesting binlog dump
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。在这个状态下,I/O线程向master发送请求,请求binlog,位置从指定的binglog 名字和binglog的position位置开始。
6) waiting to reconnect after a failed binlog dump request
如果因为连接断开,导致binglog的请求失败,I/O线程会进入睡眠状态。然后定期尝试重连。尝试重连的时间间隔,可以使用命令"change master to master_connect_trt=X;"改变。
7) reconnecting after a failed binglog dump request
I/O进程正在尝试连接master
8) waiting for master to send event
说明,已经成功连接到master,正等待二进制日志时间的到达。如果master 空闲,这个状态会持续很长时间。如果等待的时间超过了slave_net_timeout(单位是秒)的值,会出现连接超时。在这种状态下,I/O线程会人为连接失败,并开始尝试重连
9) queueing master event to the relay log
此时,I/O线程已经读取了一个event,并复制到了relay log 中。这样SQL 线程可以执行此event
10) waiting to reconnect after a failed master event read
读取时出现的错误(因为连接断开)。在尝试重连之前,I/O线程进入sleep状态,sleep的时间是master_connect_try的值(默认是60秒)
11) reconnecting after a failed master event read
I/O线程正尝试重连master。如果连接建立,状态会变成"waiting for master to send event"
12) waiting for the slave sql thread to free enough relay log space
这是因为设置了relay_log_space_limit,并且relay log的大小已经整张到了最大值。I/O线程正在等待SQL线程通过删除一些relay log,来释放relay log的空间。
13) waiting for slave mutex on exit
I/O线程停止时会出现的状态,出现的时间非常短。

  1. Master_Host: 10.1.8.62
    Master_User: rep_user
    Master_Port: 3306
    这3条信息,显示了slave连接master时,使用的master的主机---master_host、连接master用的用户---master_user、连接master的端口---master_port。
  2. Connect_Retry: 10
    连接中断后,重新尝试连接的时间间隔。默认值是60秒。
  3. Master_Log_File: binlog.000026
    Read_Master_Log_Pos: 446
    这两条信息,显示了与master相关的日志的信息。master_log_file:当前I/O线程正在读取的master 二进制日志的文件名;read_master_log_pos:当前I/O线程正在读取的二进制日志的位置
  4. Relay_Log_File: relay.000008
    Relay_Log_Pos: 589
    Relay_Master_Log_File: binlog.000026
    这3条信息,显示了与relay log相关的信息。relay_log_file:当前SQL线程正在读取并执行的relay log的文件名;relay_log_pos:当前SQL线程正在读取并执行的relay log文件的位置;relay_master_log_file:master 二进制日志的文件名。该文件包含当前SQL执行的事物
  5. Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    显示了当前I/O线程和SQL线程的状态
  6. Replicate_Do_DB:
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:
    这部分显示的是关于复制DB和table的信息。
  7. Last_Errno: 0
    Last_Error:
    laster_errno和laster_error是 Last_SQL_Errno和Last_SQL_Error的同义词。
  8. Skip_Counter: 0
    系统参数sql_slave_skip_counter的值。sql_slave_skip_counter:slave应该跳过的事件数
  9. Exec_Master_Log_Pos: 446
    sql线程当前执行的事件,在master 二进制日志中的position
  10. Relay_Log_Space: 878
    所有存在relay log的大小
  11. Seconds_Behind_Master: 0
    这个值是时间戳的差值。是slave当前的时间戳和master记录该事件时的时间戳的差值
  12. Replicate_Ignore_Server_Ids:
    slave当前会跳过的事件号
  13. Master_Server_Id: 2211
    master的server-id;如果master和slave的server-id相同,在启动slave时,会报错
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容