Mysql主从复制

 

​好在,别人如何分析我,跟我本身是一点关系也没有的。(by 三毛)

 

主从复制的常见用途

1.数据备份

对备份来说,复制是一项很有意义的技术补充,但复制既不是备份也不能取代备份

2.负载均衡(读写分离)

通过MySQL主从复制,可以把写操作放在主库(master),读取操作放在多个从库(slave),能够很好的将负载分离到不同的MySQL服务器上,从而减轻单一数据库的操作压力

3.高可用性和故障切换

复制能够帮助应用程序避免MySQL单点失败,当主库(master)发生故障后,可以立马切换到从库(slave),降低服务器数据风险。

4.MySQL升级测试

使用一个更高版本的MySQL作为备库,保证在升级全部实例前,查询能够在备库预期执行

主从复制的原理

面试题:
1 主从复制是如何工作的?
2 简单介绍下主从复制的基本原理?

Plus版

1.主库将数据更改记录到二进制日志(Binary Log)

2.从库将主库上的日志复制到自己的中继日志(Relay Log)中

3.从库读取中继日志中的事件,将其重放到从库数据之上

 

大众

主库(master)记录下自己的操作日志,授权从库可以读取操作日志,从库(slave)会开启两个线程。

  • IO线程 负责连接主库(master) 连接成功后,睡眠并等待主库(master)产生新的事件,有新的就保存到自己的中继日志中,中继日志通常位于操作系统的缓存中,所以开销很小。

  • sql进程 负责执行中继日志中的sql操作,这样从库(slave)的内容就和主库(master)的一致了

执行步骤

              

第一步

主库记录二进制日志,在每次更新事件(update、insert、delete)事务提交前,主库会将数据更新的事件写入二进制日志中(Binary Log)

第二步

从库会启动一个工作线程(I/O线程),I/O线程会跟主库建立一个客户端连接,然后主库会启动一个特殊的二进制转储(binlog dump)线程,这个线程会读取主库中的二进制日志中的事件并将其读到的binlog的内容发到从库

第三步

从库的SQL线程执行最后一步,该线程从中继日志中读取更新事件并在从库执行,从而实现从库的数据更新

 

配置主从复制(以Centos 7 为例)

首先

停止对主库(master)数据库的操作,把主库(master)中的数据库全部导入到从库(slave),使两边数据库完全一致。

小提示 主从配置需要注意的点
1 主从服务器操作系统版本和位数一致
2 主库和从库的版本保持一致(注:从库的版本可以高于主库,但一定不能低于主库)
3 主库和从库的数据要一致
4 主库开启二进制日志,主库和从库的server_id在局域网内必须各自唯一

 

主库(master)配置

1.创建复制账号

MySQL会给一些特殊权限到复制线程,从库的I/O线程会创建一个连接到主库的TCP/IP连接,这就需要主库上创建一个复制用户,并赋予其合适的权限,语句如下

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'%' IDENTIFIED BY '123456';

2.修改主库的配置文件

修改master的配置文件,使用二进制日志,指定server-id,重启服务。

cd /etc/
 
vi my.cnf
 

添加如下配置

log_bin=mysql-bin //[*]启用二进制日志
server_id=10      //[*]服务器唯一ID

配置完成后需要重启mysqlserver才能生效。

systemctl restart mysqld

3.检查二进制日志文件名

mysql> show master status;
    

从库(slave)配置

1.修改配置文件my.cnf

vi /etc/my.cnf

添加如下配置

log_bin=mysql-bin
server_id=2
relay_log=/var/lib/mysql/mysql-relay-bin
log_slave_updates=1
read_only=1

2.将从库(slave)指向主库(master)

CHANGE MASTER TO MASTER_HOST='你主库的IP地址',MASTER_USER='你创建的复制用户名',MASTER_PASSWORD='密码',MASTER_LOG_FILE='你的二进制日志文件名',MASTER_LOG_POS=主库查到的Position;

   

3.启动slave

mysql>start slave;

4.查看slave状态

mysql> mysql slave status\G
 

结果中有两个重要数据项:

Slave_IO_Running: Yes IO线程状态,必须YES
Slave_SQL_Running: Yes SQL线程状态,必须YES

测试

 

我搭建了两套CentOS7环境,给大家演示一下.

mysql主从复制Test

 

扫码关注左羊公社,回复关键字“面试”,即可无套路获取JAVA面试资源​。​

 

更多精彩内容

请关注左羊公社

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值