• MySQL 的主从复制(高级篇)


    首先要明白为什么要用 mysql 的主从复制:

    1–在从服务器可以执行查询工作 (即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)

    2–在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)

    3–当主服务器出现问题时,可以切换到从服务器。(提升性能)

    来说一下主从复制的实现原理

     

     

     

    mysql 复制过程分为三步(如上图所示):

    1.mster 将改变记录到二进制日志 (binary log) 当中 这些记录过程叫做二进制日志事件 binary log events;

    2.slave 将 master 的 binary log events 拷贝到它的中继日志 (relay log) 当中;

    3.slave 重做中继日志中的事件 将改变应用到自己的数据库当中 mysql 复制是异步的且串行化的 3.slave 重做中继日志中的事件 将改变应用到自己的数据库当中 mysql 复制是异步的且串行化的

    复制的最大问题:

    从主机复制数据达到从机可能会有延时!

    都说 master 主机和 slave 从机的 mysql 版本号要一致 我就没一致

    master 主机上是 5.6 slave 从机上是 5.7 一样搞

    拿过来一台服务器你不得先找 mysql 吗?mysql 在哪里 配置文件在哪里?

    执行命令:

    which mysql
    /usr/bin/mysql --verbose --help | grep -A 1 'Default options'

    结果如图所示:

     

    先去找 /etc/my.cnf 再去找 /etc/mysql/my.cnf 然后就是后边

    我的是在 /etc/my.cnf

    修改 my.cnf 配置文件如下:

     

    重启 mysql 服务器执行命令:

    service mysqld restart;

    解释:

    server-id=1 // 复制组中的每台服务器都要配置唯一的 Server ID,取值范围是 1 到 (232)−1,你自己决定取值

    log-bin=master-bin // 日志文件名以 “master-bin” 作为前缀

    binlog-do-db=finance_online // 要同步的 finance_online 数据库

    如要同步多个数据库,就多加几个 replicate-db-db = 数据库名

    binlog-ignore-db=mysql // 要忽略的数据库

    read-only // 主机 读写都可以 (必须)

    登录上 mysql 然后执行:

    show master status;

    结果如下:

     

    记住里面的 File 和 Position 的值 待会会用到!

    在主数据中创建一个同步账号(可不创建使用现有的),如果仅仅为了主从复制创建账号,只需要授予 REPLICATION SLAVE 权限

    创建一个账号,账号:zcfz 密码: 123456

    这个账号是专门用来搞主从复制用的哈

    上述 主服务器配置完成

    slave 从服务器配置开始:

     

    重启 mysql 服务器:

    service mysqld restart;

    进入到 slave 从机的 mysql 命令行执行命令:

    stop  slave;

     

    CHANGE MASTER TO MASTER_HOST='10.10.20.120',
    MASTER_USER='zcfz',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='master-bin.000005',
    MASTER_LOG_POS=3878614;
    

    解释:

    MASTER_HOST 就是 master 主服务器的 ip

    MASTER_USER 就是 master 主服务器里面的专门复制复制的用户 zcfz

    MASTER_PASSWORD 就是 zcfz 账户的密码

    MASTER_LOG_FILE 就是我们上边让您保存的 file 对应的值

    MASTER_LOG_POS 就是我们上边让您保存的 Position 的值

    然后执行命令:

    show slave statusG
    

    结果如图所示:

     

    wating for master to send evnet 说明已经在待命状态了

    另外必须注意的是 slave_io_runing 以及 slave_sql_runing 都同时必须为 yes 才行!!!

    截止到此刻说明主从复制的道路打通了!

    然后执行命令:

    start slave;

    验证阶段:

    执行命令创建数据库:

    CREATE DATABASE finance_online DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    这个时候 master 和 slave 上都有了数据库

    然后你再导入数据到 master 主机上的 finance_online 那么 slave 从机上也就有了然后你再导入数据到 master 主机上的 finance_online 那么 slave 从机上也就有了

     

    另外如果你不想复制这个库了 想换一个

    那么去修改 master 主机上的 my.cnf 当中的 binlog-do-db=tprbac 然后重启 mysql 服务

    然后 show master status 看看 file 和 positon

    然后再去 linux 服务器上停止 slave 在 mysql 当中执行 stop slave;

    然后再执行:

    CHANGE MASTER TO MASTER_HOST=’10.10.20.120’,

    MASTER_USER=’zcfz’,

    MASTER_PASSWORD=’123456’,

    MASTER_LOG_FILE=‘你看到的 file’,

    MASTER_LOG_POS = 你看到的 positon;

    然后在 start slave;

    就完事了!

    这样就会主从复制你想要复制的数据库了!!!

  • 相关阅读:
    【Oracle 12c】最新CUUG OCP-071考试题库(58题)
    【Oracle 12c】最新CUUG OCP-071考试题库(57题)
    【Oracle 12c】最新CUUG OCP-071考试题库(56题)
    【Oracle 12c】最新CUUG OCP-071考试题库(55题)
    voip,
    处理xmpp 离线信息,
    流程,xmpp发送信息,
    折腾我几天的 消息状态,
    三者的区别,
    bundle,
  • 原文地址:https://www.cnblogs.com/a609251438/p/12726968.html
Copyright © 2020-2023  润新知