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

mysql主从复制

时间:2023-11-01 14:47:10浏览次数:39  
标签:语句 binlog 主从复制 slave log MASTER mysql 日志

一、什么是Binlog?

Mysql的二进制日志可以是Mysql最重要的日志, 记录了所有的DDL和DML语句(除了数据查询语句之外的语句)语句,以事件形式记录,还包含语句所执行的消耗时间,Mysql的二进制日志是事务安全型的。

二进制日志包含两类文件:

1、二进制日志索引文件(文件后缀为".index")用于记录有所的二进制文件;

2、二进制日志文件(文件后缀为“.00000*”)记录了数据库所有的DDL和DML(除了数据查询语句之外的语句)

二、Binlog类型

Mysql Binlog种类有三种:Statement、Mixed、Row。

1、Statement:语句级,binlog会记录每次执行写操作的语句。

优点:节省空间。

缺点:有可能造成数据不一致。

2、row:行级,binlog会记录每次操作后每行记录的结果。

优点:保持数据的绝对一致性。

缺点:占用较大空间。

3、mixed:statement的升级版本,一定程度上解决了因为一些情况而造成的statement模式不一致问题,默认还是statement,在某些情况下,譬如:当函数中包含UUID()时,包含AUTO_INCREMENT字段的表被更新时;执行INSERT DELAYED语句时;用UDF时;会按照ROW的方式进行处理

优点:节省空间,同时兼顾了一定的一致性。

缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog的监控的情况都不方便。

三、主从同步机制

1、从数据库执行start slave,开启主从复制开关,slave服务器的IO线程请求从master服务器读取binlog(如果该线程追赶上了主库,会自动进入休眠状态)。

2、主数据库的更新SQL(update、insert、delete)被写到binlog,主库的binlog dump thread会把binlog的内容发送到从库。

3、从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写到relaylog(会记录位置信息,一遍下次继续读取)。

4、从服务器的sql线程会实时检测relaylog中新增的日志内容,把relaylog解析成sql语句并执行。

四、主从复制配置

1、master库配置

#配置文件配置以下
vim /etc/my.conf

log-bin=mysql-bin
server-id=1
binlog_format=statement         #复制模式
max_binlog_size=100M         #超过max_binlog_size或超过6小时会切换到下一序号文件
binlog_cache_size=16M
expire_logs_days= 7                           #日志过期时间,设置为0则永不过期
relay_log_recovery  = 1            #当slave从库宕机后,假如relay-log损坏了
innodb_flush_log_at_trx_commit = 1     #每次事务提交将日志缓冲区写入log file,并同时flush到磁盘。
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1     # 自增值的偏移量
auto-increment-increment = 1  # 自增值的自增量
slave-skip-errors = all #跳过从库错误
log_bin_trust_function_creators = TRUE #若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步

添加账户

#添加同步账户
grant replication slave on *.* to replication@'172.19.25.97' identified by 'Test@123456';

#刷新权限
FLUSH PRIVILEGES;

#查看master状态
show master status;        #记录查询结果中的File、Position,配置从库时会用到

 2、slave从库配置

#配置文件配置以下
vim /etc/my.conf

log-bin=mysql-bin
server-id=2            #与主库不能一致
binlog_format=statement         #复制模式
max_binlog_size=100M         #超过max_binlog_size或超过6小时会切换到下一序号文件
binlog_cache_size=16M
expire_logs_days= 7                           #日志过期时间,设置为0则永不过期
relay_log_recovery  = 1            #当slave从库宕机后,假如relay-log损坏了
innodb_flush_log_at_trx_commit = 1     #每次事务提交将日志缓冲区写入log file,并同时flush到磁盘。

relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

#需要同步的库
replicate-do-db=demo

 连接信息配置

CHANGE MASTER TO
MASTER_HOST = '172.18.10.119',  
MASTER_USER = 'replication',
MASTER_PASSWORD = 'Test@123456',
MASTER_PORT = 3306,
MASTER_LOG_FILE='mysql-bin.000005', #使用从主库查询的结果
MASTER_LOG_POS=154,              #使用从主库查询的结果
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000;

启动

#开启同步
start slave;

#查看同步状态
show slave status\G;

 

标签:语句,binlog,主从复制,slave,log,MASTER,mysql,日志
From: https://www.cnblogs.com/chuanghongmeng/p/17803032.html

相关文章

  • Oracle转为Mysql的数据结构差别
     Oracle的表空间相关函数TABLESPACE"SYSTEM"LOGGINGNOCOMPRESSPCTFREE10INITRANS1STORAGE(INITIAL65536NEXT1048576MINEXTENTS1MAXEXTENTS2147483645FREELISTS1FREELISTGROUPS1BUFFER_POOLDEFAULT)PARALLEL1NOCACHEDISABLE......
  • mysql安装步骤(windows版zip包)
    1.官网下载安装包https://cdn.mysql.com//Downloads/MySQL-8.2/mysql-8.2.0-winx64.zip2.在下载后的目录下找到Mysql压缩包并将其解压至自己创建的一个文件夹内(注意:目录名不可以是中文)3.my.ini内容如下,注意路径改成自己的,第5行basedir=、第7行datadir=[mysqld]#设置3306端口port......
  • MYSQL 高级
    MySQL高级转载自:https://www.cnblogs.com/keyongkang/archive/2023/10/11/17756694.html前言:本篇文章是本人学习MySQL高级的笔记。资料:《MySQL是怎样运行的》、《小林Coding-图解MySQL》、《MySQL45讲》、《尚硅谷康师傅MySQL视频》一、基础篇1.什么是关系型数据库?......
  • Java后台微信点餐小程序2023年最新版笔记Springboot+Mysql+Freemarker+Bootstrap
    由于之前的Java后台微信点餐小程序有些知识点过时了,所以今天重新出一版,把里面过时的知识点更新下第一章,技术选型(重要)在开始学习之前,要记得安装jdk8和mysql8,后面的笔记里也会具体讲解怎么安装,但是jdk8和mysql8必须和石头哥保持一致。1,后台技术选型:JDK8(必须保持一致)Mysql8(必......
  • mysql客户端---SQLyog
    0.查看所有的库SHOWDATABASES;1.设置客户端连接数据库的字符集SETNAMES'utf8';如果数据子的字符集是utf8,而客户端连接数据库的字符集是latin1,数据库中的中文就会出现乱码,类似?????2.查看当前库下的所有表showtables;SHOWFULLTABLESFROM`abc`WHEREtable_type='B......
  • linux 安装 mysql8
    安装查看版本查看状态......
  • mysql添加非 root 级别用户
    进入mysql容器内部dockerexec-itCOMMAND/bash输入密码登录MySQL回车输入密码passwordroot@94c490e7da78:/#mysql-pEnterpassword:添加数据库先使用root用户添加数据库:--进入sql服务后首先查看有哪些数据库showdatabases;--若没有新建一个CREATEDATABASEdatabas......
  • mysql数据库管理-FEDERATED存储引擎远程链接MYSQL
    开启FEDERATED存储引擎1.1、查看存储引擎存在的FEDERATED存储引擎就配置文件开启不存在就安装查看showengines;YES支持并开启DEFAULT支持并开启,并且为默认引擎;NO不支持;DISABLED支持,但未开启。创建federated引擎表创建语句最好和原表语句一样,当然去掉id的auto之类的。CREATE......
  • 将MySQL默认字符集改为utf8mb4
    将MySQL默认字符集改为utf8mb4查看当前默认字符集mysql>SHOWVARIABLESWHEREVariable_nameLIKE'character\_set\_%'ORVariable_nameLIKE'collation%';进入mysql配置文件;设置字符集为utf8mb4[client]default-character-set=utf8mb4[mysql]default-character-set=......
  • MySQL的create table as 与create table like区别
    一、区别对于mysql的复制相同表结构方法,有createtableas和createtablelike两种:createtablet2asselect*fromt1;as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。createtablet2liket1;like创建出来的新表包含源表的完整表结构和索引......