首页 > 数据库 >MYSQL主从复制

MYSQL主从复制

时间:2023-11-14 13:45:04浏览次数:44  
标签:binlog 主从复制 数据库 xxx master MYSQL 日志

MYSQL主从复制

主数据库(MASTER)的DDL和DML操作通过二进制日志传到从数据库(SLAVE),然后在从库重新执行(重做),从而使得从库数据和主库的数据保持同步

MYSQL主从复制要点有以下几个方面:

  • 主库出现问题,可以快速切换到从库
  • 实现读写分离,降低主库访问压力
  • 可以在从库中执行备份(备份时会对数据库添加全局锁),避免备份期间影响主库服务
  • 降低单库的读写压力

主从复制原理

MYSQL有四种日志

  • 错误日志
  • 二进制日志
  • 查询日志
  • 慢查询日志

MYSQL在数据库执行了DDL增删改时,会将操作记录写入binlog日志

从库中有一组线程IOThread,发起请求连接MASTER数据库,读取binlog日志,读取到日志后,将其写入到SLAVE的relaylog中。然后通过另外一组线程SQLThread,读取relaylog中的数据,对数据操作进行redo

将主库的操作反应到从库。

主从复制主要分为三步

  1. MASTER在事物提交时,会把数据库变更记录保存在binlog
  2. SLAVE读取MASTER的binlog,写入到SLAVE的relaylog中继日志
  3. SLAVEredo relaylog中继日志中的事件操作,将改变反映到自身数据库

架构搭建

首先放开数据库端口或关闭防火墙

filewall-cmd--zone=public --add-port=3306/tcp -permanent

systemctl stop firewalld
systemctl disable firewalld

MASTER配置

  1. 修改配置文件 etc/my.conf

    # MYSQL服务ID,保证整个集群环境中唯一,取值范围:1~2^32-1,默认为1
    server-id=1
    
    # 是否只读,1代表只读,0代表读写
    # 只针对普通用户
    # MASTER可读可写,设置为0
    read-only=0
    
    # super-read-only=0
    
    # 忽略的数据,即不需要同步的数据库
    # binlog-ignore-db=mysql
    
    # 指定需要同步的数据库
    # binlog-do-db=db01
    
  2. 重启数据库服务

    systemctl restart mysqld

  3. 创建远程连接的账号并赋予主从同步权限

    # 创建用户copyenable并设置密码pwd@123456,该用户可以在任意主机连接该MYSQL服务
    create user 'copyenable'@'%' identified with mysql_native_password by 'pwd@123456';
    # 为用户分配复制权限
    grant replication slave on *.* to 'copyenable'@'%';
    
    # 查看binlog
    show master status
    +---------------------------------------------------------------------------------+
    | File          | Position | Binlog_Do_DB  | Binlog_Ignore_DB | Executed_Gtid_Set |
    |+--------------------------------------------------------------------------------+
    | binlog.000004 | 412      |               |                  |                   |
    |+--------------------------------------------------------------------------------+
    # file:从哪个日志文件开始推送日志文件
    # position:从哪个位置开始推送日志
    # binlog_ignore_db:指定不需要同步的数据库
    

SLAVE配置

  1. 修改配置文件 etc/my.conf

    # MYSQL服务ID,保证整个集群环境中唯一,取值范围:1~2^32-1,默认为1
    server-id=2
    
    # 是否只读,1代表只读,0代表读写
    read-only=1
    
  2. 重启数据库服务

  3. 关联MASTER

    # MYSQW Version upper than 8.0.0
    change replication source to 
    source_hose='xxx.xxx.xxx', 
    source_user='xxx', 
    source_password='xxx',
    source_log_file='xxx',
    source_log_pos='xxx';
    
    # MYSQL Version lower than 8.0.23
    change master to
    master_host='xxx.xxx.xxx',
    master_user='xxx',
    master_password='xxx',
    master_log_file='xxx',
    master_log_pos='xxx';
    
    # 注意8.0.23前后变量的名称不同 !!!
    eg:
    change master to
    master_host='192.168.0.114',
    master_user='copyenable',
    master_password='pwd@123456',
    master_log_file='binlog.000004',
    master_log_pos=669;
    
  4. 开启主从复制

    # MYSQW Version upper than 8.0.22
    start replica;
    
    # MYSQL Version lower than 8.0.22
    start slave;
    
  5. 查看状态

    # MYSQW Version upper than 8.0.22
    show replica status;
    
    # MYSQL Version lower than 8.0.22
    show slave status;
    
    # 查看同步IO线程和SQL执行线程是否允许正常
    Replica_IO_Running: YES
    Replica_SQL_Running: YES
    

标签:binlog,主从复制,数据库,xxx,master,MYSQL,日志
From: https://www.cnblogs.com/wsd413/p/17831421.html

相关文章

  • MYSQL 事务的底层原理 | 京东物流技术团队
    事务的底层原理在事务的实现机制上,MySQL采用的是WAL:Write-aheadlogging,预写式日志,机制来实现的。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。为什么需要使用WAL,然后包含redo和undo信息呢?举个例子,如果一个系......
  • Docker 树莓派 mysql5.7
    创建my.cnf[mysqld]##server_id=1##binlog-ignore-db=mysql##log-bin=replicas-mysql-bin##binlog_cache_size=1M##binlog_format=mixed##expire_logs_days=7#设置比较表名和数据库名时忽略大小写lower_case_table_names=1max_allowed_packet=125Mmax_c......
  • 查询mysql数据量,表数量脚本
    #查询数据库中每个库的数据量SELECTtable_schemaAS"Database",SUM(data_length+index_length)/1024/1024AS"Size(MB)"FROMinformation_schema.TABLESGROUPBYtable_schema;#查询数据库中每个库的表数据量SELECTTABLE_SCHEMA,COUNT(*)FROMinformation......
  • SQLyog 连接 MySQL8.0 提示密码错误(错误号码:2508)
    原因分析:MySQL8.0安装时自动为‘root’@'localhost’创建帐户,密码的加密方法发生了改变,因此SQLyog不能正常解析,才报出如上错误。解决方法:可解决先安装MySQL8.0并且已经已对操作过数据库后,再安装SQLyog首次登陆会出现密码错误。进入cmd输入(******是mysql的密码):mysq......
  • mysql数据表 Table is marked as crashed and should be repaired 的解决办法
    问题查询时,报  Tableismarkedascrashedandshouldberepaired 错误错误原因网上查了一下,错误的产生原因,有网友说是频繁查询和更新XXX表造成的索引错误,还有说法是Mysql数据库因某种原因而受到了损坏。如:数据库服务器突发性断电,在数据表提供服务时对表的源文件进行某......
  • mysql-partition库-创建数据库表分区、展示表分区最新字段
    说明[tips]提供mysql数据库的分区表最新分区查询,支持分区字段为DATE或TO_DAYS(date_str)类型的数据表新建分区,依赖库包括:"pandas","pymysql","sqlalchemy".[ProvidethelatestpartitionqueryforthepartitiontableofMySQLdatabase,supportingpartitionfields......
  • MySQL学习(16)事务隔离级别
    事务隔离级别前言一次事务的执行,就是一次状态的转换。事务执行后,必须从一个一致性状态转换到下一个一致性状态,如果事务发生中止,也要回滚到最初的一致性状态。什么是事务隔离级别系统通过一些方法,使得并发执行的事务按照一定的顺序单独执行,或者最终执行的效果和单独执行一样。......
  • MySQL常用的字符串函数
    MySQL常用的字符串函数有:   1,CONCAT(str1,str2,…):将多个字符串连接在一起。selectCONCAT('aa','bb')//返回aabb  2,UPPER(str):将字符串转换为大写。selectUPPER('aabb')//返回大写的AABB   3,LOWER(str):将字符串转换为小写。selectLOWER(......
  • MySQL中常见的数学函数
    1.函数用于求绝对值abs() 2.函数返回小于或等于x的最大整数 floor(x) 3.函数是返回0-1的随机数 rand() 4.函数用于返回圆周率 PI() 5.函数返回x保留到小数点后y位的值truncate(x,y) 6.函数对x四舍五入,round(x,y)返回x保留到y位,截断时进行四舍五入处理 round(......
  • mysql函数(三)之常见数学函数
    1、format(x,y)函数功能是将一个数字x,保留y位小数,并且整数部分用逗号分隔千分位,小数部分进行四舍五入,使用示例如下: 2、abs(x);sqrt(x);mod(x,y)①、abs();求一个数的绝对值;absolute②、sqrt();求一个数的平方根。sqrt是sqruar(平方,矩形),root(根)的缩写。③、mod(x,y)......