• 学习计划 mysql 主从复制


    网上资料繁多,需要跳多少坑才能实现,跳跳就知道了。

    --

    主从复制

    如题:主数据库进行的操作,从数据库进行备份。

    --

    原理

    有关于这方面的原理网上也是一搜一大片,去看看吧。肯定没错。

    这里简单说一下数据库是如何进行复制的呢?这里做一个比喻。

    例如:

      你想盗一个 QQ 号!

      你认识了这个网吧的网管,交待他。偷偷的把账号密码记下来。

      网管蹲在他的身后,记录下了他的 QQ 账号和密码!

      你晚上找网管,拿到了QQ!  

    如果我们反推我们的备份数据库呢?

      在开启一个主从后,当你的主数据发生改变。就会启动一个线程记录你在主数据的操作【二进制文件】,同时从数据会得到这个文件,并在数据库操作。

      讲的比较糙,详细的原理可以看一下原理,真的很多。

    --

    实践

    俗话说理论指导实践,理论已经有了,那么我们开始搭建一个简单的 主从复制 !

    准备两台虚拟机:

      这里推荐裸机装 mysql 【我的试验机是 ubuntu16-04;mysql 版本为 5.7】

    条件

    两主机一定是网络没问题的,可以 ping 通的。

    --

    配置主机【Master】

    主要配置的参数有两个:

     

    server-id  唯一性,注意这里一定要和 从机 不同【一定是唯一的】
    log_bin    这里也就是记录的二进制文件,也就是上面说的小本本

    添加用户,并赋予权限,也就是我们之前说的 网管

    mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';#创建用户
    mysql> GRANT REPLICATION ALL ON *.* TO 'repl'@'%';#分配权限
    mysql>flush privileges;   #刷新权限

    设置好了之后,重启我们的 Mysql 服务

    sudo service mysql restart

    注意:这里 从机 一定要可以连接主机数据库。

    如果不能连接,注释掉
    #bind-address           = 127.0.0.1
    再试试?
    

    如果你的主机设置好了,并且从机也可以连接了,那么我们就可以开始设置从机了.

    这里我们在主机上找到我们的文件位置和文件,在连接从机时会使用

    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | wq_msg.000004 |      415 |              |                  |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)  

    --

    配置从机【Slave】

    设置 server-id

    [mysqld]
    server-id=2 #设置server-id,必须唯一

    重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

    mysql> CHANGE MASTER TO
        ->     MASTER_HOST='182.92.172.80',
        ->     MASTER_USER='rep1',
        ->     MASTER_PASSWORD='slavepass',
        ->     MASTER_LOG_FILE='wq_msg.000004',
        ->     MASTER_LOG_POS=415;
    

    设置好之后启动我们的 slave 同步进程。

    mysql>start slave;

    之后我们一定要看状态

    mysql> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 182.92.172.80
                      Master_User: rep1
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-.000013
              Read_Master_Log_Pos: 11662
                   Relay_Log_File: mysqld-relay-bin.000022
                    Relay_Log_Pos: 415
            Relay_Master_Log_File: wq_msg_000004
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
            ...
    

    主要看这两个参数 Slave_IO_Running 和 Slave_SQL_Running ,都为 OK 时候说明没问题了。

    如果有问题!看日志!一定看日志

    --

    这里我说一下我碰到的问题。

    1:日志报错 UUID 错误

      在 mysql5.6 之后,虽然是以server-id 为唯一标识,但是最后是以 UUID 为标识进行处理。之前我的测试环境是拷贝了两个一样的 mysql Docker 导致UUID一样。无法同步。

      查看UUID

    mysql> show variables like '%server_uuid%';
    

      主从一定要不同!

    2:docker问题

      还是环境问题,用的 Docker 虽然端口 3306 映射了出去,但是二进制文件并未映射。导致报错。

    如果还有什么问题的话。

    看日志!一定日志

    --

    这里只说了最基本的配置怎么完成,该学习的还有很多。下面扩展一些阅读和问题。之后我也会慢慢学习。

    1、主从的好处是?
    2、主从的原理是?
    3、从数据库的读的延迟问题了解吗?如何解决?
    4、做主从后主服务器挂了怎么办?

    --

    参考:

    MySQL主从复制(Master-Slave)实践

  • 相关阅读:
    阿里云nginx创建多站点
    linux 卸载php mysql apache
    centos php环境搭建
    jquery simple modal
    nodejs 安装express
    nodejs fs.open
    nodejs supervisor
    nodejs 运行
    nodejs shell
    PHP array_pad()
  • 原文地址:https://www.cnblogs.com/25-lH/p/8781127.html
Copyright © 2020-2023  润新知