好在,别人如何分析我,跟我本身是一点关系也没有的。(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-binserver_id=2relay_log=/var/lib/mysql/mysql-relay-binlog_slave_updates=1read_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 statusG
结果中有两个重要数据项:
Slave_IO_Running: Yes IO线程状态,必须YESSlave_SQL_Running: Yes SQL线程状态,必须YES
测试
我搭建了两套CentOS7环境,给大家演示一下.
mysql主从复制Testhttps://www.zhihu.com/video/1191670270795292672扫码关注左羊公社,回复关键字“面试”,即可无套路获取JAVA面试资源。
更多精彩内容
请关注左羊公社