Mysql主从复制(同步原理及搭建过程)

    一个网站,最重要的就是它上边的数据,但是当有一天数据库挂掉了,将影响整个网站的正常运行,mysql的主从复制能够很好的解决这个问题,mysql主从复制就是,将一个主数据库服务器(Master)的数据同步到另一个备用数据库服务器(Slave)上,当正在使用的数据库服务器因故障当机时,我们可以把网站数据指向另一个拥有同样数据的数据库服务器上,快速的恢复网站数据。

技术分享

一.Mysql主从复制原理:

  1. 在master上开启log-bin日志功能,记录数据库的操作信息,包括更新,插入,删除等。

  2. 主从复制用三个线程实现,即Master上的IO线程,Slave上的IO线程和SQL线程。

  3. Slave上的IO线程连接Master,Master通过自己的IO线程检测到有Slave发来的请求,请求log-bin日志。

  4. Master将log-bin日志返回给Slave,Slave将日志下载到本地的realy_log里面写入一个master-info日志记录同步的pos点。

  5. Slave的SQL线程检测到realy-log日志有更新,然后在本地执行新增的操作信息。

    注:主从同步为异步同步方式,Master上数据更新后Slave上才会更新同步数据。


二.Mysql主从配置:

  1. Master配置:

    vi /etc/my.cnf修改字段


[mysqld]

datadir=/var/lib/mysql    #数据目录

socket=/var/lib/mysql/mysql.sock

user=mysql    #用户名

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-bin=mysql-bin    #开启log-bin功能

server-id = 1    #设置server-id,Master上server-id设置的数字优先级要高于Slave

auto_increment_offset=1

auto_increment_increment=2


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

replicate-do-db=all    #需要同步的数据库,多个用逗号隔开,这里all为所有数据库


2.Slave配置:

    vi /etc/my.cnf修改字段

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id = 2

auto_increment_offset=2

auto_increment_increment=2

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

replicate-do-db=all


3.在Master的mysql中为Slave的同步授权:

    mysql> grant replication slave on *.* to ‘tongbu‘@‘192.168.1.103‘ identified by "liupengfang";

4.在Master上查询master状态:    

    mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      272 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

记录mysql-bin点和Position点。

5.在Slave上指定master:

    mysql> change master to master_host=‘192.168.1.102‘,master_user=‘tongbu‘,master_password=‘liupengfang‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=272;

6.Slave上启动slave:

    mysql> start slave;

7.查看主从同步状态:

    mysql> show slave status \G

如果如下两个字段状态都为YES,则主从同步建立完成。    

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

三.测试:

1.在Master上数据库创建一个数据库并查看master状态:

mysql> create database tomcat charset=utf8;

    mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      572 |              |                  |

+------------------+----------+--------------+------------------+

 Position 的点发生变化

2.在Slave上查看是否有该数据库并查看master状态:

    mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| test               |

| tomcat             |

+--------------------+

可见Slave上已经把Master上数据同步到本地。
















本文出自 “IT网络” 博客,请务必保留此出处http://lpf1015.blog.51cto.com/6627801/1660657

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。