小鱼儿博客

MySQL主从复制

Mysql 主从复制原理:
  1. 在slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制。
  2. slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
  3. master服务器接收到来自slave服务器的IO线程的请求后,二进制转储IO线程会根据slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。
  4. 当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的relaylog(即中继日志)文件(hostname-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master.info文件中,以便下一次读取master端新binlog日志时能告诉master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。
  5. slave服务器端的SQL线程会实时检测本地relaylog 中IO线程新增的日志内容,然后及时把relaylog文件中的内容解析成sql语句,并在自身slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点。

主机环境:

操作系统:Redhat6.5_x64
数据库版本:5.7.35-log
主:192.168.56.103
从:192.168.56.104
主从服务器数据库版本必须一致。

下载地址:https://downloads.mysql.com/archives/community/

一、主库配置

修改主库配置文件,开启binlog,并设置server-id,修改配文件后重启数据库服务

[root@LVS1 ~]# cat /etc/my.cnf

[mysqld]
basedir=/var/lib/mysql/
datadir=/var/lib/mysql/
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
log_bin=/var/lib/mysql/mysqlbin
log_error=/var/log/mysqld.log
server-id=103
#主库读写都可以
read-only=0
#不需要同步的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

#需要同步的数据库
binlog-do-db=liuzz
symbolic-links=0
修改配置文件后,重启服务:
[root@LVS1 ~]# service mysqld restart

创建从库同步帐号

mysql> grant replication slave on *.* to 'rep'@'192.168.56.104' identified by '123456';
mysql> flush privileges;
#取消授权
#mysql> revoke replication slave on *.* from 'rep'@'192.168.56.104';

主数据库进行锁表操作:

mysql> flush tables with read lock;

查看主库二进制日志名和偏移量,为了从库启动时,从这个点进行数据恢复,查看主数据库状态:

mysql> show master status;
+-----------------+----------+--------------+--------------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+-----------------+----------+--------------+--------------------------+-------------------+
| mysqlbin.000005 |    599   | liuzz        | mysql,information_schema |                   |
+-----------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

二、从库配置

修改配置文件/etc/my.cnf

[root@LVS2 ~]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
server-id=104
#开启只读
read-only=1
#开启从库binlog
#bin-log=mysqlbin

配置从库复制位置并开启从库模式:

mysql> 
mysql> change master to master_host='192.168.56.103',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='mysqlbin.000005',
    -> master_log_pos=599;
mysql> start slave;

查看从库状态:

mysql> 
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.56.103
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqlbin.000005
          Read_Master_Log_Pos: 599
               Relay_Log_File: LVS2-relay-bin.000011
                Relay_Log_Pos: 810
        Relay_Master_Log_File: mysqlbin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

当Slave_IO_Running和Slave_SQL_Running都为Yes的时候就表示主从同步设置成功了

取消主库数据锁定:

mysql> unlock tables;


0

用户头像
  
博客所属
博主:liuzz | 小鱼儿
个人: 属鼠 水瓶座
故乡:河北 秦皇岛
现居:中国 北京
职业:IT码农
主页:http://www.liuzz.com
喜欢: 看海、台球
我的简历:My Resume
联系博主
369264776
jun-yuhong#163.com
说点什么 ×