mysql主从复制

为什么要搭建主从架构

  1. 主库出现问题,可以快速切换到从库提供服务。
  2. 读写分离,降低主库的访问压力。
  3. 可以在从库中执行备份,以避免备份期间影响主库的服务。

主从复制原理

在这里插入图片描述

  1. Master将数据变化记录到binlog。
  2. Slaver通过一个IO线程来拉取Master上的binlog,写到relaylog中。
  3. Slaver的Sql线程将relaylog中的数据重放到从库中。

搭建主从架构

主节点

创建文件夹和配置文件

mkdir /uni/docker/mysql/master/data
mkdir /uni/docker/mysql/master/conf

#配置master节点
vi /uni/docker/mysql/master/conf/my.cnf

[mysqld]
#同一局域网内的server-id必须唯一
server-id=1
#开启二进制日志功能,并设置日志文件名,文件名可以随便取名(关键)
log-bin=mysql-bin


##启动master节点
docker run -idt --privileged=true --name=mysql-master -p 3301:3306 -v /uni/docker/mysql/master/data:/var/lib/mysql -v /uni/docker/mysql/master/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

mysql执行下面的指令

mysql> create user 'master'@'%' identified  WITH 'mysql_native_password'  by '123456'; ---创建一个用户用于从节点连接进行拉取备份
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave,replication client on *.* to 'master'@'%';  ---授予用户备份权限
Query OK, 0 rows affected (0.00 sec)

mysql>  show master status;  --查询主节点的状态,重点关注Position 
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

从节点

mkdir -p /uni/docker/mysql/slave_01/data
mkdir -p /uni/docker/mysql/slave_01/conf
touch /uni/docker/mysql/slave_01/conf/my.cnf

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8
#同一个局域网内server-id必须具有唯一性
server-id=2
#开启binlog功能,以备作为其他slave的master
log-bin=mysql-slave-bin
#指定中继日志
relay-log=slave_01-relay-bin

##启动slave-01节点
docker run -idt --privileged=true --name=mysql-slave-01 -p 3302:3306 -v /uni/docker/mysql/slave_01/data:/var/lib/mysql -v /uni/docker/mysql/slave_01/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

从节点mysql执行:

-- 关闭同步
stop slave;
-- 设置同步信息
change master to master_host='172.17.0.4' ,master_port=3306,master_user='master',master_password='123456',master_log_file='binlog.000003',master_log_pos=157,master_connect_retry=30;
-- 开启同步
start slave;

docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ mysql-master 查询容器mysql-master的内网ip

检查slave状态:

show slave status;

关注这两个属性如图即为开启了
在这里插入图片描述

遗留问题

在my.cnf中配置的binlog_ignore_db和binlog_do_db都没生效,不知道为什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值