美文网首页
MySQL主主复制详细教程

MySQL主主复制详细教程

作者: 文知道 | 来源:发表于2020-07-22 11:38 被阅读0次

    配置说明

    主数据库1: 192.168.245.22
    主数据库2: 192.168.245.33

    1、修改MySQL配置文件:

    vi /etc/my.cnf
    
    • 主数据库1:
    server-id=1
    log-bin=mysql-bin
    auto_increment_increment=2
    auto_increment_offset=1
    binlog-ignore=mysql
    binlog-ignore=information_schema
    binlog-ignore=performance_schema
    character_set_server=utf8
    log-bin-trust-function-creators=1
    
    • 主数据库2:
    port=3305
    server-id=2
    log-bin=mysql-bin
    auto_increment_increment=2
    auto_increment_offset=2
    binlog-ignore=mysql
    binlog-ignore=information_schema
    binlog-ignore=performance_schema
    character_set_server=utf8
    log-bin-trust-function-creators=1
    
    这里对上述添加的配置做详细说明:
    1. log_bin 启动mysql二进制日志,如果没有配置这个将无法远程链接
    2. binlog-ignore 指定不同步的数据库,如果有多个数据库不需要同步可以多个分别声明
    3. character_set_server=utf8 指定utf8为默认字符集
    4. server-id 可以为任意自然数,必须保证两台mysql主机不重复
    5. auto_increment_increment=2 步进值auto_imcrement。一般有n台主MySQL就填n
    6. auto_increment_offset 设定数据库中自动增长的起点,两台mysql的起点必须不同,这样才能避免两台服务器同步时出现主键冲突
    7. replicate-do-db 要同步的数据库,如果需要就填,指定数据库的名称即可,默认为所有库,声明了不同步就默认除了不同步数据库意外的所有库。这里我没写。
    8. log-bin-trust-function-creators=1 在默认情况下mysql会阻止主从同步的数据库function的创建,这会导致我们在导入sql文件时如果有创建function或者使用function的语句将会报错。

    3、重启mysql

    • 主数据库1:
    systemctl restart mysqld
    
    • 主数据库2:
    systemctl restart mysqld
    

    4、授权两个数据库相互授权

    • 主数据库1:新建数据库的用户,并进行相互授权
    mysql -uroot -p //进入mysql
    grant replication slave, replication client on *.* to '新用户名'@'主数据库2的IP' identified by '新密码'
    flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接
    
    • 主数据库2:新建数据库的用户,并进行相互授权
    mysql -uroot -p //进入mysql
    grant replication slave, replication client on *.* to '新用户名'@'主数据库1的IP' identified by '新密码'
    flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接
    

    5、分别查看两台主机的日志节点

    show master status;
    

    6、相互设置同步的日志节点

    • 主数据库1
    change master to 
    master_host='192.168.245.33', 
    master_user='主数据库2用户名',
    master_password='主数据库2密码',
    master_log_file='mysql-bin.000004', //对应主数据库2的File字段
    master_log_pos=2873;  //对应主数据库2的Position字段
    
    • 主数据库2
    change master to 
    master_host='192.168.245.22', 
    master_user='主数据库1用户名',
    master_password='主数据库1密码',
    master_log_file='mysql-bin.000004', //对应主数据库1的File字段
    master_log_pos=2873;  //对应主数据库1的Position字段
    
    说明:
    • 所有的内容都是另一台主机的内容,log_file和log_pos对于另一台主机的日志节点。还有,必须要说明的是,每次“flush privileges”和“stop slave”后日志节点的内容会改变,所以如果不确定,每次执行此操作前必须要查看日志节点——show master status。另外,执行此操作时slave必须没有启动,如果之前执行了,那就先停止,指令:stop slave;

    7、在两台主机上启动slave服务

    start slave;
    
    • 出现下图所示,表示成功


    可能遇到的问题

    • master and slave have equal MySQL server UUIDs
      原因是:服务器的数据库UUID重复了,一般是虚拟机直接克隆会导致重复,数据库UUID存在auto.cnf里
      解决:
    find/ -name auto.cnf //查找auto.cnf 的位置
    mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak // 备份auto.cnf 
    systemctl restart mysqld // 重启mysqld,会自动生成新的auto.cnf
    

    相关文章

      网友评论

          本文标题:MySQL主主复制详细教程

          本文链接:https://www.haomeiwen.com/subject/kxrzkktx.html