MySQL主从复制配置[通俗易懂]

MySQL主从复制配置[通俗易懂]MySQL主从复制及读写分离一、MySQL复制的应用常见场景 读写分离,提高查询访问性能,有效减少主数据库访问压力。 实时灾备,主数据库出现故障时,可快速切换到从数据库。 数据汇总,可将多个主数据库同步汇总到一个数据库中,方便数据统计分析。 二、MySQL主从复制原理介绍1、MySQL异步和半同步复制传统的MySQL复制提供了一种简单的主-从复制方法。有一个主,以及一个或多个从。主节点执行和提交事务,然后将它们(异步地)发送到从节点,以重新…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、MySQL复制的应用常见场景
  • 读写分离,提高查询访问性能,有效减少主数据库访问压力。
  • 实时灾备,主数据库出现故障时,可快速切换到从数据库。
  • 数据汇总,可将多个主数据库同步汇总到一个数据库中,方便数据统计分析。
二、MySQL主从复制原理介绍
   
1、 MySQL异步和半同步复制
传统的MySQL复制提供了一种简单的主-从复制方法。有一个主,以及一个或多个从。
主节点
执行和提交事务,然后将它们(异步地)发送到从节点,
以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。
    这是一个shared-nothing(异步)的系统,默认情况下所有server成员都有一个完整的数据副本。
(主节点不依赖从节点)
MySQL主从复制配置[通俗易懂]
    还有一个
半同步复制,他在协议中添加了一个同步步骤,这意味着
主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。
MySQL主从复制配置[通俗易懂]
    上两张图片,可以看到传统一部MySQL复制协议(以及半同步)的图形展示。蓝色箭头表示在不同server之间或者server与client应用之间的信息交互。
2、MySQL主从复制过程
  • 开启binlog日志,通过把主库的binlog传到从库,从新解析应用到从库。
  • 复制需要3个线程(dump、io、sql)完成
3、MySQL主从复制前提
  • 主服务器一定要打开二进制日志
  • 必须两台服务器(或者是多个实例)
  • 从服务器需要一次数据初始化
  • 如果主从服务器都是新搭建的话,可以不做初始化
  • 如果主服务器已经运行了很长时间了,可以通过备份将主库数据恢复到从库。
  • 主库必须要有对从库复制请求的用户。
  • 从库需要有relay-log设置,存放从主库传送过来的二进制日志show variables like ‘%relay%’;
  • 在第一次的时候,从库需要change master to去连接主库。
  • change master信息需要存放到master.info 中show variables like ‘%master_info%’;
  • 从库怎么知道,主库发生了新的变化?通过relay-log.info记录的已经应用过的relay-log信息。
  • 在复制过程中涉及到的线程
    • 从库会开启一个I0 thread(线程),负责连接主库,请求binlog, 接收binlog并写入relay-log。
    • 从库会开启一个SQL thread(线程),负责执行relay-log中的事件。
    • 主库会开启一个dump thrad(线程),负责响应从I0 thread的请求。
4、MySQL主从复制实现
MySQL主从复制配置[通俗易懂]
2、MySQL复制有三种核心格式

MySQL主从复制配置[通俗易懂]
8、MySQL授权远程主机登录
grant all privileges on *.* to ‘slave’@’192.168.%.%’ identified by ‘123456’ with grant option;
9、MySQL编辑配置文件
9.1、master配置文件
vim /etc/my.cnf
default-storage-engine=INNODB
symbolic-links=0
server_id=6
log_bin=/var/log/mysql/mysql-bin

MySQL主从复制配置[通俗易懂]
9.1.2、创建相应文件夹以及更改属性
[root@localhost ~]# mkdir -p /var/log/mysql
[root@localhost ~]# chown -R mysql.mysql /var/log/mysql
[root@localhost ~]# ll -d /var/log/mysql
drwxr-xr-x. 2 mysql mysql 203 4月  29 16:22 /var/log/mysql
[root@localhost ~]#
重启动数据库
9.2、Slave配置文件
vim /etc/my.cnf
default-storage-engine=INNODB
symbolic-links=0
server_id=8
log_bin=/var/log/mysql/mysql-bin
relay_log=/var/log/mysql/mysql-relay
MySQL主从复制配置[通俗易懂]
9.2.2、创建相应文件夹以及更改属性
[root@localhost ~]# mkdir -p /var/log/mysql
[root@localhost ~]# chown -R mysql.mysql /var/log/mysql
[root@localhost ~]# ll -d /var/log/mysql
drwxr-xr-x. 2 mysql mysql 203 4月  29 16:22 /var/log/mysql
[root@localhost ~]#
重启动数据库
10、MySQL创建主从同步账号
  • 在主库创建一个专门用来复制的数据库用户,所有从库都用这个用户来连接主库,确保这个用户只有复制的权限
create user ‘slave’@’192.168.%.%’ identified by ‘123456’;
如果出现密码不符合要求的问题则按以下解决

修改密码的策略,使得可以设置简单的密码
如果想要查看MySQL完整的初始密码规则,登陆后执行以下命令
SHOW VARIABLES LIKE ‘validate_password%’;
密码的长度是由validate_password_length决定的,但是可以通过以下命令修改
set global validate_password_length=4;
validate_password_policy决定密码的验证策略,默认等级为MEDIUM(中等),可通过以下命令修改为LOW(低)
set global validate_password_policy=0;
删除已有账户
delete from mysql.user where user =’用户名’;
查询已创建的用户
select user,host from mysql.user;
MySQL主从复制配置[通俗易懂]
授权用户复制权限
grant replication slave on *.* to ‘slave’@’192.168.%.%’;
查看指定用户的授权情况
show grants for ‘slave’@’192.168.%.%’;
MySQL主从复制配置[通俗易懂]
关闭防火墙
systemctl stop firewalld
再从服务器上使用slave账户远程连接主服务器
mysql -h192.168.126.133 -uslave -p
MySQL主从复制配置[通俗易懂]
连接成功
查看MySQL主服务器的状态
show master status;

13、MySQL主库备份数据
mysqldump -uroot -p123456 –master-data –all-databases > master.sql
MySQL主从复制配置[通俗易懂]
将备份的文件master.sql拷贝到从服务器
scp master.sql 192.168.126.132:/root
MySQL主从复制配置[通俗易懂]
在从数据库中执行下列语句,将备份数据还原到从服务器中,同步数据

[root@localhost ~]# mysql -p123456 < master.sql

[root@localhost ~]# mysql -p123456 < master.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38-log MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> select user,host from mysql.user;
+---------------+-------------+
| user          | host        |
+---------------+-------------+
| slave         | 192.168.%.% |
| mysql.session | localhost   |
| mysql.sys     | localhost   |
| root          | localhost   |
+---------------+-------------+
4 rows in set (0.01 sec)

mysql>

15、MySQL从库配置同步
  • 再从库上建立复制关系,即从库指定主库的日志信息和链接信息
mysql> change master to
    -> master_host='192.168.126.133',
    -> master_port=3306,
    -> master_user='slave',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000003',
    -> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql>

注意这两个值需要根据主服务器上显示的值来写
master_log_file='mysql-bin.000003',
master_log_pos=154;

在主服务器上输入一下命令即可显示出来
MySQL主从复制配置[通俗易懂]
关闭主从服务器防火墙和一些安全策略,不想关闭就
启动从服务
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql>

查看从的状态
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.126.133
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
........
             Master_Server_Id: 6
                  Master_UUID: 753763f0-c7a4-11ec-b29b-000c297f1d9e
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)


mysql>

注意看红色部分,主从配置完成
,如果是克隆的虚拟机注意查看
server-uuid,主从的uuid是不一致的,需要自行修改。
[root@localhost ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=753763f0-c7a4-11ec-b29b-000c297f1d91

测试主服务起的数据能否同步到从服务器上
在主服务器创建
test_slave 数据库
mysql> create database test_slave;
Query OK, 1 row affected (0.01 sec)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_slave         |
+--------------------+
5 rows in set (0.00 sec)


mysql>

在从服务器上查看,是否同步
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_slave         |
+--------------------+
5 rows in set (0.06 sec)


mysql>

从服务器也能看到
test_slave 测试库,测试同步成功。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170321.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 第一章:Activiti工作流教程[通俗易懂]

    第一章:Activiti工作流教程[通俗易懂]第一章:Activiti工作流教程

    2022年4月23日
    75
  • 微商分销代理商城源码-代理等级和升级条件

    微商分销代理商城源码-代理等级和升级条件介绍:微商分销代理商城源码基于think框架开发是一款微商分销代理商城源码,可以自己设置代理等级和升级条件(如购买指定商品、消费额度)网站搭建方式介绍:测试环境php7.0+mysql5.6数据库配置文件\application\database.php后台/admin用户:admin密码:123456网盘下载地址:http://kekewl.cc/jpaQnrd7VcZ0图片:网站源码首页截图演示网站后台截图演示…

    2022年5月13日
    43
  • 瓦片地图拼接_开源瓦片地图

    瓦片地图拼接_开源瓦片地图瓦片地图(TiledMap)瓦片地图(TileMap)不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏,平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器TiledMapEditor生成并保存为TMX文件格式,被Cocos2d-x支持。TMX瓦片地图格式Cocos2d支持被Tiled创建的地图文件(TMX)。Tiled的2个版本…

    2025年8月16日
    2
  • 二叉树 二叉搜索树_二叉查找树

    二叉树 二叉搜索树_二叉查找树原题链接一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或

    2022年8月8日
    4
  • jdbc连接数据库的基本步骤「建议收藏」

    jdbc连接数据库的基本步骤「建议收藏」1.在项目中导入java.sql包2.加载数据库驱动程序Class.forName(“com.mysql.cj.jdbc.Driver”);3.定义数据库的链接地址Stringurl=“jdbc:mysql://localhost/studentserverTimezone=GMT%2B8&amp;amp;useSSL=false”;Stringdatabasename=“root”;S…

    2022年7月15日
    18
  • linux开放8080端口命令_centos开放80端口

    linux开放8080端口命令_centos开放80端口1.添加映射iptables-tnat-APREROUTING-ptcp–dport80-jREDIRECT–to-port8080-tnat:指出我要操作什么表.(不写就表示filter.默认是filter)-APREROUTING:A添加的意思.表示我要在PREROUTING中添加一个规则–dport80:如果请求80端…

    2022年9月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号