美文网首页
mysql5.7.2 主从复制

mysql5.7.2 主从复制

作者: baiyongjie | 来源:发表于2019-01-30 16:21 被阅读49次
主从复制:
是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;
主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:
   1) 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
   2) 可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;

mysql支持的复制类型:
  基于语句复制:主执行什么语句从就执行什么语句
  基于行的复制:把改变的内容复制过去,而不是复制语句,数据较为精准
  混合类型复制:先语句复制,语句无法执行在执行行数据复制

mysql主从复制工作原理:
  1) 事务更新数据完成之前,Master在二进制日志记录这些改变,写进二进制日志后,提交事务
  2) Slave将Master的Binary log复制到其中继日志,Slave开启一个I/O线程,I/O线程在Master打开一个普通连接,
     然后开始讲Binary log转为存储过程,存储过程从Master的二进制日子中读取事件,
     同步完成就进入睡眠并等待Master产生新的事件。

实验环境:

  • 系统:CentOS Linux release 7.3.1611 (Core)
  • MySQL version:5.7.20
  • MySQL Master:10.208.0.10
  • MySQL Slave:10.208.0.11

Master配置

# 修改my.cnf文件
server_id=1
#开启binlog日志
log-bin=/data/mysql_binlog/mysql-bin
log-bin_index=/data/mysql_binlog/mysql-bin.index
#需要同步的数据库
binlog-do-db=learn
#不需要同步的数据库,可以设置多个数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#二进制日志自动删除/过期的天数,默认不自动删除
expire_logs_days=7

#重启mysql
/etc/init.d/mysqld  restart

#创建个空数据库
mysql -uroot -pbaiyongjie
mysql> create database learn DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#创建slave用户
mysql> grant replication slave, replication client on *.* to 'myslave'@'10.241.0.11' identified by '123456';
mysql> flush privileges;

#查看master状态
mysql> show master status;
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            | Executed_Gtid_Set                         |
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+
| mysql-bin.000002 |     4464 | learn        | mysql,information_schema,performance_schema | cea1268e-c2c9-11e8-9e7d-00502ab853ae:1-19 |
+------------------+----------+--------------+---------------------------------------------+-------------------------------------------+

Slave配置

# 修改my.cnf文件
server-id = 2
log-slave-updates=true
relay-log = /data/mysql_binlog/relay-log
relay-log-index = /data/mysql_binlog/relay-log.index

#重启mysql
/etc/init.d/mysqld  restart


#创建learn数据库
mysql -uroot -pbaiyongjie
mysql> create database learn DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#配置mysql master信息
mysql> change master to master_host='10.241.0.10',master_user='myslave',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=4464,master_connect_retry=30;
mysql> start slave;

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.241.0.10
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 4464
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes  
            Slave_SQL_Running: Yes

#### 参数注释            
Master_Host: 10.241.0.10     //主服务器地址
Master_User: myslave        //授权帐户名,尽量避免使用root
Master_Port: 3306           //数据库端口,部分版本没有此行
Read_Master_Log_Pos: 4464     //同步读取二进制日志的位置
Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。


效验主从同步功能

#在master节点learn库中创建表并插入数据,查看是否会同步到slave节点
mysql -uroot -pbaiyongjie
mysql> use learn
mysql> CREATE TABLE `edu_user` (
     `Id` int(11) NOT NULL AUTO_INCREMENT,
     `userName` varchar(12) NOT NULL DEFAULT '' COMMENT '账号',
     `pwd` varchar(24) NOT NULL DEFAULT '' COMMENT '密码',
     PRIMARY KEY (`Id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户列表';
    
mysql> INSERT INTO `edu_user` VALUES (1,'baiyongjie','com'),(2,'hmm','123456'),(3,'User','1312132');

#在slave节点查询数据是否通过过来
mysql -uroot -pbaiyongjie
mysql> use learn
mysql> show tables;
+-----------------+
| Tables_in_learn |
+-----------------+
| edu_user        |
+-----------------+

mysql> select * from edu_user;
+----+------------+---------+
| Id | userName   | pwd     |
+----+------------+---------+
|  1 | baiyongjie | com     |
|  2 | hmm        | 123456  |
|  3 | User       | 1312132 |
+----+------------+---------+

#在master节点上在更改一条数据, 看看是否会同步过去
mysql> update edu_user set userName='byj' where Id=1;
Query OK, 1 row affected (0.00 sec)

#到从节点查看
mysql> select * from edu_user;
+----+----------+---------+
| Id | userName | pwd     |
+----+----------+---------+
|  1 | byj      | com     |
|  2 | hmm      | 123456  |
|  3 | User     | 1312132 |
+----+----------+---------+

相关文章

  • mysql5.7.2 主从复制

    实验环境: 系统:CentOS Linux release 7.3.1611 (Core) MySQL versi...

  • mysql 主从复制

    mysql 主从复制 网易数据库 石勇 提纲 什么是主从复制 主从复制的原理 主从复制的用途 主从复制的搭建 主从...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • DBA(MySQL)学习-主从复制基础

    1. 主从复制 1.1 介绍 1.2 主从复制的前提(如何搭建主从复制) 2. 搭建主从复制 2.1 搭建多实例 ...

  • MySQL如何配置主从复制,如何修复主从复制出现的异常?

    MySQL如何配置主从复制,如何修复主从复制出现的异常? 一、什么是Mysql主从复制 MySQL主从复制是其最重...

  • Redis的高可用

    Redis主从复制 什么是主从复制 Redis有三种集群方案,主从复制,哨兵,cluster集群,主从复制是指将一...

  • Day011-MySQL主从复制

    1. 主从复制介绍 2. 主从复制的前提(搭建主从复制) 3. 搭建主从复制步骤 3.1 准备多实例 3.2 检查...

  • MySQL主从复制(二)

    主从复制原理 主从复制的前提 主从复制涉及到的文件和线程 主库: 从库: 原理 主从复制实践(生产实践) 主库有数...

  • 八,主从复制

    1,主从复制简介 2,高可用架构方案 3,主从复制前提 4,主从复制搭建 准备多实例 检查配置文件 创建主从复制用...

  • 6. MySQL 主从架构

    7 MySQL 集群Cluster 7.1 主从复制 7.1.1 主从复制原理 主从复制过程: 主节点收到用户请求...

网友评论

      本文标题:mysql5.7.2 主从复制

      本文链接:https://www.haomeiwen.com/subject/wlscsqtx.html