vlambda博客
学习文章列表

Mysql8.0配置主从复制

概要

将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的起始位置,同步复制到从数据库中,使得主从数据库保持一致。
主从复制的作用
  • 1.高可用性:主数据库异常可切换到从数据库

  • 2.负载均衡:实现读写分离

  • 3.备份:进行日常备份

    配置过程


    (一) 一主一从配置

    1.服务器准备

  •     -- 这里用的是linux centos7,其他linux系统大同小异    

    服务器IP                             角色
    192.168.217.129 Master1(主)
    192.168.217.128 Slave1(从)

    2.数据库安装(mysql8.0)

      两台服务器都安装mysql8.0,安装过程这里不再多说,自行百度

      安装完后,配置 my.cnf

      (1) 主库配置

          

    vi /etc/my.cnf
    # 清空,使用下面内容[mysqld]basedir=/usr/local/mysql-8.0.20datadir=/usr/local/mysql-8.0.20/datacharacter-set-server=utf8lower-case-table-names=1default_authentication_plugin=mysql_native_password# 主从复制-主机配置# 主服务器唯一IDserver-id=1# 启用二进制日志log-bin=mysql-bin# 设置不要复制的数据库(可设置多个)binlog-ignore-db=sysbinlog-ignore-db=mysqlbinlog-ignore-db=information_schemabinlog-ignore-db=performance_schema# 设置需要复制的数据库(可设置多个)binlog-do-db=test# 设置logbin格式binlog_format=STATEMENT

     (2) 从库配置

    vi /etc/my.cnf
    # 清空,使用下面内容[mysqld]basedir=/usr/local/mysql-8.0.20datadir=/usr/local/mysql-8.0.20/datacharacter-set-server=utf8lower-case-table-names=1default_authentication_plugin=mysql_native_password
    # 主从复制-从机配置# 从服务器唯一IDserver-id=2# 启用中继日志relay-log=mysql-relay

    3.关闭主从数据库服务器防火墙或开放3306端口



    # 查看防火墙状态systemctl status firewalld# 关闭防火墙systemctl stop firewalld


    4.验证主从库是否可互相远程连接

    # 主数据库服务器测试从数据库mysql -uroot -p -h192.168.217.128 -P3306# 从数据库服务器测试主数据库mysql -uroot -p -h192.168.217.129 -P3306

    5.主数据库创建用户slave并授权

    # ======在主数据库端(192.168.217.129)# 登录mysql -uroot -p
    # 创建用户create user 'slave'@'%' identified with mysql_native_password by 'password';
    # 授权grant replication slave on *.* to 'slave'@'%';
    # 刷新权限flush privileges;

    # ======在从数据库端(192.168.217.128)# 验证 主数据库slave用户是否可用mysql -uslave -p -h192.168.217.129 -P3306

    6.配置主从节点信息

    # ======在主数据库端(192.168.217.129)# 查询服务ID及Master状态# 登录mysql -uroot -p# 查询server_id是否可配置文件中一致show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)set global server_id = 1;# 查询Master状态,并记录 File(对应下一步中的master_log_file)# 和 Position (对应下一步中的master_log_pos)的值show master status;
    # 注意:执行完此步骤后退出主数据库,# 防止再次操作导致 File 和 Position 的值发生变化

    # ======在从数据库端(192.168.217.128)# 登录mysql -uroot -p# 查询server_id是否可配置文件中一致show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)set global server_id = 2;
    # 设置主数据库参数(用上一步创建的slave用户及密码)change master to master_host='192.168.217.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;# 开始同步start slave;# 若出现错误,则停止同步,重置后再次启动stop slave;reset slave;start slave;# 查询Slave状态show slave status\G# 查看是否配置成功# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值

    最后就自己去测试主从复制是否成功!