• mysql 5.7主从配置


    1、MySQL主从复制简介

    MySQL主从复制(也称A/B复制、Replication),简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。
    MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
    主从过程大致分为三个步骤:
    1)主将更改操作记录到binlog里;
    2)从将主的binlog事件(SQL语句)同步到从本机上,并记录在relaylog里;
    3)从根据relaylog里面的SQL语句按顺序执行;
    主上有一个log dump线程,用来和从的I/O线程传递binlog
    从上有两个线程,其中I/O线程,用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的SQL语句落地。

    主从配置需要注意的点

    (1)主从服务器操作系统版本和位数一致;
    (2) Master和Slave数据库的版本要一致;
    (3) Master和Slave数据库中的数据要一致;
    (4) Master开启二进制日志,Master和Slave的server_id在局域网内必须唯一;

    2、准备工作

    2.1 系统及软件准备

    操作系统: CentOS7.8
    MySQL版本:5.7.30
    Master服务器:192.168.10.243
    Slave服务器:192.168.10.143

    2.2、MySQL服务器操作系统配置

    # 关闭主、从服务器防火墙
    systemctl stop firewalld && systemctl disable firewalld
    
    # 关闭主备服务器SELinux
    # 关闭SELinux
    # 查看SELinux状态
    sestatus –v
    getenforce
    
    # 临时关闭SELinux
    setenforce 0
    # 永久关闭SELinux(需要重启操作系统)
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    # 优化文件句柄
    # 打开文件的限制
    vim /etc/security/limits.conf 
    *     soft    nofile  65536
    *     hard    nofile  131072
    *     -       nproc   unlimited
    *     soft    memlock unlimited
    *     hard    memlock unlimited
    
    # 优化内核参数
    修改/etc/sysctl.conf文件
    # 增加tcp支持的队列数
    # 减少断开连接时 ,资源回收
    net.ipv4.tcp_max_tw_buckets = 8000
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 10
    net.ipv4.ip_local_port_range = 1024 65000
    net.ipv4.tcp_max_syn_backlog = 1024000
    

    2.3、安装 MySQL-5.7.30  

    Master、Slave节点安装MySQL

    # MySQL软件下载
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-client-5.7.30-1.el7.x86_64.rpm
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-common-5.7.30-1.el7.x86_64.rpm
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-devel-5.7.30-1.el7.x86_64.rpm
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-libs-5.7.30-1.el7.x86_64.rpm
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-libs-compat-5.7.30-1.el7.x86_64.rpm
    wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-server-5.7.30-1.el7.x86_64.rpm
    
    # 安装MySQL:
    yum -y localinstall *.rpm 
    

    或者配置yum源,直接使用yum命令安装MySQL

    vim /etc/yum.repo.d/mysql.repo
    [mysql57-community]
    name=MySQL 5.7 Community Server
    baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
    enabled=1
    gpgcheck=0
    
    # 保存退出,执行
    yum clean all
    yum makecache
    # 安装 mysql-community-server
    yum -y install mysql-community-server
    

    2.4、启动MySQL服务,并将服务加入开机启动

    systemctl enable mysqld
    systemctl start mysqld
    systemctl status mysqld
    

    2.5、登录mysql并初始化root密码

    # 登录mysql
    说明:mysql在安装完成,启动mysqld服务后,MySQL会自动生成一个随机的root用户密码,可以到日志里面查看。
    vim /var/log/mysqld.log
    
    # 可以看到类似如下信息:
    2020-03-03T06:24:40.573789Z 1 [Note] A temporary password is generated for root@localhost: p5+yU>E*q8hh
    
    # 说明:用该临时密码登录mysql后,必须要先修改密码,如下:
    [root@aliy-prod-pubser-server001 opt]# mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 10
    Server version: 5.7.26
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> show databases;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql> set password = PASSWORD('6ps?3n2vPcXjhUfz');
    

    # 如果从服务器是克隆的主服务器,则修改 auto.cnf(vi /var/lib/mysql/auto.cnf) 文件中 server-uuid 值
    否则主从复制会报 1593 错误,修改完记得重启MySQL

    3、MySQL主从复制配置

    3.1、master服务器配置

    1)用户添加及授权

    在master 服务器授权一个账户,拥有slave权限

    mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.10.143' IDENTIFIED BY 'GrantT^Slave143';
    mysql> FLUSH PRIVILEGES;
    

    说明: 192.168.10.143为备库IP,GrantT^Slave143为账号repl的密码,配置时修改成实际环境的信息。

    3.2. my.cnf配置修改

    修改mysql配置文件,my.ini (windows)或 my.cnf(Linux)找到[mysqld] 标记,下方添加

    server-id=1
    log-bin=master-bin
    binlog-format=ROW
    # 以下两个为可选选项,如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份,日志文件的大小根据磁盘的性能做适当的调整
    expire_logs_days = 7 // binlog过期清理时间
    max_binlog_size = 1G // binlog每个日志文件大小
    
    max_connections = 1000
    character-set-server = utf8mb4 // 配置字符集
    collation-server = utf8mb4_unicode_ci // 配置字符集
    // 配置不同步的库
    binlog-ignore-db = mysql
    binlog-ignore-db = sys
    binlog-ignore-db = information_schema
    binlog-ignore-db = performance_schema

    3.3 重启master 的mysql服务

    systemctl restart mysqld
    

    4、备库配置

    在另一个mysql上配置从服务器

    4.1 备库my.cnf修改

    找到my.ini (windows) 或 my.cnf (linux),找到[mysqld]标记,更改如下配置

    [mysqld]
    max_connections = 1000
    log_bin = slave-bin
    server_id = 2
    relay_log = slave-relay-bin
    log_slave_updates = 1
    read_only = 1
    #以下两个为可选选项,如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份,日志文件的大小根据磁盘的性能做适当的调整
    expire_logs_days = 7 //binlog过期清理时间
    max_binlog_size = 100m //binlog每个日志文件大小
    
    replicate_ignore_db=information_schema
    replicate_ignore_db=performance_schema
    replicate_ignore_db=mysql
    replicate_ignore_db=sys
    

    重启mysql使配置生效

    systemctl restart mysqld
    

    5、开启复制

    5.1、查看主库binlog信息

    登陆主库执行

    mysql> show master status;
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000001 |      154 |              |                  |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    执行之后可以获取目前主库binlog使用的文件及pos点  

    5.2、在从库上设置复制信息

    根据上一步获取到的信息(Position, File)配置从库的复制信息,在从库上执行如下命令

    CHANGE MASTER TO MASTER_HOST='192.168.10.243',MASTER_USER='repl',MASTER_PASSWORD='GrantT^Slave143',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=154;
    

    注意:执行从库配置, 每次重启mysql均需要执行(如果没有开启自动启动主从)

    参数解释:

    解释:
    // master的ip地址
    mysql> change master to master_host='192.168.10.243',
    // master授权的用户
    master_user='repl',
    // master的授权用户密码
    master_password='GrantT^Slave143',

    // master的binlog日志名称,这里使用上述命令搜索出来的为准
    master_log_file='edu-mysql-bin.00000x',
    // master的日志位置 这里使用上述“1.3”命令搜索出来的为准,不能带引号,必须是整型,否则会报错
    master_log_pos=xx,
    // 重试时间、单位秒,默认重试时间为 60s
    master_connect_retry=30;

    5.3、在从库上开启复制

    从库复制信息配置完成后执行命令开启复制:
    mysql> start slave;

    5.4、查看复制状态

    启动之后如果不报错即可执行如下命令查看复制的状态:
    show slave status G;

    主要查看下面两个参数状态,只要都是yes,表示主从通信正常。
    Slave_IO_Running=Yes
    Slave_SQL_Running=Yes
    如果均为yes则正常,否则需根据last_error信息进行调试

    6、主从复制测试

    # 创建数据库
    create database mydb;

    # 创建表
    use mydb;
    create table mytab1(id int(10),name varchar(50),depid int(11));

    # 插入数据
    insert into mytab1 (id, name, depid) values (1,'mcb', 2),(2,'zhangsan',3);

    查看主库数据库,表,数据

    查看从库数据库,表,数据

    7、主从同步可能遇到的问题

    基于局域网的Master/Slave机制在通常情况下已经可以满足“实时”备份的要求了。如果延迟比较大,可以从以下几个因素进行排查:
    (1) 网络延迟;
    (2) Master负载过高;
    (3) Slave负载过高;

    如果出现同步失败,可以根据提示处理错误,处理完成后,需要刷新同步配置:
    先停止同步
    mysql> stop slave;

    清理掉之前的配置,防止同步已经同步了的数据
    mysql> reset slave all;

    然后重新连接主库,进行同步。

  • 相关阅读:
    Ubuntu VIM下实现python自动缩进
    认识Python和基础知识
    Linux常用服务器搭建
    VIM常用命令
    Linux基础
    LINUX操作系统VIM的安装和配置
    Ubuntu 16.04下安装搜狗输入法
    Ubuntu 16.04下sublime text3安装
    Ubuntu软件安装与卸载
    present(模态)实现出push的效果
  • 原文地址:https://www.cnblogs.com/miaocbin/p/13889783.html
Copyright © 2020-2023  润新知