• MySQL5.7主从复制


      本文所用MySQL版本是5.7.30,主机IP是192.168.43.151,从机IP是192.168.43.152。

      1、主机配置

      1)备份配置文件

    cp /etc/my.cnf /etc/my.cnf.bak

      2)修改配置文件

    #数据库安装后默认部分
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    validate-password=OFF
    symbolic-links=0
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    #开启binlog日志
    server-id = 151
    log_bin=mysql-bin
    
    #主从复制,主机部分
    #需要进行复制的数据库
    #binlog-do-db=mydb1
    #不需要复制的数据库
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    #为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1m
    #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
    expire_logs_days=7
    #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    #如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062

      3)重启数据库

    systemctl restart mysqld

      2、从机配置

      1)备份配置文件,如主机部分

      2)修改配置文件

    #数据库安装后默认部分
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    validate-password=OFF
    symbolic-links=0
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    #配置server-id
    server-id = 152
    #log_bin=mysql-bin
    
    #主从复制,从机部分
    #为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1m
    binlog_format=mixed
    #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
    expire_logs_days=7
    #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    #如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    relay_log=dev-relay-bin
    #read_only=1
    super_read_only=1

      3)重启数据库,如主机部分

      3、准备数据

      1)主机建库、建表、准备数据

    CREATE DATABASE IF NOT EXISTS mydb1 DEFAULT CHARACTER SET utf8;
    
    USE mydb1;
    
    DROP TABLE IF EXISTS student;
    CREATE TABLE student (
      id int(11) DEFAULT NULL,
      name varchar(20) DEFAULT NULL,
      age int(11) DEFAULT NULL,
      sex varchar(20) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO student VALUES ('1', 'a1', '18', '男');
    INSERT INTO student VALUES ('2', 'a2', '16', '女');
    INSERT INTO student VALUES ('3', 'a3', '17', '男');
    INSERT INTO student VALUES ('4', 'a4', '17', '女');
    INSERT INTO student VALUES ('5', 'a5', '18', '男');
    INSERT INTO student VALUES ('6', 'a6', '19', '女');

      2)主机导出数据

    mysqldump -uroot -p123456 mydb1 > /var/mysql/backup/mydb1_$(date +%Y%m%d_%H%M%S).sql

      3)从机导入数据

    mysql> source /tmp/mydb1_20170615_122859.sql;

      备注:导入之前先要创建数据库

      4、演示主从复制

      1)从机连接主机

      首先在主机上确定主机当前的日志文件,和文件起始位置(最好刷新日志,否则可能出现问题,比如没创建表却插入等)。

    mysql> flush logs;
    mysql> show master status;

      

      在从机上执行连接语句:

    change master to master_host='192.168.43.151',master_user='root',master_password='123456',master_port=3306,
    master_log_file='mysqlbin.000006',master_log_pos=154,master_connect_retry=30;

      2)查看从机状态

    mysql> show slave status G;

      

      3)启动从机并再次查看从机状态,看到两个Yes说明成功

    mysql> start slave;
    mysql> show slave status G;

      

      4)主机写入数据,从机会同步数据

    INSERT INTO student VALUES ('7', 'a7', '20', '男');
    INSERT INTO student VALUES ('8', 'a8', '20', '女');

      

       

      5)从机不能写数据

      

      备注:

      1)正常情况下应该在主机上新建用户,然后授权,而不是直接使用root用户(我之前给所有机器授了所有权限)。

    grant replication slave, replication client on *.* to 'repl'@'192.168.43.152' identified by '123456';
    flush privileges;

      2)配置文件my.cnf中设置read_only=1,只能控制普通用户只读,控制root用户要设置super_read_only=1。

  • 相关阅读:
    微信开发 提示 Redirect_uri(错误10003)
    Windows激活
    百度区块链的数字宠物狗——莱茨狗
    导出数据之CSV[PHP]
    Mongo安装与使用
    开发神器之phpstorm破解与日常使用
    php常用方法
    开发工具之Sublime编辑器
    文件搜索神器之everything
    docker之基本命令(1)
  • 原文地址:https://www.cnblogs.com/javasl/p/10544923.html
Copyright © 2020-2023  润新知