mysql主从复制用途
- 实时灾备,用于故障切换(高可用)
- 读写分离,提供查询服务(读扩展)
- 数据备份,避免影响业务(高可用)
主从部署必要条件:
- 从库服务器能连通主库
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不同
主从复制实现原理
主从复制整体分为以下三个步骤:
- 主库将数据库的变更操作记录到Binlog日志文件中
- 从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中
- 从库读取中继日志信息在从库中进行Replay,更新从库数据信息
上述过程都是异步操作,俗称异步复制,存在数据延迟现象。
mysql主从复制存在的问题:
- 主库宕机后,数据可能丢失
- 从库只有一个SQL Thread,主库写压力大,复制很可能延时
解决方法:
- 半同步复制—解决数据丢失的问题
- 并行复制----解决从库复制延迟的问题
master库配置
- 在/etc目录下找到my.cnf文件
- 编辑my.cnf文件,设置log_bin=mysql-bin开启Logbin功能,设置server.id=1。
- systemctl restart mysqld重启mysql服务。然后连接到mysql,使用以下三个命令给从库授权。我们再使用 show master status 就能查看到当前所使用得binlog文件是哪一个了。
grant all privileges on *.* to 'root'@'%' identified by 'root';
grant replication slave on *.* to 'root'@'%' identified by 'root';
flush privileges;
从库配置
- 进入从库中得my.cnf文件中修改相关server-id配置,然后重启systemctl restart mysqld。其次从库需要配置一下权限才能让navicat连接到方便测试
grant all privileges on *.* to 'root'@'%' identified by 'root';
- 使用命令change master命令配置主从关系,同时使用start slave开启主从同步。
change master to master_host='192.168.192.130',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=869;
- 使用 show slave status \G 查看状态
- 在master表创建lagou数据库以及一个test表,可以看到主从复制得结果
注意:
我们主从复制是从binlog文件得指定位置开始进行复制得,如果之前还有很多内容,我们可以使用mysqldump命令将数据库导出来复制到从库再开启主从复制。