myslq主从同步和常用命令

2023-11-01

MySQL 5.7 multi-source replication

(简单的说就是一从多主,从5.7后MySQL开始支持)

环境资源:

现有4台pc:

Ip                                 OS                                alias

172.171.17.144        fedora linux 24          slave-144

        

172.171.17.145        fedora linux 24          master-145

172.171.17.146        fedora linux 24          master-146

172.171.17.147        fedora linux 24          master-147

环境搭建目的:

全都安装mysql5.7版本,为slave-144配置多源复制后,在master-145、master-146、master-147上创建库表在slave-144会实时同步更新。

环境搭建步骤:

  1. 安装MySQL5.7

这里是自己的测试环境,打算使用mysql的源安装最新版的软件,这样一旦有更新只要update一下就好了,生产环境建议选择最新的稳定版二进制包安装。

//安装mysql源

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-fc24-8.noarch.rpm

//安装mysql社区版

dnf install mysql-community-client mysql-community-server

//设置mysql开机启动

systemctl enable mysqld.service

// 启动mysql

systemctl start mysqld.service

  1. 配置多源复制

这里主要是参考官方文档里的说明,尝试和修改配置文件,中间过程略过,只贴出配置和说明。(可参考:

http://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-tutorials.html

MySQL :: MySQL 5.7 Reference Manual :: 16.1.3.4 Setting Up Replication Using GTIDs

MySQL :: MySQL 5.7 Reference Manual :: 16.1.2.1 Setting the Replication Source Configuration)

1.修改配置文件:

slave-144(/etc/my.cnf):

[mysqld]

  #开启bin-log,多源复制基础

  log-bin = mysql-bin

  server-id = 144

  # 下面两行设置bin-log日志的大小限制和过期时间,防止过多bin-log日志导致磁盘不够

  max-binlog-size=5G
  expire_logs_days=90

  #开启gtid逻辑复制模式,mysql5.7推荐使用的模式

  gtid-mode = on

  enforce-gtid-consistency = 1

master-145 master-146 master-147同上在/etc/my.cnf中的[mysqld]增加上述配置,注意server-id不能相同,这里用ip的最后一位表示(server-id:144-147)。

// 重启mysql

systemctl restart mysqld.service

2.创建同步账户

// 找出安装后的随机密码

grep 'temporary password' /var/log/mysqld.log

// 登入mysql

mysql -uroot –p’随机密码’

// 修改mysql本地root登陆密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'mypassword=new';

// 创建同步用的账户

CREATE USER 'crawler'@'%' IDENTIFIED BY ' mypassword=new';

// 赋给该用户远程登陆访问的所有权限

GRANT ALL PRIVILEGES ON *.* TO 'crawler'@'%' ;

// 刷新权限

flush privileges; 

3.在slave-144上配置多源复制

使用mysql客户端用同步账户登陆slave-144的mysql,然后操作:

// 配置master-145,master-146,master-147的多源复制

change master to master_host='172.171.17.145', master_user='crawler', master_port=3306, master_password='femlwampn9=L', MASTER_AUTO_POSITION = 1 for CHANNEL 'master-145';

change master to master_host='172.171.17.146', master_user='crawler', master_port=3306, master_password='femlwampn9=L', MASTER_AUTO_POSITION = 1 for CHANNEL 'master-146';

change master to master_host='172.171.17.147', master_user='crawler', master_port=3306, master_password='femlwampn9=L', MASTER_AUTO_POSITION = 1 for CHANNEL 'master-147';

// 启动这三个源的复制频道

start slave for channel 'master-145';

start slave for channel 'master-146';

start slave for channel 'master-147';

// 观察配置是否成功

show slave status;

这里基本就成功了,可以在master-145、master-146、master-147上创建数据库表,看是否在slave上实时同步:

  

// 停止和重置复制的命令为

stop slave for channel 'master-145';

stop slave for channel 'master-146';

stop slave for channel 'master-147';

reset slave for channel 'master-145';

reset slave for channel 'master-146';

reset slave for channel 'master-147';

mysql主从同步常用命令:

change master 'crawler1' to master_host='192.168.10.108',master_port=3306,master_user='crawler',master_password='crawler';
change master 'crawler2' to master_host='192.168.10.109',master_port=3306,master_user='crawler',master_password='crawler';
change master 'crawler3' to master_host='192.168.10.110',master_port=3306,master_user='crawler',master_password='crawler';
change master 'crawler4' to master_host='192.168.10.111',master_port=3306,master_user='crawler',master_password='crawler';
show all slaves status;
 

show slave 'crawler1' status;
show slave 'crawler2' status;
show slave 'crawler3' status;
show slave 'crawler4' status;
show slave 'crawler5' status;
show slave 'crawler6' status;
show slave 'crawler7_8' status;
show slave 'crawler9_10' status;

set global crawler1.replicate_do_db = "crawler1";
set global crawler1.replicate_do_table = "crawler1.controller_config,crawler1.controller_task_input,crawler1.controller_task_output,crawler1.controller_task_status,crawler1.controller_server_status";

set global crawler2.replicate_do_db = "crawler2";
set global crawler2.replicate_do_table = "crawler2.controller_config,crawler2.controller_task_input,crawler2.controller_task_output,crawler2.controller_task_status,crawler2.controller_server_status";

set global crawler3.replicate_do_db = "crawler3";
set global crawler3.replicate_do_table = "crawler3.controller_config,crawler3.controller_task_input,crawler3.controller_task_output,crawler3.controller_task_status,crawler3.controller_server_status";

set global crawler4.replicate_do_db = "crawler4";
set global crawler4.replicate_do_table = "crawler4.controller_config,crawler4.controller_task_input,crawler4.controller_task_output,crawler4.controller_task_status,crawler4.controller_server_status";

set global crawler5.replicate_do_db = "crawler5";
set global crawler5.replicate_do_table = "crawler5.controller_config,crawler5.controller_task_input,crawler5.controller_task_output,crawler5.controller_task_status,crawler5.controller_server_status";

set global crawler6.replicate_do_db = "crawler6";
set global crawler6.replicate_do_table = "crawler6.controller_config,crawler6.controller_task_input,crawler6.controller_task_output,crawler6.controller_task_status,crawler6.controller_server_status";

set global crawler7_8.replicate_do_db = "crawler7,crawler8";
set global crawler7_8.replicate_do_table = "crawler7.controller_config,crawler7.controller_task_input,crawler7.controller_task_output,crawler7.controller_task_status,crawler7.controller_server_status,crawler8.controller_config,crawler8.controller_task_input,crawler8.controller_task_output,crawler8.controller_task_status,crawler8.controller_server_status";

set global crawler9_10.replicate_do_db = "crawler9,crawler10";
set global crawler9_10.replicate_do_table = "crawler9.controller_config,crawler9.controller_task_input,crawler9.controller_task_output,crawler9.controller_task_status,crawler9.controller_server_status,crawler10.controller_config,crawler10.controller_task_input,crawler10.controller_task_output,crawler10.controller_task_status,crawler10.controller_server_status";
start slave 'crawler1';
start slave 'crawler2';
start slave 'crawler3';
start slave 'crawler4';
start slave 'crawler5';
start slave 'crawler6';
start slave 'crawler7_8';
start slave 'crawler9_10';
stop slave 'crawler1';
stop slave 'crawler2';
stop slave 'crawler3';
stop slave 'crawler4';
stop slave 'crawler5';
stop slave 'crawler6';
stop slave 'crawler7_8';
stop slave 'crawler9_10';

reset slave 'crawler1' all;
reset slave 'crawler2' all;
reset slave 'crawler3' all;
reset slave 'crawler4' all;

start all slaves;
stop all slaves;

set @@default_master_connection = 'crawler1';
set global sql_slave_skip_counter = 1;

reset slave all;
reset master;

show master status;


change master 'crawler1' to master_host='192.168.72.52',master_port=3306,master_user='crawler',master_password='crawler', master_log_file='crawler1-bin.000082', master_log_pos=107720375;
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

myslq主从同步和常用命令 的相关文章

  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l

随机推荐

  • Fabric1.4源码解析:链码实例化过程

    之前说完了链码的安装过程 接下来说一下链码的实例化过程好了 再然后是链码的调用过程 其实这几个过程内容已经很相似了 都是涉及到Proposal 不过整体流程还是要说一下的 同样 切入点仍然是fabric peer main go文件中的ma
  • 前端性能优化--预加载技术

    当我们谈到前端的性能时 总是会提到比如合并 压缩 缓存或者在服务器上开启gzip之类的 目的都是为了让页面加载的更快 资源预拉取 prefetch 则是另一种性能优化的技术 通过预拉取可以告诉浏览器用户在未来可能用到哪些资源 Pre fet
  • java开发者工具IDEA自定义设置主题/字体/字号大小

    IDEA自定义设置主题 第一步 点击工具栏上的 File 选项 第二步 选择 Settings 选项 第三步 点击 Appearance Behavior gt Appearance 选项 第四步 点击右侧 Theme 下拉框 选择自己喜欢
  • docker搭建sonar服务

    拉取数据库 docker pull postgres 启动postgres数据库创建sonar用户 docker run name db p 5432 5432 e POSTGRES USER sonar e POSTGRES PASSWO
  • 神经网络二分类问题范例,神经网络解决分类问题

    求运用BP神经网络算法处理分类问题的源程序 例如输入蚊子的翼长和触角长 输出蚊子类型与此类似的源程序 30 这种分类的案例很多 附件里面就有这类案例 主要还是要形成样本 输入输出都做好 进行训练 训练完成后就能满足分类需要 模式识别是对表征
  • 什么是HuggingFace

    一 HuggingFace简介 1 HuggingFace是什么 可以理解为对于AI开发者的GitHub 提供了模型 数据集 文本 图像 音频 视频 类库 比如transformers peft accelerate 教程等 2 为什么需要
  • Yolo v8中的上下文管理器

    from contextlib import contextmanager contextmanager def torch distributed zero first local rank int Decorator to make a
  • 【Pytorch】第 9 章 :Capstone 项目——用 DQN 玩 Flappy Bird

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 使用STM32CubeProgrammer烧录STM32芯片

    不使用keil环境烧录STM32时一般需要使用官方的STM32 ST LINK Utility 但今天在使用STM32 ST LINK Utility烧录STM32F401时提示找不到Device ID 查看ST LINK Utility版
  • 解决django运行manage.py runscript命令时报错Try running with a higher verbosity level like: -v2 or -v3

    解决方法 查看命令是否书写正确 比如脚本名称为 my script py 时 python3 manage py runscript my script my script py文件中需要有入口函数 而且此时的 name 属性不是 main
  • css+js网页红包雨效果实现

  • 手把手教你在Android中使用bsdiff实现文件增量更新 (超详细)

    全量更新和增量更新 在Android开发中 版本更新是一个非常常见的需求 目前更新主要分为两种方式 全量更新 增量更新 如下图 分别是酷安和应用宝两个商店的更新页面 可以明显的看到 酷安的更新方式是全量更新 即每次下载全量的新版本文件 当然
  • Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)

    关于 lib x86 64 linux gnu libc so 6 version GLIBC 2 28 not found 出现报错 建议不要使用源码包去编译并升级 在下文有分享一个使用官方的Debian软件包去升级使用的方法 仅供参考
  • Android开发中的Unable to resolve superclass of L错误解决方法

    这个方法一般是因为引入第三方包造成的 注意android support v4等等也算 解决方法 项目上右键 gt Build Path gt Configure Build Path gt Order and Export里将引入的第三方
  • 头歌:字符串处理

    一 字符串的拼接 将要处理的字符串存放在变量中之后 可直接加 额外 空格需要用 框起来使用 二 字符串的转换 1 获取长度 使用函数len 注意使用字符串变量和直接应用字符串内容的区别 字符串需要加 符号 创建字符串是 输入的字符串也需要加
  • Qt只出现 exited with code 3的错误

    我的这个错误是在debug的时候报错 但是release和profile是可以正常运行的 各种百度以后 还是没有找到解决办法 自己无意中尝试将mingw32改为Mingw64重新运行之后就没问题了 好神奇 虽然解决了bug 但是还是不清楚其
  • 浅谈Http长连接和Keep-Alive以及Tcp的Keepalive

    Keep Alive模式 我们知道Http协议采用 请求 应答 模式 当使用普通模式 即非Keep Alive模式时 每个请求 应答 客户端和服务器都要新建一个连接 完成之后立即断开连接 当使用Keep Alive模式时 Keep Aliv
  • 微服务开发概要设计

    Software environment requirements The software environment includes the software on which the project runs Such as web a
  • NumPy 笔记(超级全!收藏√)

    文章目录 NumPy 教程 NumPy Ndarray 对象 NumPy 数据类型 数据类型对象 dtype NumPy 读取数据 NumPy 数组属性 ndarray ndim ndarray shape ndarray itemsize
  • myslq主从同步和常用命令

    MySQL 5 7 multi source replication 简单的说就是一从多主 从5 7后MySQL开始支持 环境资源 现有4台pc Ip OS alias 172 171 17 144 fedora linux 24 slav