mysql主从复制搭建--待实践完善

news/2024/11/6 17:21:48/

一、什么是mysql主从复制

参考链接:MySQL主从介绍_rain_yunlx的博客-CSDN博客

Linux下搭建Mysql主从复制详细步骤(Mysql版本5.7.35)_linuxmysql主从_Direct_的博客-CSDN博客

Linux环境MySQL数据库主从复制保姆级教程_linux主从复制_小学生波波的博客-CSDN博客(参照这个即可)

也可参考这个:MySQL主从配置详解 - 简书

1.msyql主从又叫做replication,AB复制。A、B两条机器做主从后,在A上写数据,另一台B也会跟着写数据,两者数据实时同步。

2.mysql主从是基于binlog的,主服务器上必须开启binlog才能进行主从。

binlog:是一个二进制文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是不会记录查询语句。

3.主从复制过程

(1)Slave上的IO_thread连接上Master,并请求从指定日志文件的指定位置或者从最开始的日志之后的日志内容。

(2)Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave的IO_thread。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log file以及bin-log  pos.

(3)Slave的IO_thread接收到信息后,将接收到的日志内容依次天机到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master要从哪个binlog的哪个位置开始往后的日志内容发送给Slave。

(4)Slave的sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为Master端真实执行时候的那些可执行的内容,并在数据库中执行。

5.mysql支持的肤质类型

(1)基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句;Mysql默认采用基于语句的复制,小吕比较高。

(2)基于行的复制:把改变的内容复制过去,而不是把命令在服务器上执行一遍

(3)混合类型复制:默认采用基于语句的复制,一旦发现语句无法精确复制时,就会采用基于行的复制。

6.应用场景

(1)从服务器作为主服务器的实时数据备份

(2)主从服务器实现读写分析(主写从读),从服务器实现负载均衡

(3)把多个服务器根据业务重要性进行拆分访问(从服务器根据业务进行拆分)

二、搭建步骤

    1.准备工作

    首先准备两台机器,A和B, A主B从,每台机器上都安装了mysql,并将mysql启动;

  第一步:  修改主机名并配置主机映射:

[root@localhost ~]# hostnamectl set-hostname mysql1

[root@localhost ~]# hostnamectl set-hostname mysql2

两个节点配置/etc/hosts文件,修改为如下: #ip地址应改成自己主机对应的ip

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.30.11.12  mysql1

172.30.11.13  mysql2
 

第二步:两台主机都关闭防火墙和SELinux服务

关闭防火墙命令如下:

systemctl stop firewalld        //关闭防火墙

systemctl disable firewalld   //将防火墙设置开机不自启

关闭selinux服务

vi /etc/selinux/config  //进入到此目录下将selinux的状态设置为disabled

    1.1 mysql安装步骤--后续添加

         

 1.2 配置主

     (1)修改A机器的mysql配置

              vim /etc/my.cnf

    (2)添加如下内容

              #配置唯一的服务器ID,一般使用IP最后一位

               server-id=100

               #开启log-bin二进制日志

              log-bin=/var/log/mysql/mysql-bin

               #添加,允许从服务器更新二进制日志

               log-slave-updates=true

                #下面这两个不是必须要配置 #主要是为了使用带事务的InnoDB进行复制设置时尽可能                 提高持久性和一致性

                innodb_flush_log_at_trx_commit = 1

                sync_binlog = 1

   (3)    修改完保存后重新加载配置文件

             /etc/init.d/mysqld restart  或者  systemctl start mysql

                登录mysql:mysql -uroot -p

   (4)重启完成后mysql目录下会生产两个文件   mysql-bin开头的文件是实现主从的根本

   (5)创建mysql用户,用户名为testuser,密码为testpasswd

        以下都在mysql中执行,

        create user 'repl'@'slave_ip' identified by '1234';

        或者:

        在主库上建立用于主从复制的账号

        mysql> CREATE USER 'rep1'@'%';

        mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'%' identified by 'password';

        查看主库的二进制日志的名称:

        mysql> show master status\G

 

   (6)保持状态

        flush tables with read lock;

    (7)记住 File和Position,执行命令show master status;

1.3配置从

     在从库上面测试之前建立的复制账号是否可以连接主库:

        mysql -urep1 -p'password' -h192.168.169.131

(1)配置server ID,需要和主不一样

             vim /etc/my.cnf

              添加如下的内容:

              server-id=200

        #添加,开启中继日志,从主服务器上同步日志文件记录到本地

        relay-log=relay-log-bin

        #添加,定义中继日志文件的位置和名称

        relay-log-index=slave-relay-bin.index

(2)修改完配置文件后,重启mysqld服务

               /etc/init.d/mysqld restart 或者  systemctl start mysql

(3)将A机器上的备份数据库都拷贝到B机器上,我的备份都存放在/tmp目录下,且都是sql结尾的文件

                scp 192.168.177.100:/tmp/*.sql /tmp/

 (4)拷贝完A的数据库后在B上创建相对应的数据库

         create database zrlog;

        create database wordpress;

  (5)在B机器上恢复数据库

        mysql zrlog < /tmp/zrlog.sql

        mysql wordpress < /tmp/wordpress.sql

    (6)B机器登陆mysql,执行命令       

                stop slave;

    (7)change master:

        # 配置同步,注意 master_log_file 和 master_log_pos 的值要与Master的一致

             mysql> CHANGE MASTER TO MASTER_HOST='192.168.169.131',MASTER_USER='rep1',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=682;

# 启动同步,如有报错执行 reset slave;
mysql> start slave;
 

      (8)开始服务

                start slave;

         (9)如何判断主从是否配置成功

                   使用命令mysql> show slave status\G


http://www.ppmy.cn/news/50174.html

相关文章

java 线程池 ThreadPoolExecutor

一、线程池解决的问题 线程对象的重复利用防止内存溢出风险&#xff0c;线程池中线程数、任务数可以是有限的。合理的利用cpu&#xff0c;避免过多线程造成cpu超负荷运转 二、核心属性 corePoolSize&#xff1a;线程在没有任务时&#xff0c;需要维持的线程数。在没有任务时…

汉诺塔的非递归算法

对于汉诺塔问题&#xff0c;我们都普遍认为这个是一个典型的递归问题&#xff0c;然而递归需要使用到系统对应的栈&#xff0c;开销比较大&#xff0c;因此我在想使用非递归算法来解决它&#xff0c;然而网上绝大部分的教程都是自己模拟了一个栈&#xff0c;因此我在考虑写一篇…

这些美国名校的AI人工智能大牛,你知道几个?

CS专业被US News评为就业TOP 100职业第一名、STEM职业第一名、技术类职业第一名。 AI人工智能&#xff0c;随着GPT的横空出世已成为最热门的CS专业。“深度学习”和“神经网络”等是新一代人工智能的重要代表&#xff0c;如今在面部识别、语音输入、基因医疗等重要领域被广泛应…

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录 一、前言二、Linux U-boot 相关命令&#xff08;1&#xff09;help 命令&#xff08;2&#xff09;printenv 命令&#xff08;3&#xff09;setenv 函数&#xff08;4&#xff09;saveenv 函数 三、tftp启动linux内核步骤&#xff08;1&#xff09;进入u-boot模式&…

Three.js教程:透视投影相机

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链。 其他系列工具&#xff1a;NSDT简石数字孪生 Threejs如果想把三维场景Scene渲染到web网页上&#xff0c;还需要定义一个虚拟相机Camera&#xff0c;就像你生活中想获得一张照片&#xff0c;需要一台用来拍照的相机。 透视…

5、Hash对称加密

一、Hash Hash&#xff0c;一般翻译做“散列”&#xff0c;也有直接音译为“哈希”的&#xff0c;就是把任意长度的输入通过散列算法变换成固定长度的输出&#xff0c;该输出就是散列值。这种转换是一种压缩映射&#xff0c;也就是&#xff0c;散列值的空间通常远小于输入的空…

RocketMQ-02

1. RocketMQ集群搭建 1.2 集群搭建方式 1.2.1 集群特点 NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个…

华为OD机试真题(Java),喊7的次数重排(100%通过+复盘思路)

一、题目描述 喊7是一个传统的聚会游戏&#xff0c;N个人围成一圈&#xff0c;按顺时针从1到N编号。 编号为1的人从1开始喊数&#xff0c;下一个人喊的数字为上一个人的数字加1&#xff0c;但是当将要喊出来的数字是7的倍数或者数字本身含有7的话&#xff0c;不能把这个数字直…