美文网首页mysql 知识库程序员
mysql高可用性之主从复制

mysql高可用性之主从复制

作者: 阿卡摩西 | 来源:发表于2018-03-08 20:19 被阅读123次

    1.主从原理

    image.png
    从库生成两个线程,一个I/O线程,一个SQL线程;
    i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
    主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
    SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

    2.主从用途
    mysql主从复制用途

    • 实时灾备,用于故障切换
    • 读写分离,提供查询服务
    • 备份,避免影响业务

    3.基础配置
    环境 Linux centos 7+
    A主数据库IP:192.168.111.111;

    B从数据库IP:192.168.111.116;

    4.配置主数据库A

    启动mariadb.service;

    1.添加一个同步账户

    GRANT FILE ON . TO ‘yezt’@'192.168.111.116' IDENTIFIED BY ‘123456’;

    GRANT REPLICATION SLAVE ON . TO ‘yezt’@'192.168.111.116' IDENTIFIED BY ‘123456’;

    创建A数据库用户

    create user 'yezt'@'%' identidied by '123456';

    授权用户

    grant all privileges on . to 'yezt'@'%' with grant option

    2.添加一个数据库作为同步数据库

    create database test;

    3.创建一个表结构

    create table mytest (username varchar(20),password varchar(20));

    4.修改配置文件(/etc/my.cnf)

    [mysqld]

    server-id=1

    log-bin=mysql-bin

    binlog-do-db=test #要同步的数据库

    5.重启服务

    systemctl restart mariadb.service

    进入数据库查看server-id;

    mariadb>show variables like 'server_id';

    image.png

    6.用show master status\G命令查看日志情况

    image.png

    (可以用flush logs 命令来刷新得到最新的mysql-bin.000008文件)

    5.设置从数据库B为slave

    1.重复A的创建数据库和表结构

    3.修改配置文件

    Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数;如果配置my.cnf会出现 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=192.168.111.111'的错误

    所以只需要配置

    image.png

    之后在数据库执行

    mariadb>change master to master_host='192.168.111.111', master_user='yezt', master_password='123456', master_log_file='mysql-bin.000008', master_log_pos=0;

    (备注:master_log_file需要和主数据库一致,否则重新到A那flush logs,master_log_pos要设置为了,否则开始位置会出问题)

    启动slave

    start slave

    6.用show slave status\G命令查看日志情况

    正常情况如下

    image.png

    不正常时候last_IO_Error会报错

    用生成的账户登录A数据库插入数据

    image.png

    从数据库得到

    image.png

    备注:如果从数据无法连接主数据库,尝试先关闭主数据库的防火墙

    systemctl stop firewalld.service

    相关文章

      网友评论

      • 半夏风痕:请问楼主,这个主数据库的binlog打印的是什么日志?是上层业务操作数据库的日志吗?

      本文标题:mysql高可用性之主从复制

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