首页 > 数据库 >mysql - 集群

mysql - 集群

时间:2023-09-12 11:34:15浏览次数:51  
标签:binlog 同步 slave log master mysql 集群

概念

mysql 集群大致有这几种应用:

  1. 单点写入,多点同时读;
  2. 单点写入,另一个备用;
  3. 多点同时写,允许这么做,但是不推荐,冲突不好解决。

基本原理

主库(master)在事务提交时,将数据的变化事件(events)记录在二进制日志文件(binlog)中。
主库推送 “binlog 中的日志事件” 到从库的 “中继日志(relay log)”。
slave 按照中继日志中的事件,执行与主库一样的操作。

主机设置

   # 建立账号(mysql8)
   create user 'slave' identified with mysql_native_password by 'slave1122..';
   
   # 建立账号(mysql5)
   create user 'slave' identified by 'slave1122..';
   
   # 授权
   grant replication slave on *.* to 'slave';
   
   # 刷新
   flush privileges;
   
   # 查看主库 master
   show master status;

show master status 命令能看到主机状态,各个字段含义如下:

File : binlog写到什么文件
Position : binlog写到什么位置
Binlog_Ignore_DB : 不需要同步的数据库

my.cnf

主要确保 server-id 不要重复,剩下的按需调整即可

[mysqld]
# 服务 id,集群下,需要保证唯一
# server-id = 1

# binlog 日志的存储路径和文件名
# log-bin=/usr/local/mysql/data/binlog
# 备份时忽略的数据库
# binlog-ignore-db=mysql

备用机配置

    -- 指定主节点(参数从主机 show master status 查询结果中获取)
    change master to master_host='127.0.0.1',master_user='slave',master_password='slave1122..',master_log_file='binlog.000056',master_log_pos=157;
    
    -- 启动同步
    start slave;
    
    -- 查看同步状态
    show slave status;
    
    -- 结束同步
    stop slave;

show slave status 用于展示从主机的状态:

Relay_Master_Log_File:表示已经同步到那个 binlog 文件;
Exec_Master_Log_Pos:表示已经同步到 binlog 文件的哪个位置;
Slave_SQL_Running:备份线程是否启动。

Slave_SQL_Running 状态为 Yes,且同步位置一致,表示已经完成所有数据的同步。

  1. STOP SLAVE:这个命令会停止复制从主服务器的更新,直到使用START SLAVE命令恢复为止。
  2. START SLAVE:启动同步

高风险命令

RESET MASTER removes all binary log files that are listed in the index file, leaving only a single,
empty binary log file with a numeric suffix of .000001, whereas the numbering is not reset by PURGE BINARY LOGS.

RESET MASTER is not intended to be used while any replication slaves are running.
The behavior. of RESET MASTER when used while slaves are running is undefined (and thus unsupported),
whereas PURGE BINARY LOGS may be safely used while replication slaves are running.

RESET SLAVE makes the slave forget its replication position in the master's binary log.
This statement is meant to be used for a clean start: It deletes the master.info
and relay-log.info files, all the relay log files, and starts a new relay log file.
To use RESET SLAVE, the slave replication threads must be stopped (use STOP SLAVE if necessary).

RESET MASTER:删除所有的 binlog 日志文件,重新开始所有新的日志文件,用于第一次进行搭建主从库时,进行主库 binlog 初始化工作。

RESET SLAVE:忘记主从复制的位置信息,删除 master.info 文件和 relay-log.info 文件,以及所有的 relay log 文件,重新启用一个新的 relay log 文件。

同步数据可以通过一些很粗暴的方式来做,比如:直接转储主库的所有数据,再导入到备用库,
这两个命令可能是为了这种场合设计的,手动同步之后,清理所有历史。

注意:不要在主备复制过程中执行这些命令,这很明显会产生重大问题。

常用命令

    -- 查询当前的server-id,确保不一致
    SHOW VARIABLES LIKE 'server_id';

    -- 服务重启
    service mysql restart;

    -- root 账号登录
    mysql -u root -p 

主备模式

一台主机负责读写数据,另一台负责同步数据,故障的时候切换到备用主机。

主库出现问题的时候,自动将从库切换为新的主库,保证整个数据库系统的正常运行。
目前市面上也有很多成熟的 MySQL 自动故障转移方案,比如 keepalived、HAProxy 等。

双主模式

两台主机都能读写数据,互相同步对方的数据,允许同时写入数据,这种设计存在很多缺陷:

  1. 同时修改一个数据时,会产生冲突,这个问题几乎无解;
  2. 主机发生故障的时候,一部分数据还没有完成同步,其它主机仍然继续工作,故障修复之后,如何合并数据就成了难题。

实际使用的时候,应当是:允许双写,但是不写,只做单点写入,发生故障时,才允许另一个点写入。
如果只是想减轻数据写入的压力,应当考虑数据分区、分片。

分布式

我们平常使用的安装包,跟分布式版本是有区别的,可以去官网下载安装包,
暂时没有这方面需求,就不再继续深入研究了,
搜索关键字 mysql-cluster,会更容易找到学习资料。

http://mirrors.sohu.com/mysql/
https://dev.mysql.com/downloads/cluster/#downloads

标签:binlog,同步,slave,log,master,mysql,集群
From: https://www.cnblogs.com/chenss15060100790/p/17695738.html

相关文章

  • mysql8 - 1055报错
    在navicat上跑查询语句,不论执行什么都会报错[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'information_schema.PROFILING.SEQ'whichisnotfunctionallydependentoncolumnsinGROUPBYclause......
  • mysql - 压测常用命令
    常用--查看所有连接的情况showprocesslist;--查看当前系统的连接数showstatuslike'Threads_connected';--各类查询语句执行次数showstatuslike'com%';--试图连接mysql服务器的次数showstatuslike'Connections';--慢查询次数(时间超过long_query_time......
  • 运用navicat for mysql实现定时备份
    使用navicatformysql实现定时备份首先打开需要进行备份的数据库,使之被高亮选中。点击“Schedule”菜单,点击后将出现如下图所示的功能界面:点击“NewBatchJob”,点击后将出现如下图所示的功能界面:“General”选项卡中显示了指定数据库连接下各个数据库实例中......
  • MySql 表 转为C#实体类 ,sql语句
    SELECT CONCAT( '///<summary>\r\n///', COLUMN_COMMENT, '\r\n///</summary>\r\npublic', CASE DATA_TYPE WHEN'bigint'THEN 'int' WHEN'tinyint'THEN 'int' WHEN......
  • 使用mysql-proxy代理mysql集群
    本文系统环境为:CentOSLinuxrelease7.9.2009(Core)安装mysql-proxy下载地址:dev.mysql.com/downloads/m… 服务信息 markdown复制代码mysql-proxy:192.168.1.113:4040//目标配置信息已搭建mysql数据库(双主):192.168.1.113:3306192.168.1.113:3307......
  • MySQL 表结构导出
    SELECTCOLUMN_NAME列名,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,COLUMN_TYPE数据类型,--IS_NULLABLE是否为空,COLUMN_DEFAULT默认值,COLUMN_COMMENT备注FROMINFORMATION_SCHEMA.COLUMNSwhere--table_schema填数据库名称table_schema='feixwinc......
  • mysql 获取第一个汉字首字母
    selectdmlb,dmz,dmsm1,CHAR(INTERVAL(CONV(HEX(left(convert(dmsm1usinggbk)collategbk_chinese_ci,1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0......
  • 高性能MySQL实战(二):索引 | 京东物流技术团队
    我们在上篇高性能MySQL实战(一):表结构中已经建立好了表结构,这篇我们则是针对已有的表结构和搜索条件为表创建索引。1.根据搜索条件创建索引我们还是先将表结构的初始化SQL拿过来:CREATETABLE`service_log`(`id`bigintUNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'主键......
  • MySQL子查询相关使用
    子查询的实质:一个select语句的查询结果能够作为另一个语句的输入值。子查询不仅可用于where子句中,还能够用于from子句中,此时子查询的结果将作为一个临时表(temporarytable)来使用。 一、     单行子查询 1、查询“战争”类题材电影的具体信息,要求输出片名和导演......
  • 在VMware虚拟机集群上部署HDFS集群
    本篇博客跟大家分享一下如何在VMware虚拟机集群上部署HDFS集群一·、下载hadoop安装包进入官网:https://hadoop.apache.org 下载hadoop安装包由于ApacheHadoop是国外网址,下载安装包对于网络要求较高 二、上传压缩包,进行解压在进行解压之前,保证自己已经完成vmwa的黄静配置 三、......