面试官问:了解Mysql主从复制原理么?我呵呵一笑
2023-06-13 09:18:27 时间
搭建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=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-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=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-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 = 1
innodb_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 -proot
show master status;
exit
exit
结果如下:文件为mysql-bin.000001 位置为629
拿到这些信息之后,我们现在就可以让从节点与主节点建立关系,并执行同步了:
docker exec -it mysql_slave mysql -uroot -proot
change 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 status\G;
1
我们看到我们在文首提到的两个线程并没有启动,所以我们需要手动启动着两个线程,一个命令就好了
start slave;
现在可以看到两个线程已经在运行了。 到此,已经搭建完成了
测试
这个我就不演示了,大家可以在mysql_master上创建一个数据库,看看是不是会同步到mysql_slave上。
相关文章
- 腾讯面试官曰Mysql架构的内部模块索引原理及性能优化思路谁会?
- MySQL:写操作和读操作的原理(mysql读写原理)
- MySQL在数据库管理中的重要作用(mysql平台)
- MySQL源码剖析:深入理解数据库内部运作原理(mysql源码研究)
- MySQL自动重启:一种轻松调整的方式(mysql自动重启)
- 是否是周末MySQL查询:判断今天是否是周末(mysql判断今天)
- MySQL按拼音排序:实现精准中文查找(mysql按拼音排序)
- MySQL快速查询与排序技巧(mysql查询排序)
- MySQL分布式锁的应用与原理(mysql分布式锁)
- MySQL双主复制机制深入解析(mysql双主复制的原理)
- 探究MySQL列式数据库的优势与应用(mysql列式数据库)
- MySQL连接数修改的详细步骤(如何修改mysql连接数)
- JSP使用MySQL进行留言管理(jsp留言mysql)
- 使用Hive将MySQL完美配置(hive配置mysql)
- MySQL远程使用:掌握基础知识,远程操作Mysql数据库。(mysql远程使用)
- Win7中如何成功安装MySQL?(win7下安装mysql)
- MySQL中的变量使用及其实现原理(mysql 变量)
- MySQL使用详解:全面学习MYSQL技术(mysql大全)
- MySQL字符编码的显示方法(mysql显示字符编码)
- MySQL的约束是什么详解数据库约束原理及其应用(mysql中什么是约束)
- MySQL人名循环实现高效数据库操作(mysql中人名循环)
- MySQL主键原理解析(mysql中主键原理)
- 25字中文文章标题MySQL 中 Inner 连接的使用方法(mysql中 inner)
- 用一核CPU加速MySQL服务器性能(1核 跑 mysql)
- MySQL中实现分布式的方法及原理分析(mysql中分布式)
- 深入浅出MySQL中的关键字字段(mysql 中关键字字段)
- Mysql数据库设计全面了解三大范式的原理和实现(mysql三大范式的内容)
- MySQL简洁易懂的万字总结(mysql万字总结)
- MySQL 协议深入了解数据库通讯协议原理与应用技巧(mysql xieyi)
- 如何下载并安装MySQL百度经验详细讲解(mysql下载百度经验)
- 一个用于mysql的数据库抽象层函数库