主从复制原理

实质就是通过二进制的sql文件实现主从复制

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

MySql主从复制的作用

故障切换,数据备份,读写分离,集群高可用等

主从复制配置

例:

准备两台服务器

192.168.1.101(master主Mysql))

192.168.1.102(slave从Mysql)

①修改master主Mysql配置文件

vim /etc/my.cnf
server_id=101 #服务器id
log-bin=mysql-bin #开启日志文件

然后 重启mysql服务

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

service mysqld restart

②主服务器给从服务器账号授权

GRANT REPLICATION SLAVE ON *.* to 'mastersync'@'%' identified by 'mysql_123456';#mastersync为自定义授权用户名 mastersync为自定义授权密码

然后 navicat连接主mysql

show master status;

查询主mysql的状态 file为日志文件名 position为日志位置行

③修改slave从Mysql配置文件

配置文件位置:
window 上  可以登录到mysql中  使用 show variables like '%data%' 先找到data 存放路径, 一般my.ini 在 data文件的上一级
linux 上 一般在/etc/my.cnf 这个位置 vi /etc/my.cnf
server_id=102
log-bin=mysql-bin
binlog_do_db=site_test #要同步的数据库

④在从节点配置访问主节点的参数信息 添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息

#先停止同步
stop slave
#从节点配置访问主节点相关信息 账号密码,主日志文件及日志同步开始行(上面第二步查询主mysql的状态)
change master to master_host='192.168.1.101',master_user='mastersync',master_password='mysql_123456',
master_log_file='mysql-bin.000001',master_log_pos=13693;
#启动开始同步
start slave

然后查看从mysql同步状态

show slave status;

可以看到

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

表示同步成功

最后测试 主mysql数据库添加表添加数据 从mysql数据库刷新对应有相应的信息

主从复制配置成功

附:如何考虑数据库集群时主键自增唯一性?设置步长

show variables like 'auto_incre%'; -- 会话的自增属性值,同show session variables like 'auto_incre%';
#修改会话自增的步长
SET @@auto_increment_increment=2;
#修改会话起始值
SET @@auto_increment_offset=2;

show global variables like 'auto_incre%';
#修改全局自增的步长
SET global auto_increment_increment=2;
#修改全局起始值
SET global auto_increment_offset=1;

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

最新文章

  1. JavaScript 中的相等检测
  2. iOS socket保持后台连接 ios9.0 xcode8.0
  3. shell中bc expr [ ] (( ))的使用方法
  4. Possion 分布
  5. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67
  6. Android 滑动冲突处理
  7. Yii源码阅读笔记(十五)
  8. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
  9. ASP.NET MVC 4 (一)路径映射
  10. 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
  11. Less入门学习总结
  12. bzoj1706
  13. iOS 通过颜色来生成一个纯色图片
  14. [js高手之路]深入浅出webpack教程系列6-插件使用之html-webpack-plugin配置(下)
  15. Junit4测试报错
  16. MySQL数据库插入中文乱码解决方法
  17. git 命令(基础篇)的本质理解
  18. javaScript常用API合集
  19. 面试 -- Http协议相关(转载)
  20. StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13

热门文章

  1. oepnstack笔记
  2. Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率
  3. Node.js小白开路(一)-- 全局变量篇
  4. 控制语句1:真假与if 语句
  5. LeetCode OJ:Compare Version Numbers(比较版本字符串)
  6. 【python】类file文件处理
  7. vsftp中的local_umask和anon_umask
  8. get running task , process and service
  9. Java String 面试题以及答案
  10. 《Ubuntu入门基础》第三篇