搭建Mysql主从同步之前,我们先来说他们之间同步的过程与原理:

同步复制过程

献上一张图,这张图诠释了整个同步过程

主从复制过程:

  • slave节点与主节点进行连接,建立主从关系,并把从哪开始同步,及哪个日志文件都一并发送到master
  • master将修改的数据保存到binlog中
  • master开启binlog dump线程,将binlog日志推送到连接的slave中
  • slave接受到推送的binlog,slave开启IO线程将数据写到中继日志(relay log)中
  • slave同时还会开启一个SQL线程,对比中继日志中新增的内容,并且解析SQL,回放数据到从数据库中

好的,复制过程已经说完了,我们现在实践下,快速搭建一个mysql主从架构。

没错,我这里还是使用docker搭建,因为它很香啊!

搭建Mysql 主从

创建mysql网络

docker network create mysqlNet

安装mysql

  • 运行mysql主节点
docker run -p 3306:3306 --name mysql_master -h mysql_master --net=mysqlNet -v ~/docker/mysql/mysql_master/log:/var/log/mysql -v ~/docker/mysql/mysql_master/data:/var/lib/mysql -v ~/docker/mysql/mysql_master/conf:/etc/mysql  -e lower_case_table_names=1 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
  • 修改配置文件
# 编辑文件vim ~/docker/mysql/mysql_master/conf[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection=utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolve## 同一局域网内注意要唯一server-id=1  ## 开启二进制日志功能,可以随便取(关键)log-bin=mysql-bin
  • 重启mysql_master
docker restart mysql_master
  • 在master节点上 创建给从节点进行复制的用户
docker exec -it mysql_master mysql -uroot -proot# 创建用户CREATE USER 'mysql_slave'@'%' IDENTIFIED BY '111111';# 授权GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mysql_slave'@'%';
  • 运行mysql从节点
docker run -p 33306:3306 --name mysql_slave -h mysql_slave --net=mysqlNet -v ~/docker/mysql/mysql_slave/log:/var/log/mysql -v ~/docker/mysql/mysql_slave/data:/var/lib/mysql -v ~/docker/mysql/mysql_slave/conf:/etc/mysql  -e lower_case_table_names=1 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
  • 编辑从节点配置文件
# 编辑文件vim ~/docker/mysql/mysql_master/conf[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection=utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolve## 设置server_id,注意要唯一server-id=2 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=mysql-slave-bin   ## relay_log配置中继日志relay_log=edu-mysql-relay-bin## 设置只读权限read_only = 1innodb_read_only## 使得更新的数据写进二进制日志中log_slave_updates = 1#如果master库名与salve库名不同,使用以下配置[需要做映射]#replicate-rewrite-db = [主库名] -> [从库名]#如果不是要全部同步[默认全部同步],则指定需要同步的表#replicate-wild-do-table=库名.表1#replicate-wild-do-table=库名.表2

现在主从节点已经安装完成,我们接下来需要让他们建立关系:

先查看master节点当前的状态,主要看下日志文件和当前的位置

docker exec -it mysql_master mysql -uroot -prootshow master status;exitexit

结果如下:文件为mysql-bin.000001 位置为629

拿到这些信息之后,我们现在就可以让从节点与主节点建立关系,并执行同步了:

docker exec -it mysql_slave mysql -uroot -prootchange master to master_host='mysql_master', master_user='mysql_slave', master_password='111111', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 629, master_connect_retry=30;

我们继续看下slave节点的状态

show slave statusG;1

我们看到我们在文首提到的两个线程并没有启动,所以我们需要手动启动着两个线程,一个命令就好了

start slave;

现在可以看到两个线程已经在运行了。
到此,已经搭建完成了

测试

这个我就不演示了,大家可以在mysql_master上创建一个数据库,看看是不是会同步到mysql_slave上。

docker mysql日志_面试官问:了解Mysql主从复制原理么?我呵呵一笑相关推荐

  1. 事物的级别_面试官问:MySQL锁与事物隔离级别你知道吗?

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收 ...

  2. mysql 分段执行_面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  3. .jar中没有主清单属性_面试官问:为什么SpringBoot的 jar 可以直接运行?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/uQvIna SpringBoot提供了一个插件spring-boot-mav ...

  4. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  5. 从面试官问“为什么选择mysql数据库”说开去

    前几天面试,面试官问我:"为什么选择mysql数据库".现在想想,有如下的问题需要解决 关系型数据库有什么特点及举例 非关系型数据库有什么特点及举例 关系型数据库与非关系型数据库有 ...

  6. obj: object是什么意思_面试官问你JavaScript基本类型时他想知道什么?

    本文原载于SegmentFault专栏"前端小将" 整理编辑:SegmentFault 面试的时候我们经常会被问答js的数据类型.大部分情况我们会这样回答包括: 1.基本类型(值类 ...

  7. sql参数化还是被注入了_面试官问你 SQL 注入攻击了吗?

    目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击? 我这人有个想法,就是不管自己跳不跳槽,每 ...

  8. 16 bit float 存储_面试官问我存储金额应该用哪种数据类型,我竟这样回答

    前言 ​ 最近在面试时,碰到这样一个问题:在问到项目部分时,面试官问我:你的项目中用到的分数.金额之类的数字是用的什么数据类型? 我没有过多思考脱口而出:double!随后面试官又问:为啥不用floa ...

  9. 简述ip地址的abc类如何划分_面试官问:讲讲IP地址的分配原理

    网络模型介绍 在计算机网络中有著名的OSI七层协议体系结构,概念清楚,理论完整,但是它既复杂又不实用.TCP/IP体系结构则不同,得到了广泛的应用.最终结合OSI和TCP/IP的优点,采用了一种只有五 ...

最新文章

  1. iwebshop商户手机模板_认证小红书企业号手机端最详细的认证流程!认证之前看这篇!...
  2. ubuntu搭建LAMP
  3. cad转dxf格式文件太大_想知道DWG、DWT、DWS和DXF是什么吗?从了解4种CAD图形格式开始吧...
  4. JavaScript学习总结(14)——12个令人惊叹的JavaScript技巧
  5. 赛事招募 | 互联网创客马拉松开show啦~比武招APP
  6. 【转】Web布局中的几种宽高自适应
  7. MyBatis-SELECT基本查询
  8. 微信聊天记录导出(2020新版)
  9. SSH与SSM的区别
  10. 定时清理文件夹bat程序
  11. 好的医疗器械管理软件应该具备哪些功能?
  12. MVC 原理和框架图
  13. 【Pandas】一文入门Pandas处理csv文件数据集(神经网络/机器学习算法数据预处理)
  14. 读书笔记之智识分子(万维钢)
  15. 伦敦 quant_伦敦统一用户组(LUUG)见面v2.0
  16. Android 路由框架ARouter最佳实践
  17. weiphp短信接口教程
  18. 谷歌正式发布Android 12,UI更好看,应用更快,打造独属于自己的定制化属性
  19. 计算机基础运用知识woord,《计算机基础知识word.doc
  20. mysql数据库时差

热门文章

  1. MySQL小问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents...
  2. IntelliJ IDEA汉化版jar包
  3. 各大媒体优劣对比_吉利星瑞特别版对比朗逸,亮点只有性价比?
  4. win10下安装和卸载Ubuntu双系统
  5. np.random.choice用法
  6. 局部特征检测器和描述符
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 II【难度中等】​
  8. KMS的几个开源实现汇总
  9. C++学习之路 | PTA乙级—— 1005 继续(3n+1)猜想 (25分)(精简)
  10. mysql恢复主服务器_MySQL 5.6主从复制第二部分[恢复某一台从服务器]