MySQL-主从复制

一、什么是主从复制

        从数据库构建与主数据库完全一样的数据库环境的操作即为主从复制。从库会生成两个线程,一个I/O线程,一个SQL线程; I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中; 主库会生成一个log dump线程, 用来给从库I/O线程传binlog; SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行。

二、主从复制的好处

1.当主数据库崩了之后,可以快速切换至从数据库即使止损
2.基于主从复制,可以实现读写分离(主数据库负责增删改的操作,从数据库负责读的操作),进而衍生更多的配置方案:多主一从,一主多从,多主多从。在高并发时实现数据库之间的负载均衡
3.数据的备份。

三、主从复制的实现

1.必备条件

        ① 两个centos系统向分别安装相同版本的MySQL
        ② 启动MySQL
        ③ 两个MySQL均已修改初始密码

2.开始配置

    第一步:分别启动两个MySQL

    命令如下,启动后记得查看数据库状态:

// 启动MySQL
systemctl start mysqld

// 查看运行状态
systemctl status mysqld

    出现如下,便为MySQL正常运行:在这里插入图片描述

    第二步:分别查看两个MySQL服务器的ip

    命令如下:

// 查看ip地址
ip addr show

    记住两个服务器的ip,配置从服务器的时候有用:
在这里插入图片描述

    第三步:修改主数据库master

注:从这里开始你就要注意了,因为现在你要选择哪台数据库服务器作为主库的服务器
    使用vi命令或者xftp之类的软件修改  /etc/my.cnf  文件
增加如下代码:

#开启二进制日志
log-bin=mysql-bin //[必须]启用二进制日志

#服务器唯一ID,取IP最后一段(数据库所在服务器的IP,不要搞错)
#例如:上一步可以找到这个数据库所在服务器的IP192.168.254.131,那么server-id就配置成131即可
server-id=131

    第四步:修改从数据库slave

    同第三步操作,

#开启二进制日志
log-bin=mysql-bin //[必须]启用二进制日志

#服务器唯一ID,取IP最后一段,(数据库所在服务器的IP,不要搞错)
server-id=130

    第五步:分别重启MySQL服务

// 重启MySQL
systemctl restart mysqld

// 别忘记查询一下状态
systemctl status mysqld

    第六步:主库服务器建立帐户并授权slave

// 主库服务器进入数据库
mysql -uroot -p接上你的数据库密码

// 建立帐户并授权slave,需要指定IP就把 % 改为需要指定的IP
mysql> GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';

    执行成功结果如下:
在这里插入图片描述
    配置好后,不要退出数据库,查询一下master的状态,代码如下:

// 查询master状态
mysql> show master status;

    结果如下:在这里插入图片描述
    主库的服务器到此就不用动了,到了这里我们可以知道主服务器的信息
        IP:在第二步
        已授权slave的账号:在第六步
        已授权slave的密码:在第六步
        主库日志文件:在第六步
        主库日志文件位置:在第六步

    第七步:配置从库slave

// 从库服务器进入数据库
mysql -uroot -p接上你的数据库密码

// 配置slave,
mysql> change master to master_host='主库服务器IP',master_user='已授权slave的账号',master_password='已授权slave的密码',
    -> master_log_file='主库日志文件',master_log_pos=主库日志文件位置(没有引号);

    结果如下:
在这里插入图片描述
    启动从库复制功能

// 启动从服务器复制功能
mysql> start slave

    第八步:查看从库的复制功能状态

// 查看从库的复制功能状态
mysql> show slave status\G

    结果如下:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.254.130
                  Master_User: connect
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 432
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             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: 432
              Relay_Log_Space: 531
              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: 130
                  Master_UUID: 1a6bba57-3521-11eb-a77b-000c292e5e29
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           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
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version:

    看到Slave_IO_RunningYesSlave_SQL_Running:均为Yes,那恭喜你,配置有效!你可以在主库中进行建库,建表,插入数据等操作,看一下从库是否会跟着改变!
    收工!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值