什么是主从同步
- 主从同步,也叫主从复制,是用来建立一个和主数据库完全一样的数据库环境.主从同步使得数据可以从一个数据库服务器复制到其他服务器上,实现主数据库的数据和从数据库的数据保持一致.
- 集群是共享存储的,是data-sharing . 主从复制中没有任何共享 . 每台机器都是独立且完整的系统,是nothing-sharing.
主从同步的原理
从mysql5.6之后主从复制的实现方式主要有3种:
1. 异步复制
2. 全同步复制
3. 半同步复制
主从同步原理图

1.当主数据库的更新事件(update、insert、delete)被写到binary-log .
2.从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上 .主库创建一个binlog dump thread线程,把binlog的内容发送到从库 ,从库的I/O线程读取主库的输出线程发送的更新并拷贝这些更新到本地relay log文件中 .
3.从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行 .
主从同步的实现(异步复制,数据库在不同服务器)
1.配置主数据库打开binary-log
vim /etc/my.cnf
在[mysqld]下添加
server-id=1(用来标识不同的数据库)
log-bin=master-bin(打开bin-log并配置文件名为master-bin)
log-bin-index=master-bin.index(区分不同的log-bin文件)
重启数据库:systemctl restart mariadb.service
2.配置从数据库打开relay-log
vim /etc/my.cnf
在[mysqld]下添加
server-id=2
relay-log=slave-relay-bin(打开relay-log并配置文件名为slave-relay-bin)
relay-log-index=slave-relay-bin.index
重启数据库:systemctl restart mariadb.service
3.连接两个数据库
在主数据库中:创建用户repl ,每一个从服务器都需要用到主数据库一个账户名和密码来连接主服务器 .
CREATE USER 'repl'@'114.116.77.213' IDENTIFIED BY '12312';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'114.116.77.213' IDENTIFIED BY '12312';
在从数据库中:
change master to master_host='47.106.78.106',master_user='repl',master_password='12312',master_log_file='master-bin.000001',master_log_pos=0;
启动同步:start slave;
4.验证
在主数据库创建一个数据库,然后在从数据库查看
主从同步的作用
1. 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失 .
2. 读写分离,使数据库能支撑更大的并发 .
主从同步的注意事项
主库可以读写数据,而从库只能读数据,因为当从库写了数据positon会变化,但是主库的position是不会变的,当主库写数据变化position的时候就可能会有冲突.
当主库的binatylog文件存储的数据很多,也就是position很大的时候,会再分裂一个新的binarylog文件,position置为0;
主从库的mysql版本可以不一样,但是从库的mysql版本要比主库的版本要高,如果不是的话,那么主库的语句到了从库可能就不能执行.
因为mysql是向后兼容的,也就是说低版本的语句在高版本里面是支持的,但是高版本的有些语句在低版本是不支持的.
面试相关
(如果问到数据库主从问题,必问以下问题):
主从的好处是?
主从的原理是?
从数据库的读的延迟问题了解吗?如何解决?
做主从后主服务器挂了怎么办?
本文详细介绍了MySQL主从同步的概念、原理和实现步骤,包括异步复制过程。主从同步能提供数据热备、实现读写分离,提高并发处理能力。在设置过程中需要注意从库只能读取数据,主库的binlog文件管理和版本兼容性问题。在面试中,理解主从同步的好处、延迟解决方案及故障应对策略是关键。
300

被折叠的 条评论
为什么被折叠?



