欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

mySQL主从复制实战

程序员文章站 2022-03-13 13:36:22
随着访问量的不断增加,单台MySQL数据库服务器压力不断增加,需要对MYSQL进行优化和架构改造,MYQSL优化如果不能明显改善压力情况,可以使用高可用、主从复制、读写分离来、拆分库、拆分表来进行优化。 MYSQL主从复制集群在中小企业、大型企业中被广泛使用,MYSQL主从复制的目的是实现数据库冗余 ......

     随着访问量的不断增加,单台mysql数据库服务器压力不断增加,需要对mysql进行优化和架构改造,myqsl优化如果不能明显改善压力情况,可以使用高可用、主从复制、读写分离来、拆分库、拆分表来进行优化。

       mysql主从复制集群在中小企业、大型企业中被广泛使用,mysql主从复制的目的是实现数据库冗余备份,将master数据库数据定时同步至slave库中,一旦master数据库宕机,可以将web应用数据库配置快速切换至slave数据库,确保web应用较高的可用率,如图11-12所示,为mysql主从复制结构图:

                      mySQL主从复制实战

     mysql主从复制集群至少需要2台数据库服务器,其中一台为master库,另外一台为slave库,mysql主从数据同步是一个异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,bin-log日志用于记录在master库中执行的增、删、修改、更新操作的sql语句,整个过程需要开启3个线程,分别是master开启io线程,slave开启io线程和sql线程,具体主从同步原理详解如下:

1)slave上执行slave start,slave io线程会通过在master创建的授权用户连接上至master,并请求master从指定的文件和位置之后发送bin-log日志内容;

2)master接收到来自slave io线程的请求后,master io线程根据slave发送的指定bin-log日志position点之后的内容,然后返回给slave的io线程。

3)返回的信息中除了bin-log日志内容外,还有master最新的binlog文件名以及在binlog中的下一个指定更新position点;

4)slave io线程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的最末端,并将读取到的master端的 bin-log的文件名和position点记录到master.info文件中,以便在下一次读取的时候能告知master从响应的bin-log文件名及最后一个position点开始发起请求;

5)slave sql线程检测到relay-log中内容有更新,会立刻解析relay-log的内容成在master真实执行时候的那些可执行的sql语句,将解析的sql语句并在slave里执行,执行成功后,master库与slave库保持数据一致。

1、系统环境准备

    master:10.6.97.133

    slave:10.6.97.134

2、master安装及配置 

      master端使用源码安装mysql-5-5版本软件后,在/etc/my.cnf 配置文件[mysqld]段中加入如下代码,然后重启mysql服务即可。如果在安装时cp my-large.cnf  /etc/my.cnf,则无需添加如下代码:

server-id = 1
log-bin = mysql-bin

 master数据库服务器命令行中 创建tongbu用户及密码并设置权限,执行如下命令,查看bin-log文件及position点:

grant  replication  slave  on *.* to  'tongbu'@'%'  identified by  '123456';
show  master  status;

            mySQL主从复制实战

3、slave安装及配置

        slave端使用源码安装mysql-5-5版本软件后,在/etc/my.cnf 配置文件[mysqld]段中加入如下代码,然后重启mysql服务即可。如果在安装时cp my-large.cnf  /etc/my.cnf,则需修改server-id,master与slave端server-id不能一样,slave端也无需开启bin-log功能: 

server-id = 2

slave指定master ip、用户名、密码、bin-log文件名(mysql-bin.000028)及position(257):

change master to master_host='10.6.191.183',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=326;

在slave启动slave start,并执行show slave status\g查看mysql主从状态:

slave  start;
mysql5.7版本为start slave
show  slave  status\g;

查看slave端io线程、sql线程状态均为yes,代表slave已正常连接master实现同步:

slave_io_running: yes
slave_sql_running: yes