MySQL性能优化(三)

本章节主要介绍MySQL的主从复制。MySQL主从架构集群模式不仅可以解决高并发的读写,提高数据库的读写性能,还能起到数据备份的作用。

在如今互联网的高并发访问量下,即使我们的SQL语句优化的再好,单机版数据库也已经很难抗住压力,一旦数据库被压垮,不仅数据丢失,整个网站都会崩溃,后果相当严重。

MySQL主从复制是指在多台服务器上都部署mysql数据库,将其中一台设置为主数据库,其他设置为从数据库。主数据库主要负责数据的写入,从数据库主要负责数据的读取,而主从数据库之间通过主从复制进行数据同步。

MySQL 主从复制原理

MySQL主从复制主要就是通过binlog,就是binary log(二进制日志文件),该文件用于记录用户对数据库操作的SQL语句。通过binlog日志我们可以做数据恢复,主从复制。

主从复制整个过程共有三个线程,Binglog Dump运行在主节点,I/O和 SQL运行在从节点。

  1、Binglog Dump线程

当有从节点连接到主节点上时,主节点会创建对应的Binlog Dump线程,用于给从节点发送bin-log的内容。

   2、 I/O线程

当在从节点上启动slave时(start slave),从节点会创建一个I/O线程用来连接到主节点,用来接收主节点上发送的binn-log内容。I/O线程在接收到主节点Binlog Dump线程发来的更新之后,保存在当前节点的relay-log中。

   3、SQL线程

SQL线程负责读取relay-log中的内容,解析成具体的操作并执行,从而达到主从复制的效果。

MySQL主从搭建

1,master主数据库的配置

       (1)修改MySQL的配置文件my.cnf的server_id(可以修改为任意数值,但不能重复),window环境下好像是my.ini。 

               修改:server_id=5;

               

              开启binlog:log-bin=/var/lib/mysql/binlog;

              

      (2)登录mysql,创建用户,让从数据库同步数据使用。 

             grant replication slave on *.* to 'root'@'192.168.56.2' identified by '123456';

            其中,root指用户名,192.168.56.2指从数据库的ip,123456指用户密码。

      (3)查看主数据库的状态。

             show master status;

             

            上图圈中的File和Position两个值很重要,从数据库中会用到。

2、Slave从数据库的配置

        (1)修改从数据库的MySQL配置文件my.cnf的server_id(确保和其他的server_id不相同)。

                修改:server_id=6;

       (2)登录mysql,执行连接语句,连接master主数据库。

             change master to master_host='48.95.13.3',master_port=3306,master_user='root',
           master_password='123456',master_log_file='binlog.000034',master_log_pos=1164;

          其中,48.95.13.3指主数据库的ip,3306指主数据库的端口,root指主数据库创建的用户名,123456指主数据库创建的密码,binlog.000034指上述查询主数据库状态所得的File值,1164指上述查询主数据库状态所得的Position值。

       (3)启动slave数据同步。

                  start slave;

                 

         (4)查看slave状态。

                 show slave  status\G;

              

       其中,Slave_IO_Running和Slave_SQL_Running都为Yes时,才表示同步成功。

3、最后,我们可以进行测试。

   (1)首先查询一下主库和从库的表数据,主数据库表是空的,如下图:

                       

           从数据库表也是空的,如下图:

                      

     (2)我们往主数据库中插入一条语句,再次查询主数据库如下图:

                     

            我们再次查询从数据库,如下图:

                                

            我们发现从数据中也存在同一条记录,同步数据成功,我们的MySQL的主从复制已经完成。

总结:

          MySQL主从复制以及搭建完成,读写分离一般由中间件(如mycat),或者自己业务层代码控制。当网站壮大,网站压力过大,业务之间耦合度过高时,我们需要对服务进行拆分,对数据库进行分库,分表。建议根据业务进行垂直分库,在对数据量大的表进行水平分表。MySQL读写分离就可完成分库,根据自身业务对userId取模(mycat也是类似方法)或者时间进进行分表。后续会在Spring Boot系列之多数据源配置一文中进行代码演示。

         MySQL性能调优还涉及到一些mysql参数配置,硬件等等,本系列文章只是给想调优而找不到方向的人指条道路,当然用于面试回答也已经足够,虽然系列文中的SQL优化也只讲了索引优化,但通过本系列文章的学习,也足以抗住中小型企业的数据库压力。

          有意见或者建议的朋友可以在下方留言,我们一起学习,共同进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值