• mysql配置多主多从详细步骤及解析


    这里以容器为例来做个实验

    mysql版本是5.29

    centos容器镜像

    节点描述 节点ip  

    节点vip,对接业务

    master1节点 172.17.0.6   vip:172.17.0.11
    master2节点 172.17.0.7  
    slave1节点 172.17.0.8 同步 master1 的数据

    vip:172.17.0.12

    slave2节点

    172.17.0.9 同步master2 的数据

    slave3节点

    172.17.0.10 用于专业的数据库备份  

    master1节点配置

    [root@2cc95893a4c9 /]# cat /etc/my.cnf
    [client]
    port=3306
    socket=/data/mysql/tmp/mysql.sock
    #default-character-set = utf8

    [mysqld]
    ############################ system  ##################################
    server-id                                             = 1
    port                                                  = 3306
    user                                                  = mysql
    read_only                                             = off
    character-set-server                                  = utf8
    socket                                                = /data/mysql/tmp/mysql.sock
    datadir                                               = /data/mysql/data
    basedir                                               = /data/mysql

    auto-increment-increment        = 2  表示自增长字段每次增长的量,默认值是1,取值范围是1~65535.配置双主双从的话;两台的增长量都配置为2。
    auto-increment-offset   = 1  表示自增长字段从哪个字开始,取值范围是1~65535。配置双主双从的话,两台分别配置为1和2.
    ......................................

    .....................................

    重启数据库 : /etc/init/mysqld restart

    配置同步的账户:grant all privileges on *.* to repl@'%' identified by "123456";

    更新:flush privileges;

    如果是生产环境:最好将库锁住,仅仅允许读,以保证数据一致性;待主主同步环境部署后再解锁;
    锁住后,就不能往表里写数据,但是重启mysql服务后就会自动解锁!

    flush tables with read lock;  锁只读

    查看master1上面二进制日志的详细信息

    show  master statusG

    ------------------------------------------------   master 2  配置------------------------------------

    xxxx】cat /etc/my.cnf

    [client]
    port=3306
    socket=/data/mysql/tmp/mysql.sock
    #default-character-set = utf8

    [mysqld]
    ############################ system  ##################################
    server-id                                             = 220
    port                                                  = 3306
    user                                                  = mysql
    read_only                                             = off
    character-set-server                                  = utf8
    socket                                                = /data/mysql/tmp/mysql.sock
    datadir                                               = /data/mysql/data
    basedir                                               = /data/mysql

    auto-increment-increment                              = 2
    auto-increment-offset                                 = 2
    .................................................

    ................................................

    配置同步用户

    grant replication slave,replication client on *.* to repl@'%' identified by "123465";   【解释:如果你之前是认为replication slave 是复制所必须的权限,那么你就错了,为了安全性一般都需要replication slave 。如果单独设置replication slave,replication client 复制其实都可以运行的。mysql有一些特殊的权限允许复制进程运行,运行在从服务器上的I/O线程创建了到master的连接,这就意味着必须在主服务器上创建一个用户并且需要授予特殊的权限。这样I/O线程就会一特定的身份连接到主服务器上并且读取二进制日志。但是需要说明的一点是,复制用户在主服务器上实际只需要replication  client  权限就可以运行的,这里授予replication  slave的原因是用于监视和管理复制账号需要这个权限,并且这两个功能(复制需要的权限,监视和管理复制账号权限)通常是一个账号在管理,而不是为了达到这两个目标而分别设置2个账号。】

    刷新:flush privileges;

    生产环境的话建议将库锁起来,只能读

    flush tables with read lock;

    查看master2的二进制日志情况

    show master status;

    --------------------------------------------  配置master1 同步 master2 的数据   -------------------------------------------------------------------

    unlock tables; //先解锁,将对方数据同步到自己的数据库中用,当然了,如果之前就没有锁的话就不用解锁了。

    slave stop;停slave同步,一般之前没有配置slave的话也不用这个操作。

    change master to master_host='172.17.0.7',master_user='repl',master_password='12346',master_log_file='mysql-bin.000001',master_log_pos=430;   这个就是配置master1 去同步 master2 的数据了。

    start slave; 开启slave同步。

    --------------------------------------------  配置master2 同步 master1 的数据   -------------------------------------------------------------------

    unlock tables; //先解锁,将对方数据同步到自己的数据库中用,当然了,如果之前就没有锁的话就不用解锁了。

    slave stop;停slave同步,一般之前没有配置slave的话也不用这个操作。

    change master to master_host='172.17.0.6',master_user='repl',master_password='12346',master_log_file='mysql-bin.000001',master_log_pos=430;   这个就是配置master1 去同步 master2 的数据了。

    start slave; 开启slave同步。

    --------------------------------------------  配置slave1 同步 master1 的数据   -------------------------------------------------------------------

    unlock tables; //先解锁,将对方数据同步到自己的数据库中用,当然了,如果之前就没有锁的话就不用解锁了。

    slave stop;停slave同步,一般之前没有配置slave的话也不用这个操作。

    change master to master_host='172.17.0.6',master_user='repl',master_password='12346',master_log_file='mysql-bin.000001',master_log_pos=430;   这个就是配置master1 去同步 master2 的数据了。

    start slave; 开启slave同步。

    --------------------------------------------  配置slave2 同步 master2 的数据   -------------------------------------------------------------------

    unlock tables; //先解锁,将对方数据同步到自己的数据库中用,当然了,如果之前就没有锁的话就不用解锁了。

    slave stop;停slave同步,一般之前没有配置slave的话也不用这个操作。

    change master to master_host='172.17.0.7',master_user='repl',master_password='12346',master_log_file='mysql-bin.000001',master_log_pos=430;   这个就是配置master1 去同步 master2 的数据了。

    start slave; 开启slave同步。

    --------------------------------------------  配置slave3 同步 master1 的数据   -------------------------------------------------------------------

    unlock tables; //先解锁,将对方数据同步到自己的数据库中用,当然了,如果之前就没有锁的话就不用解锁了。

    slave stop;停slave同步,一般之前没有配置slave的话也不用这个操作。

    change master to master_host='172.17.0.6',master_user='repl',master_password='12346',master_log_file='mysql-bin.000001',master_log_pos=430;   这个就是配置master1 去同步 master2 的数据了。

    start slave; 开启slave同步。

  • 相关阅读:
    Nginx PHP页面找不到总是返回404
    Bing每日一图
    Vue3
    PHP PDO相关
    IIS 搭建FTP
    vue根据环境不同设置不同的入口文件
    Vue生成打包报告
    Vue项目在执行build命令期间中移除所有consol.log
    Nprogress 的使用
    Vue报错处理
  • 原文地址:https://www.cnblogs.com/xingyunfashi/p/13554896.html
Copyright © 2020-2023  润新知