点击上方蓝色“鲸鱼手记”,关注并选择“设为星标”。
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写出来与大家一起交流,也希望采用这种方式记录自己的学习之旅。
主从复制原理
应用场景
配置 Master 和 Slave
创建数据同步用户
配置 Master 修改 my.cnf
配置 Slave 修改 my.cnf
从机上需要进行 CHANGE MASTER TO 操作
语法详解
示例
主从复制原理
Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的 SQL 语句(insert,update,delete,ALTER TABLE,grant 等等)。主从复制的原理其实就是把主服务器上的BIN日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

总共由三个线程完成
主服务将数据的更新记录保存到二进制日志--主服务器进程 从服务将主服务的二进制日志复制到本地中继日志--从服务 IO 进程 从服务读取中继日志,更新本地数据--从服务 SQL 进程
应用场景
从服务器做为数据的备份服务器。当服务器压力比较大时可以使用主从服务器实现读、写分离来分流减轻服务器的压力。
配置 Master 和 Slave
创建数据同步用户
在Master数据库创建数据同步用户,授予用户 gokuit REPLICATION SLAVE 权限,用于在主从库之间同步数据。
create user gokuit;
grant REPLICATION SLAVE on *.* to 'gokuit'@'%' IDENTIFIED by 'gokuit';
flush privileges;复制
配置 Master 修改 my.cnf
打开配置文件vi etc/my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin复制
配置 Slave 修改 my.cnf
打开配置文件vi etc/my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin复制
从机上需要进行 CHANGE MASTER TO 操作
配置mysql主从复制时,在从机上需要进行CHANGE MASTER TO操作,以确定需要同步的主机 IP,用户名,密码,binlog 文件,binlog 位置等信息。
语法详解
master_host :Master 的地址,指的是容器的独立 ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
查询容器的 ip
master_port:Master 的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
示例
change master to master_host='192.18.0.2', master_user='gokuit', master_password='gokuit', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;
复制