美文网首页
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 主从复制

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