草庐IT

配置MySQL5.7主从复制

Youbin 2023-03-28 原文

1 环境准备

192.168.1.34 服务器A(主机)
192.168.1.35 服务器B(从机)

2 安装mysql

MySQL版本:

这里采用Server version: 5.7.35 MySQL Community Server (GPL)

我们把安装在“服务器A”的数据库称作“主数据库”、安装在“服务器B”的数据库称作“从数据库”。

2.1 开放端口

确保服务器A与服务器B上的3306端口可以互访。

3 设置主库

进行下面的配置前,假设你已经在两台服务器AB上安装成功MySQL服务。

192.168.1.34 服务器A(主机)

3.1 修改MySQL配置文件

编辑mysql配置文件/etc/my.cnf,添加如下的内容:

[mysqld]
log-bin=mysql-bin
server-id=1

保存修改内容并重启MySQL服务。

3.2 创建一个用户用于复制

所谓复制用户,即供从数据库使用的,从主数据库拷贝二进制日志信息的用户。

用客户端连接上MySQL服务,执行以下语句创建一个用于复制的用户:

mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Abc!@#123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';

3.3 获取二进制文件位置

这些信息在后面配置从数据库时用到。

1、阻塞数据库写语句

mysql> FLUSH TABLES WITH READ LOCK;

2、获取当前二进制文件的名称和位置

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

3.4 使用mysqldump创建数据快照

本指南默认使用InnoDB存储引擎。

如果在启用主从复制前,主数据库已存在数据,那么你就需要先把这些数据拷贝到从数据库。下面给出一个例子,将所有数据库备份到一个叫做dbdump.db的文件:

shell> mysqldump --all-databases --master-data > dbdump.db

其中--master-data选项会自动追加 CHANGE MASTER TO语句,该语句在从数据库启动复制进程时需要到。

注意:

如果你没有使用--master-data选项的话,那么你需要在一个单独的会话中锁定所有数据表。详情见 Section 16.1.2.3, “Obtaining the Replication Source's Binary Log Coordinates”.

4 设置从库

192.168.1.35 服务器B(从机)

4.1 修改MySQL配置文件

编辑mysql配置文件/etc/my.cnf,添加如下的内容:

[mysqld]
server-id=2
skip_slave_start=ON

这里主要解释一下skip_slave_start配置,ON表示数据库启动时不启动从机的复制进程,需要通过手动的方式进行启动。

保存修改内容并重启MySQL服务。

4.2 设置从库对应的主库

这里主要用到 CHANGE MASTER TO语句,其基本语法如下:

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='source_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

我们的例子对应如下(当中的参数见上文[设置主数据库](#3 设置主数据库)一节):

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='192.168.1.34',
    ->     MASTER_USER='repl',
    ->     MASTER_PASSWORD='Abc!@#123',
    ->     MASTER_LOG_FILE='mysql-bin.000001',
    ->     MASTER_LOG_POS=1030;

4.3 导入全新的数据的情况

即主库和备库都是新建的,不存在旧库旧表旧数据,且主库已经启用二进制日志,备库已指定主库及当前位置。这时你想要将其它的数据库备份下来导入到当前的主备数据库中,你只需要在主库中执行导入命令即可(不能再备库执行导入语句):

shell> mysql -h '192.168.1.34' < fulldb.dump

4.4 主库已存在数据的情况

即主库在启用二进制日志前已存在数据,你在启用从库复制进程前需要把主库的备份快照导入到从库中,然后才能启用从库的复制进程。

1、新建主库快照

shell> mysqldump --all-databases --master-data > dbdump.db

2、导入到从库中

shell> mysql -h '192.168.1.35' < fulldb.dump

4.5 启用从库复制进程

mysql> START SLAVE;

验证主从复制是否启动成功

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.34
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2096
               Relay_Log_File: 192-relay-bin.000007
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
......

如上,只有Slave_IO_RunningSlave_SQL_Running同时都是Yes的时候表示主从复制配置成功。

5 互为主从设置

前面两个章节讲了如何配置主从复制,即服务器A的数据库作为主库,服务器B的数据库作为从库;那么只要按照相反的步骤再设置一遍,即服务器B的数据库作为主库,服务器A的数据库作为从库。这样就可以使得服务器A的数据库和服务器B的数据库互为主从了。

有关配置MySQL5.7主从复制的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  5. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  8. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  9. ruby - 如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作? - 2

    我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe

  10. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

随机推荐