• MySQL主从搭建--保姆级教学


    MYSQL主从搭建步骤

    主节点

    # 进入目录
    cd /opt
    
    # 下载安装包
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
    
    # 解压
    tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
    
    # 拷贝到/usr/local
    mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local
    
    # 进入/usr/local
    cd /usr/local
    
    # 修改名称为mysql-8.0.20
    mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
    
    # 创建存放数据文件夹
    mkdir /usr/local/mysql-8.0.20/data
    
    # 创建用户及用户组
    groupadd mysql
    useradd -g mysql mysql
    
    # 授权
    chown -R mysql.mysql /usr/local/mysql-8.0.20
    
    # 初始化数据库(记录临时密码)
    cd /usr/local/mysql-8.0.20/
    
    ./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;
    
    # 配置my.cnf
    vi /etc/my.cnf
    
    # 清空,使用下面内容
    // 文件内容开始
    
    [mysqld]
    basedir=/usr/local/mysql-8.0.20
    datadir=/usr/local/mysql-8.0.20/data
    character-set-server=utf8
    lower-case-table-names=1
    default_authentication_plugin=mysql_native_password
    
    # 主从复制-主机配置
    # 主服务器唯一ID
    server-id=1
    # 启用二进制日志
    log-bin=mysql-bin
    # 设置不要复制的数据库(可设置多个)
    binlog-ignore-db=sys
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    # 设置需要复制的数据库(可设置多个)
    binlog-do-db=test
    # 设置logbin格式
    binlog_format=STATEMENT
    
    // 文件内容结束
    
    # 建立Mysql服务
    cp -a ./support-files/mysql.server /etc/init.d/mysql
    chmod +x /etc/init.d/mysql
    chkconfig --add mysql
    
    # 检查服务是否生效
    chkconfig --list mysql
    
    # 启动、停止、重启
    service mysql start
    service mysql stop
    service mysql restart
    
    # 创建软连接
    ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin 
    
    # 登录(使用临时密码)
    mysql -uroot -p
    
    # 修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';
    
    # 退出,使用新密码登录
    quit
    mysql -uroot -p
    
    # 修改root权限,增加远程连接
    use mysql
    update user set host ='%' where user='root';
    alter user 'root'@'%' identified with mysql_native_password by 'new password';
    flush privileges;
    
    # 退出
    quit
    

    从节点

    # 进入目录
    cd /opt
    
    # 下载安装包
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
    
    # 解压
    tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
    
    # 拷贝到/usr/local
    mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local
    
    # 进入/usr/local
    cd /usr/local
    
    # 修改名称为mysql-8.0.20
    mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
    
    # 创建存放数据文件夹
    mkdir /usr/local/mysql-8.0.20/data
    
    # 创建用户及用户组
    groupadd mysql
    useradd -g mysql mysql
    
    # 授权
    chown -R mysql.mysql /usr/local/mysql-8.0.20
    
    # 初始化数据库(记录临时密码)
    cd /usr/local/mysql-8.0.20/
    
    ./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;
    
    # 配置my.cnf
    vi /etc/my.cnf
    
    # 清空,使用下面内容
    // 文件内容开始
    
    [mysqld]
    basedir=/usr/local/mysql-8.0.20
    datadir=/usr/local/mysql-8.0.20/data
    character-set-server=utf8
    lower-case-table-names=1
    default_authentication_plugin=mysql_native_password
    
    # 主从复制-从机配置
    # 从服务器唯一ID
    server-id=2
    # 启用中继日志
    relay-log=mysql-relay
    
    // 文件内容结束
    
    # 建立Mysql服务
    cp -a ./support-files/mysql.server /etc/init.d/mysql
    chmod +x /etc/init.d/mysql
    chkconfig --add mysql
    
    # 检查服务是否生效
    chkconfig --list mysql
    
    # 启动、停止、重启
    service mysql start
    service mysql stop
    service mysql restart
    
    # 创建软连接
    ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin 
    
    # 登录(使用临时密码)
    mysql -uroot -p
    
    # 修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';
    
    # 退出,使用新密码登录
    quit
    mysql -uroot -p
    
    # 修改root权限,增加远程连接
    use mysql
    update user set host ='%' where user='root';
    alter user 'root'@'%' identified with mysql_native_password by 'new password';
    flush privileges;
    
    # 退出
    quit
    
    • 关闭主从数据库服务器防火墙或开放3306端口
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    • 主从数据库测试是否已经可以远程访问
    # 主数据库服务器测试从数据库
    mysql -uroot -p -h192.168.182.132(从节点ip) -P3306
    
    # 从数据库服务器测试主数据库
    mysql -uroot -p -h192.168.182.128(主节点ip) -P3306
    
    • 主数据库创建用户slave并授权
    # 登录
    mysql -uroot -p
    
    # 创建用户
    create user 'slave'@'%' identified with mysql_native_password by 'password';
    
    # 授权
    grant replication slave on *.* to 'slave'@'%';
    
    # 刷新权限
    flush privileges;
    
    • 从数据库验证slave用户是否可用
    mysql -uslave -p -h192.168.182.128(主节点) -P3306
    
    • 主数据库查询服务ID及Master状态
    # 登录
    mysql -uroot -p
    
    # 查询server_id是否可配置文件中一致
    show variables like 'server_id';
    
    # 若不一致,可设置临时ID(重启失效)
    set global server_id = 1;
    
    # 查询Master状态,并记录 File 和 Position 的值
    show master status;
    
    # 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
    
    • 从数据库中设置主数据库
    # 登录
    mysql -uroot -p
    
    # 查询server_id是否可配置文件中一致
    show variables like 'server_id';
    
    # 若不一致,可设置临时ID(重启失效)
    set global server_id = 2;
    
    # 设置主数据库参数
    change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
    
    #注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
    #注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
    #注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
    
    # 开始同步
    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 的异常值。
    

    测试

    通过工具连接主从数据库或者在服务器连接。
      注意:主数据库的配置文件中配置了需要同步的数据库,因此只会同步配置的数据库,不配置则同步全部。

    # 在主数据库创建数据库test
    create database test;
    
    # 从数据库查看
    show databases;
    
    # 在主数据库创建表
    use test;
    create table t_user(id int, name varchar(20));
    
    # 插入数据
    insert into t_user values(1, 'C3Stones');
    
    # 在从数据库查看
    use test;
    select * from t_user;
    
    # 其他删改查操作请自行测试
    

    异常

    1.Slave_IO_Running为NO

    问题原因:

    (1)网络不通

    (2)防火墙端口未开放

    (3)mysql账户密码错误

    (4)mysql主从机配置文件写错

    (5)配置从机连接语法错误

    (6)主机未开放账户连接权限

    解决步骤:

    (1)网络不通:用ping指令尝试是否可以接收到返回的数据

    (2)防火墙端口未开放:

    1:查看防火状态
    systemctl status firewalld
    service  iptables status
    
    2:暂时关闭防火墙
    systemctl stop firewalld
    service  iptables stop
    
    3:永久关闭防火墙
    systemctl disable firewalld
    chkconfig iptables off
    
    4:重启防火墙
    systemctl enable firewalld
    service iptables restart 
    

    (3)mysql账户密码错误:用"mysql -u用户名 -p密码 -h主机ip"尝试登录主机

    (4)主数据库参数设置错误(注意此条命令的参数)

    change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
    

    若配置错误

    1.停止已经启动的绑定
    stop slave;
    
    2.重置绑定
    reset master;
    
    3.重新配置、执行复制主机命令
    change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
    
    4.启动复制
    start slave;
    
    
    2.Slave_SQL_Running为NO
    原因
    主节点中有数据库test,执行drop database test时成功,但是从节点中没有test库,所以执行失败。此失败不对数据库造成影响,所以可忽略,选择跳过此处错误。
    
    #停止从服务
    mysql> stop slave;  
    
    #表示跳过一步错误,后面的数字可变 
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    
    #重启slave服务
    mysql> start slave;
    
    之后再用mysql> show slave status\G 查看: 
    Slave_IO_Running: Yes 
    Slave_SQL_Running: Yes 
    ok,现在主从同步状态正常了。。。
    
  • 相关阅读:
    面试知识点--基础篇
    二阶系统时域响应
    2023电工杯B题全保姆论文讲解手把手教程 人工智能影响评价
    计算机算法分析与设计(19)---回溯法(装载问题)
    【前端】前端监控⊆埋点
    C++知识精讲14 | 算法篇之二分查找算法
    Downie 4下载画质的设置方法,downie 4设置下载清晰度
    Excel表列序号
    网页【CSS】滚动条
    Unreal Engine游戏引擎的优势
  • 原文地址:https://blog.csdn.net/Harden_zsc/article/details/139325074