主从复制原理

从机会从主机读取binlog来进行数据同步

 

  • 主库线程发现从库线程连接的时候,主库可以将二进制日志发送给从库

  • 从库通过主库的dump线程同步主库的binlog二进制文件

  • 从库通过I/O线程写入到中继日志中,SQL线程读取中继日志执行日志中的事件,将从库中的数据与主库保持同步

三个步骤:

  • Master将写操作记录到binlog

  • Slave将Master的binlog拷贝到中继日志

  • Slave执行中继日志的事件,改变自己的数据库

  1. 安装wget依赖

    yum install wget -y

  2. 下载mysql5.7.26到data目录

    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

  3. 解压mysql

    tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

  4. 修改mysql文件夹

    mv mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mysql-5.7.26

  5. 创建mysql数据存储文件

    cd /mysql-5.7.26

    mkdir data

    chmod -R 777 /data/mysql-5.7.26/data/

  6. 创建组和用户,并将用户加入组

    groupadd mysql

    useradd -g mysql mysql

  7. 修改mysql配置文件

    vi /etc/my.cnf

    [mysqld]
    bind-address=0.0.0.0
    port=3306
    #skip-grant-tables
    user=mysql
    basedir=/data/mysql-5.7.26
    datadir=/data/mysql-5.7.26/data
    socket=/tmp/mysql.sock
    log-error=/data/mysql-5.7.26/data/mysql.err
    pid-file=/data/mysql-5.7.26/data/mysql.pid
    #character config
    character_set_server=utf8mb4
    symbolic-links=0
    explicit_defaults_for_timestamp=true

     

  8. 进入bin目录,初始化mysql

    cd /data/mysql2.7.26/bin

    ./mysqld --initialize --user=mysql --datadir=/data/mysql-5.7.26/data/ --basedir=/data/mysql-5.7.26/

  9. 查看mysql初始化密码

    cat /data/mysql-5.7.26/data/mysql.err

  10. 添加软链接,可以在任意目录执行mysql命令

    ln -s /data/mysql-5.7.26/support-files/mysql.server /etc/init.d/mysql

    ln -s /data/mysql-5.7.26/bin/mysql /usr/bin/mysql

    service mysql restart

  11. 登录mysql修改密码

    vi /etc/my.cnf

    去掉#skip-grant-tables的注释

    mysql -u root -p

    use mysql

    修改密码

    update user set authentication_string=password('Pw!123456') where user='root';

    |alter user USER() identified by 'Pw!123456';

    开启远程访问权限

    update user set host ='%' where user ='root';

    刷新权限

    flush privileges;

    重启mysql

    service mysql restart

  12. 将mysql端口加入防火墙的白名单

    firewall-cmd --zone=public --add-port=3306/tcp --permanent

    systemctl restart firewalld.service

  13. 修改主库的my.cnf文件

    #------------- 主从复制配置 start ----------------
    log-bin = mysql-bin   # 开启二进制日志,保存到.../mysql-bin中
    server-id = 1                           # 设置主服务器的ID(不能重复,建议使用ip的最后一段)    
    innodb_flush_log_at_trx_commit=1           # 每次commit 日志缓存中的数据刷到磁盘中。通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力
    sync_binlog=1                             # 开启binlog同步功能,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘
    # binlog-ignore-db 表示同步的时候忽略的数据库,忽略几个就写几个,如果使用binlog-do-db指定要同步的数据库,这些可以不设置
  14. 重启MySQL验证

    service mysql restart

    mysql -u root -p

    查看二进制日志是否开启

    show global variables like '%log_bin%';

    log_bin value 等于ON 说明开启

    查看主节点二进制日志列表 (以后会有多个)

    show master logs;

    查看主节点的serverid

    show global variables like '%server%';

  15. 在mysql中创建从服务器的用户和权限

    GRANT REPLICATION SLAVE ON . TO 'slave1'@'%' IDENTIFIED BY 'abc123';

    flush privileges;

  16. 查看主库信息

    show master status;

  17. 从服务器配置

    修改my.cnf文件

    server-id=2 #不能和主节点的id重复

     

  18. 重启mysql

    service mysql restart

  19. 查看中继日志是否开启

    show global variables like '%log%';

  20. 设置从库访问主库

    1. 暂停同步

      stop slave;

    2. 链接主库

      change master to master_host='192.168.0.102',master_user='slave1',master_password='abc123',master_log_file='mysql-bin.000001', master_log_pos=154;

      参数说明
      master_host='192.168.0.102',     主库ip地址
      master_user='slave1',   设置的账号
      master_password='abc123', 密码
      master_log_file='mysql-bin.000001',   上面查询到的File字段值
      master_log_pos=154;     上面查询到的Position字段值

       

    3. 查询同步信息是否成功

      show slave status\G;

       

      Slave_IO_Running,Slave_SQL_Running 都为Yes的时候表示配置成功

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes

  21. 设置开机自启动

    查看自启动的服务

    chkconfig --list

  22. 设置自启动

    cd /etc/rc.d/init.d

    cp /data/mysql-5.7.26/support-files/mysql.server /etc/rc.d/init.d/

    赋予可执行权限:chmod +x /etc/init.d/mysql.server

    添加为服务: chkconfig --add mysql.server

  23.  

 

posted on 2022-07-06 12:25  白糖℃  阅读(713)  评论(0编辑  收藏  举报