CentOS 7.2下MySQL主从复制配置

MySQL主从原理及过程

原理

MySQL的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。

基本过程

1.Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2.Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

3.Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

4.Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。

Mysql复制的几种模式

.从 MySQL 5.1.12 开始,可以用以下三种模式来实现:

– 基于SQL语句的复制(statement-based replication, SBR),

– 基于行的复制(row-based replication, RBR),

– 混合模式复制(mixed-based replication, MBR)

相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。

设定主从复制模式:
log-bin=mysql-bin

#binlog_format="STATEMENT"

#binlog_format="ROW"

binlog_format="MIXED"

也可以在运行时动态修改binlog的格式。例如
mysql> SET SESSION binlog_format = 'STATEMENT';

mysql> SET SESSION binlog_format = 'ROW';

mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';

mysql主从复制配置

版本:mysql5.7 CentOS7.2

场景描述:
 主数据库服务器:192.168.206.100,MySQL已经安装,并且无应用数据。
 从数据库服务器:192.168.206.200,MySQL已经安装,并且无应用数据。

1 主服务器上进行的操作

启动mysql服务
service mysqld start

通过命令行登录管理MySQL服务器
mysql -uroot -p'new-password'

授权复制权限给从数据库服务器192.168.206.200
mysql> GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.206.200' identified by ‘password’;

查询主数据库状态

配置从服务器时会用到
mysql> show master status;
 +-------------------------+----------+--------------+------------------+-------------------+
 | File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +-------------------------+----------+--------------+------------------+-------------------+
 | mysql-master-bin.000001 | 154 | | | |
 +-------------------------+----------+--------------+------------------+-------------------+

这里需要注意一点,若查询时返回的是
mysql> show slave status;
Empty set (0.01 sec)

这是因为没有开启bin-log造成的,需要去修改/etc/my.cnf文件
server-id =1
log-bin=mysql-master-bin

修改文件时还需要注意一点,mysql5.7之后,开启binlog时还需要同时指定server-id,否则会报错

2 配置从服务器

修改从服务器的配置文件/opt/mysql/etc/my.cnf

将 server-id = 1修改为 server-id = 2,并确保这个ID没有被别的MySQL服务所使用。

启动mysql服务
service mysqld start

登录管理MySQL服务器
mysql -uroot -p'new-password'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/262fbc990c85ef1c36eacd6dcea75411.html