当前位置: 首页 > news >正文

MySQL设置主从复制

主从复制:

单向,双向,环形,级联,一主多从

双机复制的5种情形
1、异步主从(默认常规)
2、双写(前段程序对两个数据库同时写,必须两边都落实,程序才返回成功)
3、利用外挂软件实现实时主库Binlog日志抓取,从而可以在当机的时候补全从库
4、谷歌开发的半同步插件
5、DRBD

主从读写分离
1、通过程序实现(性能,效率最佳,推荐)
php,java等程序可以通过设置多个连接文件轻松实现主从读写分离。
2、通过软件实现读写分离
MySQL-proxy, Amoeba等代理软件也可以实现读写分离功能,但是最好还是程序实现。
3、开发dbproxy
读写分离逻辑图展示:

主从同步原理:
实际上是异步的,即总是主库写完日志,日志才可能被从库应用。
master slave
线程:IO 线程:IO/SQL
开启log-bin 需要设置的启动参数:CHANGE MASTER TO
怎删改会去写log-bin MASTER_HOST='192.168.1.111'
MASTER_PORT=3308
MASTER_USER='alrinrep'
MASTER_PASSWORD='password123'
MASTER_LOG_FILE='mysql-bin.000047'
MASTER_LOG_POS='5632'
开启同步方式:start slave

                从库IO向主库发起复制请求,主库开始对从库认证,通过后主库IO根据从库
                日志要求开始发送bin-log到从库relay-log。一个周期后,从库更新master.info
                ,并重新向主库发起请求。
                SQL线程从relay-log发现新数据,并写到slave的数据文件和日志系统。

                相关语句:--master-data=1,
                CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=1191;
建立相关的账号,即alrinrep
并授予应有的权限

MySQL主从复制原理过程
1、Slave服务器上执行start slave,开启主从复制开关
2、Slave服务器的IO线程会通过在Master上授权的复制用户权限请求连接Master服务器,并请求从指定的bin-log日志文件指定位置
(change master to 命令相关参数)之后发送binlog日志
3、Master服务器接受到来自Slave服务器的IO线程的请求后,Master服务器上负责复制IO线程根据Slave服务器的IO线程请求的信息
读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志的内容外,
还有本次返回日志内容后在Master服务器端的新的binlog文件名称以及在binlog中的下一个指定更新位置
4、当Slave服务器的IO线程获取到来自Master服务器上的IO线程发送的日志以及日志文件及位置点后,将binlog日志内容一次写入到
slave端的Relay log(中继日志)文件(MySQL-relay-bin.xxxxxx)的最后端,并将新的binlog文件名和位置记录到master-info文件
中,以便下一次读取Master端新Binlog日志时能够告诉Master服务器需要从新binlog日志的那个文件哪个文件开始新的binlog内容。
5、Slave服务器端的SQL线程会实时的检测本地relay log中新增的日志内容,然后及时把LOG文件中的内容解析成MASTER端曾经执行过
的SQL语句,并在自身SLAVE服务器上安顺序执行这些SQL。应用玩后清理应用过的日志。
6,经过了上述过程,就可以确保MASTER和SLAVE执行了同样的SQL。在复制正常的情况下,MASTER和SLAVE数据是完全一致的。

主从复制上机实验:

0,环境:3308/3309同机,IP为192.168.199.151
1,修改my.cnf,检查server-id和log-bin,主从server-id必须不同。主库必须开启bin-log
2,添加复制账号和对应的 replication slave 权限

    mysql> select user,host,password from user;
    +-------+-----------+-------------------------------------------+
    | user  | host      | password                                  |
    +-------+-----------+-------------------------------------------+
    | root  | localhost | *A0F874BC7F54EE086FCE60A37CE7887D8B31086B |
    | alrin | %         | *A0F874BC7F54EE086FCE60A37CE7887D8B31086B |
    +-------+-----------+-------------------------------------------+
    2 rows in set (0.00 sec)

    mysql> grant replication slave on *.* to alrinrep@'192.168.199.%' identified by 'password123';
    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show variables like 'log_bin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin       | ON    |
    +---------------+-------+
    1 row in set (0.00 sec)

    mysql> 

3,主库上做备份。先锁表,再备份

    mysql> flush table with read lock;
    Query OK, 0 rows affected (0.03 sec
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000004 |      423 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
新开session窗口后执行备份:

[root@localhost backup]# mysqldump -uroot -ppassword123 -S /data/mysqldata/3308/mysql.sock -A -B --events --master-data=2| gzip > /data/mysqldata/backup/rep.sql.gz

备份后检查:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      423 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
解锁表:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> 

4,从库操作

    mysql> change master to 
        -> MASTER_HOST='192.168.199.151',
        -> MASTER_PORT=3308,
        -> MASTER_USER='alrinrep', 
        -> MASTER_PASSWORD='password123', 
        -> MASTER_LOG_FILE='mysql-bin.000004', 
        -> MASTER_LOG_POS=423;
    Query OK, 0 rows affected, 2 warnings (0.05 sec)

5,开启复制

    mysql> start slave;
    Query OK, 0 rows affected (0.25 sec)

6,检查slave状态:

mysql> show slave status\G
    *************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.199.151
              Master_User: alrinrep
              Master_Port: 3308
            Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 423
               Relay_Log_File: mysql-relay-bin.000002
            Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
               Last_Errno: 0
               Last_Error: 
             Skip_Counter: 0
          Exec_Master_Log_Pos: 423
              Relay_Log_Space: 456
              Until_Condition: None
               Until_Log_File: 
            Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
            Last_IO_Errno: 0
            Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
              Master_UUID: 16b758c5-2455-11e9-8fc6-080027339667
             Master_Info_File: /data/mysqldata/3309/data/master.info
                SQL_Delay: 0
          SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
              Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
            Auto_Position: 0
    1 row in set (0.00 sec)

    mysql> 

7,尝试在主库DDL,检查复制状态
主库:

    mysql> create database alrin;
    Query OK, 1 row affected (0.00 sec)
    从库:
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | alrin              |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)

命令汇总:
1,grant replication slave on . to alrinrep@'192.168.199.%' identified by 'password123';
2,flush table with read lock;
3,show master status;
4,unlock tables;
5,change master to
MASTER_HOST='192.168.199.151',
MASTER_PORT=3308,
MASTER_USER='alrinrep',
MASTER_PASSWORD='password123',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=423;
6,start slave;
7,show slave status\G

转载于:https://blog.51cto.com/accole/2347958

相关文章:

  • 赶紧收藏!新鲜出炉的重庆轨道交通图 首末班时间和线路都在里面
  • 厉害!重庆参加马拉松赛人数7年翻10倍,今年区县马拉松赛事将大增
  • python教程(一)·命令行基本操作
  • TCP三次握手四次挥手
  • C++类中的特殊成员函数
  • ES搜索引擎集群模式搭建【Kibana可视化】
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 有赞电商云应用框架设计
  • JS专题之继承
  • 阿里云服务器怎么升级配置?升级有哪些限制?
  • UniDAC使用教程(五):数据加密
  • React-生命周期杂记
  • 关于VirtualDom的知识点
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • 10个最佳ES6特性 ES7与ES8的特性
  • AHK 中 = 和 == 等比较运算符的用法
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java反射-动态类加载和重新加载
  • Python 反序列化安全问题(二)
  • python学习笔记 - ThreadLocal
  • windows下如何用phpstorm同步测试服务器
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 解析带emoji和链接的聊天系统消息
  • 微信公众号开发小记——5.python微信红包
  • 以太坊客户端Geth命令参数详解
  • 用 Swift 编写面向协议的视图
  • 正则学习笔记
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (C++20) consteval立即函数
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (五)Python 垃圾回收机制
  • (转)h264中avc和flv数据的解析
  • (转)socket Aio demo
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .Net中间语言BeforeFieldInit
  • @ModelAttribute 注解
  • @TableLogic注解说明,以及对增删改查的影响
  • [ 数据结构 - C++] AVL树原理及实现
  • [20180129]bash显示path环境变量.txt
  • [AAuto]给百宝箱增加娱乐功能
  • [C#] 我的log4net使用手册
  • [C++]C++入门--引用