ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL主从同步复制实现

2021-11-03 19:04:48  阅读:155  来源: 互联网

标签:Slave log 复制 master MySQL Master 从库 backup 主从


MySQL主从同步复制实现

一.概念

1.数据库一主多从
高性能: 单点分散到多台机器上。
备份: 等同于实现Backup。
负载均衡: 若主挂掉,切换一台Slave机器作为Mater。若Slave挂掉,还有其他Slave支持。


二.实现原理

1.Mater将变更记录到二进制日志BinaryLog中,Mysql根据事物提交顺序依次记录

2.Slave从库 两个线程 (I/O thread 、SQL thread),IO请求主库获取Log日志最新位置,读取变更到从库,SQL线程 实施执行变更记录。

3.复制方式 —— mysql 两种模式动态切换 默认语句复制

3.1 基于语句复制 Log日志记录SQL操作语句,从库进行执行,日志空间占用小,宽带传输较高。插入更新日期函数 尽量放在代码逻辑层。

3.2 基于行复制 Log日志记录更新每行数据,非SQL,日志空间占用大,宽带传输大,但数据更精确,忽略上面提到日期函数


三. 延迟问题

1. 网络方面:将从库分布在相同局域网内或网络延迟较小的环境中

2. 硬件方面:从库配置更好的硬件,提升随机写的性能

3. 根据业务场景 选择复制策略(上述提到过),延迟没有最好解决方案,只是根据业务不同而选择

4. 主从复制达到瓶颈采用 — 分库分表方式


-------------------------------------------------------- 开 始 实 操 --------------------------------------------

主库 Master

my.cnf配置

[mysqld]
# 端口
port=3306

# 数据库引擎
default-storage-engine=INNODB

# Master的id,唯一,在主从中唯一
server-id=1

# 配置要给Slave同步的数据库
binlog-do-db=demo_0

# 启用二进制日志
log-bin=master-bin

# 不用给Slave同步的数据库,Mysql自带的数据库就不用给Slave同步了
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

# 清理30天以前记录
expire_logs_days=30

Master配置

创建设置同步库、重启主库服务、查看Log_bin是否开启、查看Mater状态

# 有数据库就忽略
create database demo_0 default character set utf8mb4 collate utf8mb4_general_ci;

#重启Mysql
docker restart (容器ID)

# 查看Log_bin是否开启  
show variables like '%log_bin%';

# 查看Master状态 File和Position要记住 配置Slave要使用
show master status;

主库bin_log开启是否成功
Mater状态

登录Master数据库 创建一个用于同步数据

# 创建用户名backup 密码backup
create user 'backup'@'%' IDENTIFIED BY 'backup';
# 分配权限
grant file on *.* to 'backup'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%';
# 刷新权限
flush privileges;

从库Slave

my.cnf 配置

[mysqld]
# 端口
port=3306

# Slave的id,唯一,在主从中唯一
server-id=2

#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE

Slave配置

重启从库服务、停止Slave、添加Master、启动Slave、查看Slave状态

# 重启Mysql
docker restart (容器ID)

# 停止Slave
stop slave

# 添加Master master_log_file和master_log_pos就是配置之前查看show master status状态时显示的File和Position信息

CHANGE MASTER TO master_host = '主库服务器IP',
master_port = 3306,
master_user = 'backup',
master_password = 'backup',
master_log_file = 'mysql-bin.000001',
master_log_pos = 1513;

# 启动Slave
start slave

# 查看Slave状态 保证Slave_IO_Running和Slave_SQL_Running 值YES
show slave status

Slave状态

注意:
1. Slave_SQL_Running 为NO 检测添加Master中master_log_file 和master_log_pos 与主库show master status 结果是否一致。
2. 添加Master信息 一定要执行stop slave 。
3. 主库登录用户名 使用创建的同步数据库 账户 上述是backup 其他账户不会触发复制

标签:Slave,log,复制,master,MySQL,Master,从库,backup,主从
来源: https://blog.csdn.net/MostSnails/article/details/121127923

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有