1.为什么要主从同步?
在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。
2、怎样配置主从?
首先安装两台mysql数据库,例:我的主数据库是mysql,从数据库是mysql2
配置主服务
1:找到数据库安装位置里的my.ini文件,打开在最后加上以下内容
#这是数据库ID,此ID是唯一的,ID值不能重复,否则会同步出错
server-id=1
#二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,
#那么就会以计算机的名字加编号来命名二进制文件;
log-bin=mysql-bin
#需要同步的数据库,如果还需要同步另外的数据库,那么继续逐条添加,
#如果不写,那么默认同步所有的数据库 需要同步多个数据库用逗号分隔
binlog-do-db=test
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
#log_bin_trust_function_creators = TRUE
#不需要同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
#binlog-ignore-db=mysql
保存文件后重启mysql服务,链接mysql数据库执行以下sql
GRANT REPLICATION SLAVE ON *.*TO 'my_slave'@'127.0.0.1' IDENTIFIED BY '123456';
执行成功后在执行以下sql,并记录执行结果
show master status;
文章图片
到现在为止主服务配置好了,接下来配置从服务mysql2
找到mysql2安装位置里的my.ini文件,打开并在文件最后加上以下内容
【数据库|mysql主从同步】#这是数据库ID,此ID是唯一的,ID值不能重复,否则会同步出错
server-id=2
#二进制日志文件,此项为必填项,否则不能同步数据;如果不取名字的话,那么就会以计算机的名字加编号来命名二进制文件;
log-bin=mysql-bin
#需要同步过来的数据库
replicate-do-db=test
重启mysql2的服务,并连接mysql2数据库,执行以下sql
change master to
master_host='127.0.0.1',
master_port=3306,
master_user='my_slave',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=106;
master_host:master IP
master_user:master数据库通过GRANT授权的账号
master_port:master数据库使用的端口号
master_password:master数据库通过GRANT授权的密码
master_log_file:master数据库中通过show master status显示的File名称
master_log_pos:master数据库中通过show master status显示的Position数据
接下来启动从服务即可,执行一下命令
slave start;
到这一步mysql主从同步就配置好了,接下来测试就可以了
注意事项:
1: 需要同步的从数据库需要保证和主数据库初始化表一样
2: 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
3: 如果主从的网络断开,会重新在网络正常后,批量同步。
4: 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这 个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
怎样解决主从同步延迟问题?
1:主从数据库尽可能保证在同一个局域网内。
2:采用千兆网卡,加大带宽。
3:主数据库更新完成之后产生的操作日志不是瞬间产生的,我们可以通过设置sync_binlog=1, 让它瞬间产生磁盘日志,(n=1指主数据库只要操作一次,就产生一次磁盘日志,n=10,就是操作10次,产生一次),从数据库可以依赖磁盘日志,瞬间产生同步,可以达到降低延迟的效果。
4:设置主库和从库读取日志失败之后,及时重新建立连接,延迟缩短、默认5秒。
概念
mysql读写分离,主从同步怎么配置的,如何降低延迟
读写分离配置:在项目中我们配置了两个数据源,一个主数据库的,一个是从数据库的,在事务配置的时候,我们给从的数据dataSource配置了只读事务,在项目中根据操作判断注入不同的数据源,如果是增删改操作的注入主的数据源,所有的查询操作注入从的数据源,
主从同步配置:首先找到主数据库的my.ini文件,在里边配置server-id 每个数据库的server-id不能重复要保证唯一,配置binlog-do-db指明需要同步的数据库,log-bin来指明日志文件,配置完后,重启主数据库的服务,登陆主数据库,创建一个用于从数据库访问的用户,然后通过show master status;
查询出主数据库的状态,记录下它的File和Position的值,紧接着配置从数据库,找到从数据库的my.ini文件,在里边配置server-id,log-bin和replicate-do-db 指明需要同步的数据库,然后重启从数据库的服务,重启完后登陆从数据库,创建从数据库对主数据库的连接,master_log_file要和刚才主数据库查询的File字段内容一致,master_log_pos要和主数据库刚才查出的Position一致,然后通过slave start,来启动从数据库,这样主从同步就配置好了。
推荐阅读
- 数据库|美国大学计算机专业
- 数据库|mac安装sqlserver
- 在 Android 应用程序中使用 SQLite 数据库以及怎么用
- Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
- TcaplusDB|【深入理解TcaplusDB技术】替换列表指定位置数据示例代码——[List表]
- TcaplusDB|【深入理解TcaplusDB技术】插入数据到列表指定位置示例代码——[List表]
- Mybatis|Mybatis缓存机制
- 在Android上运用Anko和Kotlin开发数据库(SQLite从来不是一件轻松的事(KAD25))
- 安卓数据库 找不到表